From 69c30b95badbdfb0915412a21380eac3400dcf09 Mon Sep 17 00:00:00 2001 From: imodeljs-admin <38288322+imodeljs-admin@users.noreply.github.com> Date: Fri, 15 Mar 2019 08:26:23 -0400 Subject: [PATCH] 0.190.0 --- README.md | 6 +- common/api/ecschema-metadata.api.ts | 4226 ++--- common/api/geometry-core.api.ts | 11874 +++++++------- common/api/imodeljs-backend.api.ts | 5631 +++---- common/api/imodeljs-clients-backend.api.ts | 240 +- common/api/imodeljs-clients.api.ts | 3303 ++-- common/api/imodeljs-common.api.ts | 9599 +++++------ common/api/imodeljs-frontend.api.ts | 13384 ++++++++-------- common/api/imodeljs-i18n.api.ts | 19 +- common/api/imodeljs-quantity.api.ts | 23 + common/api/presentation-common.api.ts | 2733 ++-- common/api/presentation-components.api.ts | 239 +- common/api/presentation-frontend.api.ts | 274 +- .../rush/browser-approved-packages.json | 50 +- common/config/rush/shrinkwrap.yaml | 1324 +- common/config/rush/version-policies.json | 2 +- core/backend/CHANGELOG.json | 15 + core/backend/CHANGELOG.md | 10 +- core/backend/package.json | 28 +- core/backend/src/ECDb.ts | 6 +- core/backend/src/ExportGraphics.ts | 58 + core/backend/src/ExpressServer.ts | 1 + core/backend/src/IModelDb.ts | 44 +- core/backend/src/IModelHost.ts | 7 +- core/backend/src/IModelJsNative.ts | 2 + core/backend/src/imodeljs-backend.ts | 1 + core/bentley/CHANGELOG.json | 6 + core/bentley/CHANGELOG.md | 7 +- core/bentley/package.json | 6 +- core/clients-backend/CHANGELOG.json | 21 + core/clients-backend/CHANGELOG.md | 12 +- core/clients-backend/package.json | 22 +- .../src/imodeljs-clients-backend-mobile.ts | 10 +- core/clients/CHANGELOG.json | 12 + core/clients/CHANGELOG.md | 9 +- core/clients/package.json | 15 +- core/clients/src/UserInfo.ts | 2 +- core/common/CHANGELOG.json | 18 + core/common/CHANGELOG.md | 11 +- core/common/package.json | 18 +- core/common/src/Paging.ts | 4 +- core/common/src/TileProps.ts | 4 +- core/common/src/ViewProps.ts | 34 +- core/ecschema-metadata/CHANGELOG.json | 6 + core/ecschema-metadata/CHANGELOG.md | 7 +- core/ecschema-metadata/package.json | 15 +- core/electron-manager/CHANGELOG.json | 6 + core/electron-manager/CHANGELOG.md | 7 +- core/electron-manager/package.json | 4 +- core/frontend/CHANGELOG.json | 36 + core/frontend/CHANGELOG.md | 17 +- core/frontend/certa.json | 21 + core/frontend/package.json | 50 +- core/frontend/src/CategorySelectorState.ts | 14 +- core/frontend/src/ContextRealityModelState.ts | 1 + core/frontend/src/DisplayStyleState.ts | 121 +- core/frontend/src/ElementLocateManager.ts | 6 + core/frontend/src/IModelConnection.ts | 2 +- core/frontend/src/ImageUtil.ts | 13 +- core/frontend/src/ModelSelectorState.ts | 8 +- core/frontend/src/ModelState.ts | 83 +- core/frontend/src/NoRenderApp.ts | 6 +- core/frontend/src/Plugin.ts | 108 +- core/frontend/src/RenderScheduleState.ts | 1 + core/frontend/src/Sheet.ts | 69 +- core/frontend/src/ViewContext.ts | 25 +- core/frontend/src/ViewManager.ts | 33 +- core/frontend/src/ViewState.ts | 69 +- core/frontend/src/Viewport.ts | 143 +- core/frontend/src/properties/EditorParams.ts | 15 +- core/frontend/src/render/FeatureSymbology.ts | 72 +- core/frontend/src/render/GraphicBuilder.ts | 22 +- core/frontend/src/render/MockRender.ts | 24 +- core/frontend/src/render/System.ts | 140 +- core/frontend/src/render/webgl/ClipVolume.ts | 4 +- .../src/render/webgl/InstancedGeometry.ts | 21 +- core/frontend/src/render/webgl/Mesh.ts | 2 +- core/frontend/src/render/webgl/Primitive.ts | 15 +- .../src/render/webgl/ShaderBuilder.ts | 9 +- core/frontend/src/render/webgl/System.ts | 24 +- core/frontend/src/render/webgl/glsl/Color.ts | 28 +- core/frontend/src/render/webgl/glsl/Edge.ts | 11 +- .../src/render/webgl/glsl/FeatureSymbology.ts | 33 +- .../src/render/webgl/glsl/Instancing.ts | 94 + .../src/render/webgl/glsl/PointString.ts | 11 +- .../src/render/webgl/glsl/Polyline.ts | 27 +- .../src/render/webgl/glsl/SkySphere.ts | 2 +- core/frontend/src/render/webgl/glsl/Vertex.ts | 97 +- .../frontend/src/test}/FrameBuffer.test.ts | 6 +- .../frontend/src/test}/Handle.test.ts | 7 +- .../frontend/src/test}/IModelApp.test.ts | 13 +- .../frontend/src/test/MockRender.test.ts | 69 +- .../frontend/src/test}/RenderFlags.test.ts | 4 +- .../frontend/src/test}/RenderState.test.ts | 9 +- .../frontend/src/test}/ShaderBuilder.test.ts | 6 +- .../frontend/src/test}/System.test.ts | 3 +- .../frontend/src/test}/Target.test.ts | 4 +- .../frontend/src/test}/Technique.test.ts | 6 +- .../frontend/src/test}/Texture.test.ts | 9 +- .../frontend/src/test}/ToolRegistry.test.ts | 8 +- .../frontend/src/test}/VertexTable.test.ts | 7 +- .../src/test}/public/locales/en/TestApp.json | 0 .../src/test/render}/CachedGeometry.test.ts | 0 .../src/test/render}/ColorMap.test.ts | 2 +- .../src/test/render}/DisplayParams.test.ts | 2 +- .../src/test/render}/EdgeOverrides.test.ts | 4 +- .../src/test/render/FeatureSymbology.test.ts | 44 + .../src/test/render}/FeaturesInfo.test.ts | 2 +- .../src/test/render}/FloatRGBA.test.ts | 2 +- .../src/test/render}/Geometry.test.ts | 7 +- .../frontend/src/test/render}/Matrix.test.ts | 2 +- .../src/test/render}/Polyline.test.ts | 0 .../src/test/render}/Primitives.test.ts | 2 +- .../frontend/src/test/render}/Strokes.test.ts | 2 +- .../src/test/render}/VertexKey.test.ts | 2 +- .../src/test/utils/WebGLTestContext.ts | 57 + .../frontend/src/test/utils/webpack.config.js | 80 + core/frontend/src/tile.ts | 1 + core/frontend/src/tile/B3dmTileIO.ts | 5 +- core/frontend/src/tile/CompositeTileIO.ts | 3 +- core/frontend/src/tile/DracoDecoder.ts | 3 +- core/frontend/src/tile/GltfTileIO.ts | 99 +- core/frontend/src/tile/I3dmTileIO.ts | 57 +- core/frontend/src/tile/IModelTile.ts | 305 + core/frontend/src/tile/IModelTileIO.ts | 96 +- core/frontend/src/tile/PntsTileIO.ts | 6 +- .../frontend/src/tile/RealityModelTileTree.ts | 20 +- core/frontend/src/tile/TileAdmin.ts | 101 +- core/frontend/src/tile/TileIO.ts | 16 +- core/frontend/src/tile/TileRequest.ts | 34 +- core/frontend/src/tile/TileTree.ts | 258 +- core/frontend/src/tile/WebMercatorTileTree.ts | 11 +- core/frontend/src/tools/ToolAdmin.ts | 18 +- core/frontend/src/tools/ViewTool.ts | 34 +- core/geometry/CHANGELOG.json | 12 + core/geometry/CHANGELOG.md | 9 +- core/geometry/package.json | 6 +- core/geometry/src/clipping/ClipPrimitive.ts | 4 +- .../src/geometry3d/Point2dVector2d.ts | 6 +- .../src/serialization/GeometrySamples.ts | 40 + core/geometry/src/solid/SweepContour.ts | 4 +- core/geometry/src/test/GeometryCoreTestIO.ts | 9 +- .../src/test/clipping/ClipPrimitives.test.ts | 8 +- core/geometry/src/test/topology/Graph.test.ts | 816 +- .../src/test/topology/Triangulator.test.ts | 497 + core/geometry/src/topology/Graph.ts | 61 +- core/geometry/src/topology/Merging.ts | 490 +- core/geometry/src/topology/Triangulation.ts | 473 +- core/i18n/CHANGELOG.json | 6 + core/i18n/CHANGELOG.md | 7 +- core/i18n/package.json | 10 +- core/logger-config/CHANGELOG.json | 6 + core/logger-config/CHANGELOG.md | 7 +- core/logger-config/package.json | 8 +- core/quantity/CHANGELOG.json | 6 + core/quantity/CHANGELOG.md | 7 +- core/quantity/package.json | 13 +- core/webserver/CHANGELOG.json | 6 + core/webserver/CHANGELOG.md | 7 +- core/webserver/package.json | 4 +- docs/core/changehistory/ChangeLogs.md | 13 + docs/core/changehistory/NextVersion.md | 1 - docs/core/changehistory/leftNav.md | 14 + docs/core/config/docSites.json | 2 +- .../core/config/layouts/agentApplication.html | 8 +- .../config/layouts/browserApplication.html | 163 - .../layouts/partials/error_message.html | 2 +- .../layouts/partials/thank_you_message.html | 2 +- docs/core/config/layouts/sampleProject.html | 105 - .../config/layouts/updateApplication.html | 159 - docs/core/config/layouts/updateProject.html | 110 - .../core/getting-started/agent-application.md | 2 +- .../getting-started/application-scopes.md | 4 +- .../getting-started/browser-application.md | 4 - docs/core/getting-started/index.md | 78 +- docs/core/getting-started/leftNav.md | 10 + docs/core/getting-started/sample-project.md | 4 - .../getting-started/update-application.md | 4 - docs/core/getting-started/update-project.md | 4 - .../learning/RelatedInstanceSpecification.md | 29 + docs/presentation/learning/content/Rules.md | 28 + docs/presentation/learning/content/index.md | 11 +- .../CalculatedPropertiesSpecification.md | 21 + .../PropertiesDisplaySpecification.md | 21 + .../modifiers/PropertyEditorsSpecification.md | 69 + .../RelatedPropertiesSpecification.md | 27 + .../learning/content/rules/ContentRule.md | 29 + .../ContentInstancesOfSpecificClasses.md | 35 + .../specifications/ContentRelatedInstances.md | 43 + .../specifications/SelectedNodeInstances.md | 34 + .../learning/customization/ECExpressions.md | 26 +- .../learning/customization/Rules.md | 10 + .../learning/customization/index.md | 9 +- .../customization/rules/CheckBoxRule.md | 32 + .../customization/rules/ImageIdOverride.md | 26 + .../rules/InstanceLabelOverride.md | 25 + .../customization/rules/LabelOverride.md | 30 + .../customization/rules/SortingRule.md | 57 + .../customization/rules/StyleOverride.md | 45 + .../learning/hierarchies/ECExpressions.md | 14 +- .../learning/hierarchies/Rules.md | 31 + .../learning/hierarchies/index.md | 11 +- .../hierarchies/rules/ChildNodeRule.md | 30 + .../hierarchies/rules/GroupingRule.md | 100 + .../hierarchies/rules/RootNodeRule.md | 31 + .../specifications/AllInstanceNodes.md | 36 + .../specifications/AllRelatedInstanceNodes.md | 44 + .../hierarchies/specifications/CustomNode.md | 29 + .../CustomQueryInstanceNodes.md | 84 + .../InstanceNodesOfSpecificClasses.md | 39 + .../specifications/RelatedInstanceNodes.md | 51 + docs/presentation/learning/leftNav.md | 72 +- example-code/app/package.json | 18 +- example-code/snippets/package.json | 18 +- integration-tests/core/.nycrc | 25 + integration-tests/core/README.md | 5 + integration-tests/core/certa.json | 16 + integration-tests/core/package.json | 54 + integration-tests/core/src/backend/RpcImpl.ts | 41 + integration-tests/core/src/backend/backend.ts | 43 + .../core/src/common/RpcInterfaces.ts | 47 + .../core/src/frontend/FakeDisplayParams.ts | 10 + .../core/src}/frontend/TestViewport.ts | 638 +- .../core/src}/frontend/WebGLTestContext.ts | 0 .../core/src/frontend/_Setup.test.ts | 38 + .../src/frontend/hub}/ChangeSummary.test.ts | 5 +- .../core/src/frontend/hub}/Disposable.test.ts | 7 +- .../frontend/hub}/IModelConnection.test.ts | 5 +- .../core/src/frontend/hub}/TestData.ts | 0 .../core/src/frontend/hub}/TileIO.data.1.1.ts | 3742 ++--- .../core/src/frontend/hub}/TileIO.data.1.2.ts | 3392 ++-- .../core/src/frontend/hub}/TileIO.data.1.3.ts | 3392 ++-- .../core/src/frontend/hub}/TileIO.data.1.4.ts | 2654 +-- .../src/frontend/hub}/TileIO.data.fake.ts | 221 +- .../core/src/frontend/hub}/TileIO.data.ts | 0 .../core/src/frontend/hub}/TileIO.test.ts | 37 +- .../frontend/standalone}/ECSqlQuery.test.ts | 179 +- .../standalone}/FeatureOverrides.test.ts | 5 +- .../standalone}/FeatureSymbology.test.ts | 39 +- .../src/frontend/standalone}/GeoCoord.test.ts | 331 +- .../standalone}/GeometryAccumulator.test.ts | 10 +- .../src/frontend/standalone}/Graphic.test.ts | 5 +- .../standalone}/IModelGateway.test.ts | 4 +- .../frontend/standalone}/MeshBuilder.test.ts | 8 +- .../standalone}/MeshBuilderMap.test.ts | 8 +- .../standalone}/MeshPrimitives.test.ts | 10 +- .../frontend/standalone}/ModelState.test.ts | 21 +- .../standalone}/PrimitiveBuilder.test.ts | 5 +- .../src/frontend/standalone}/Render.test.ts | 737 +- .../src/frontend/standalone}/Tool.test.ts | 3 +- .../frontend/standalone}/ViewState.test.ts | 13 +- .../src/frontend/standalone}/Viewport.test.ts | 3 +- .../core}/tsconfig.json | 8 +- integration-tests/core/tslint.json | 8 + integration-tests/core/webpack.config.js | 86 + integration-tests/rpc/README.md | 4 + integration-tests/rpc/certa.json | 13 + .../rpc}/local_dev_server.crt | 0 .../rpc}/local_dev_server.key | 0 integration-tests/rpc/package.json | 50 + .../rpc/src/backend/CommonBackendSetup.ts | 55 + .../rpc/src}/backend/TestRpcImpl.ts | 36 +- integration-tests/rpc/src/backend/direct.ts | 9 + integration-tests/rpc/src/backend/electron.ts | 18 + integration-tests/rpc/src/backend/http.ts | 28 + integration-tests/rpc/src/backend/http2.ts | 110 + .../rpc/src/common/SideChannels.ts | 14 + .../rpc/src}/common/TestRpcInterface.ts | 57 +- .../src/frontend/Rpc.ElectronProtocol.test.ts | 61 + .../src}/frontend/Rpc.HttpProtocol.test.ts | 8 +- .../rpc/src}/frontend/RpcInterface.test.ts | 115 +- .../rpc/src/frontend/_Setup.test.ts | 30 + integration-tests/rpc/tsconfig.json | 9 + integration-tests/rpc/tslint.json | 7 + .../rpc}/webpack.config.js | 12 +- package.json | 8 +- plugins/markup/package.json | 28 +- plugins/markup/public/Markup/rotate.png | Bin 0 -> 694 bytes .../markup/public/locales/en/MarkupTools.json | 102 + plugins/markup/src/Markup.ts | 244 +- plugins/markup/src/MarkupTool.ts | 65 +- plugins/markup/src/RedlineTool.ts | 323 + plugins/markup/src/SelectTool.ts | 646 +- plugins/markup/src/SvgJsExt.ts | 224 + plugins/markup/src/TextEdit.ts | 161 + plugins/markup/src/Undo.ts | 38 +- presentation/backend/CHANGELOG.json | 12 + presentation/backend/CHANGELOG.md | 9 +- presentation/backend/package.json | 22 +- presentation/common/CHANGELOG.json | 15 + presentation/common/CHANGELOG.md | 10 +- presentation/common/Ruleset.schema.json | 108 +- presentation/common/package.json | 16 +- .../SelectedNodeInstancesSpecification.ts | 6 +- .../src/rules/customization/CheckBoxRule.ts | 6 +- .../src/rules/customization/GroupingRule.ts | 2 +- .../src/rules/customization/StyleOverride.ts | 30 +- .../rules/hierarchy/ChildNodeSpecification.ts | 7 +- .../src/test/_helpers/random/Hierarchy.ts | 1 + .../common/src/test/hierarchy/Node.test.snap | 91 +- .../test/hierarchy/NodePathElement.test.snap | 143 +- presentation/components/CHANGELOG.json | 15 + presentation/components/CHANGELOG.md | 10 +- presentation/components/package.json | 40 +- .../src/test/tree/DataProvider.test.snap | 104 +- .../test/tree/FilteredDataProvider.test.snap | 57 +- .../components/src/test/tree/Utils.test.snap | 55 +- .../test/tree/WithFilteringSupport.test.snap | 20 - presentation/components/src/tree/Utils.ts | 2 + presentation/frontend/CHANGELOG.json | 12 + presentation/frontend/CHANGELOG.md | 9 +- presentation/frontend/package.json | 28 +- presentation/testing/CHANGELOG.json | 6 + presentation/testing/CHANGELOG.md | 7 +- presentation/testing/package.json | 22 +- rush.json | 33 +- test-apps/agent-test-app/package.json | 16 +- test-apps/analysis-importer/package.json | 15 +- .../display-performance-test-app/package.json | 31 +- test-apps/display-test-app/linkplugins.js | 16 +- .../mobile.backend.webpack.config.js | 52 - .../mobile.frontend.webpack.config.js | 39 - test-apps/display-test-app/package.json | 34 +- .../display-test-app/public/DemoMarkup.svg | 635 - .../public/configuration.json | 2 +- test-apps/display-test-app/public/svgedit.svg | 30 + .../display-test-app/src/backend/backend.ts | 21 +- .../display-test-app/src/frontend/App.ts | 2 + .../src/frontend/DebugPanel.ts | 4 +- .../src/frontend/SimpleViewTest.ts | 62 +- .../src/frontend/StandardRotations.ts | 8 +- .../src/frontend/TileStatisticsTracker.ts | 72 +- .../display-test-app/src/frontend/Viewer.ts | 40 +- .../display-test-app/src/frontend/index.html | 4 +- test-apps/export-obj/package.json | 32 + test-apps/export-obj/src/ExportObj.ts | 102 + test-apps/export-obj/tsconfig.json | 12 + test-apps/export-obj/tslint.json | 3 + test-apps/imodel-from-geojson/package.json | 12 +- .../imodel-from-reality-model/package.json | 12 +- .../package.json | 34 +- .../src/frontend/NodePaths.test.snap | 303 - .../src/frontend/RulesetTesting.test.snap | 113 + .../providers/TreeDataProvider.test.snap | 4 + .../Models.PresentationRuleSet.json | 100 + test-apps/presentation-test-app/package.json | 38 +- .../src/backend/SampleRpcImpl.ts | 9 + .../src/common/SampleRpcInterface.ts | 1 + .../src/frontend/api/MyAppFrontend.ts | 4 + .../src/frontend/components/app/App.tsx | 2 +- .../ruleset-selector/RulesetSelector.tsx | 35 +- .../synchro-schedule-importer/package.json | 12 +- .../testbed/backend/IModelUnitTestRpcImpl.ts | 17 - test-apps/testbed/backend/index.ts | 282 - test-apps/testbed/bin/testbed.js | 49 - test-apps/testbed/bootstrap.js | 25 - .../common/IModelUnitTestRpcInterface.ts | 24 - test-apps/testbed/common/Testbed.ts | 18 - test-apps/testbed/common/TestbedConfig.ts | 153 - test-apps/testbed/coverage.js | 68 - test-apps/testbed/floss/.gitignore | 2 - test-apps/testbed/floss/.npmignore | 5 - test-apps/testbed/floss/.travis.yml | 18 - test-apps/testbed/floss/LICENSE | 21 - test-apps/testbed/floss/README.md | 222 - test-apps/testbed/floss/bin/floss.js | 56 - test-apps/testbed/floss/electron/index.html | 17 - test-apps/testbed/floss/electron/index.js | 137 - test-apps/testbed/floss/electron/package.json | 7 - test-apps/testbed/floss/electron/renderer.js | 202 - test-apps/testbed/floss/index.js | 96 - test-apps/testbed/floss/package.json | 90 - test-apps/testbed/floss/test/index.js | 11 - .../frontend/Rpc.ElectronProtocol.test.ts | 58 - test-apps/testbed/frontend/_Setup.test.ts | 44 - test-apps/testbed/package.json | 77 - test-apps/testbed/tslint.json | 6 - .../testbed/webpack_performance.config.js | 53 - test-apps/ui-test-app/package.json | 58 +- .../public/locales/en/SampleApp.json | 5 +- .../ui-test-app/src/frontend/appui/AppUi.tsx | 1 + .../appui/contentviews/IModelViewport.tsx | 6 +- .../appui/frontstages/Frontstage1.tsx | 28 +- .../appui/frontstages/Frontstage2.tsx | 2 +- .../appui/frontstages/ViewsFrontstage.tsx | 3 + .../appui/tooluiproviders/Tool1UiProvider.tsx | 126 +- .../widgets/MobxDemoWidget/MobxDemoView.scss | 4 + .../widgets/MobxDemoWidget/MobxDemoView.tsx | 2 +- .../appui/widgets/VisibilityTreeWidget.tsx | 53 + test-apps/ui-test-app/src/frontend/index.scss | 1 + .../src/frontend/tools/ToolWithSettings.ts | 57 + test-apps/webworker-test-app/package.json | 10 +- tools/build/CHANGELOG.json | 6 + tools/build/CHANGELOG.md | 7 +- tools/build/package.json | 2 +- tools/build/scripts/extract-api.js | 15 +- tools/certa/.npmignore | 13 + tools/certa/CHANGELOG.json | 17 + tools/certa/CHANGELOG.md | 11 + tools/certa/LICENSE.md | 11 + tools/certa/README.md | 230 + tools/certa/bin/certa.js | 99 + tools/certa/certa.schema.json | 124 + tools/certa/package.json | 62 + tools/certa/src/CertaConfig.ts | 180 + tools/certa/src/CertaCore.ts | 59 + .../src/runners/chrome/ChromeTestRunner.ts | 150 + tools/certa/src/runners/chrome/webserver.ts | 56 + .../runners/electron/ElectronTestRunner.ts | 85 + .../src/runners/electron/initElectronTests.ts | 37 + .../certa/src/runners/node/NodeTestRunner.ts | 29 + tools/certa/src/utils/CallbackUtils.ts | 42 + tools/certa/src/utils/CoverageUtils.ts | 65 + tools/certa/src/utils/SpawnUtils.ts | 59 + tools/certa/src/utils/initMocha.ts | 45 + tools/certa/src/utils/initSourceMaps.ts | 15 + tools/certa/tsconfig.json | 9 + tools/certa/tslint.json | 8 + tools/config-loader/CHANGELOG.json | 6 + tools/config-loader/CHANGELOG.md | 7 +- tools/config-loader/package.json | 4 +- tools/webpack/CHANGELOG.json | 27 + tools/webpack/CHANGELOG.md | 14 +- tools/webpack/bin/buildIModelJsModule.js | 42 +- tools/webpack/mobile/backend.config.js | 29 +- tools/webpack/modules/buildIModelJsModule.ts | 50 +- tools/webpack/modules/webpackModule.config.js | 21 +- tools/webpack/package.json | 4 +- ui/components/CHANGELOG.json | 21 + ui/components/CHANGELOG.md | 12 +- ui/components/package.json | 32 +- .../src/test/color/AlphaSlider.test.tsx | 82 + .../src/test/color/HueSlider.test.tsx | 61 + .../src/test/color/SaturationPicker.test.tsx | 60 + ui/components/src/test/color/Swatch.test.tsx | 11 +- .../src/test/tree/component/Tree.test.tsx | 66 +- ui/components/src/ui-components.ts | 5 + .../src/ui-components/color/AlphaSlider.scss | 65 + .../src/ui-components/color/AlphaSlider.tsx | 168 + .../color/ColorPickerButton.scss | 55 + .../ui-components/color/ColorPickerButton.tsx | 125 + .../src/ui-components/color/HueSlider.scss | 62 + .../src/ui-components/color/HueSlider.tsx | 182 + .../ui-components/color/SaturationPicker.scss | 40 + .../ui-components/color/SaturationPicker.tsx | 169 + .../src/ui-components/color/Swatch.scss | 21 +- .../src/ui-components/color/Swatch.tsx | 28 +- .../converters/valuetypes/ConvertedTypes.ts | 4 + .../ui-components/editors/ColorEditor.scss | 19 + .../src/ui-components/editors/ColorEditor.tsx | 160 + .../editors/EnumButtonGroupEditor.scss | 10 +- .../filtering/ResultSelector.scss | 8 +- .../src/ui-components/properties/ItemStyle.ts | 2 + .../ui-components/table/component/Table.scss | 8 +- .../ui-components/table/hocs/DragDropRow.scss | 18 +- .../tree/component/NodeContent.tsx | 7 + .../src/ui-components/tree/component/Tree.tsx | 4 +- ui/core/CHANGELOG.json | 21 + ui/core/CHANGELOG.md | 12 +- ui/core/package.json | 20 +- ui/core/src/test/icons/WebFontIcon.test.tsx | 2 +- ui/core/src/test/tree/Node.test.snap | 172 +- ui/core/src/ui-core.ts | 2 +- ui/core/src/ui-core/UiCore.ts | 6 +- ui/core/src/ui-core/_scrollbar.scss | 2 +- ui/core/src/ui-core/button/Button.tsx | 2 - .../src/ui-core/button/UnderlinedButton.scss | 5 +- .../src/ui-core/button/UnderlinedButton.tsx | 2 + ui/core/src/ui-core/button/blue-large.scss | 2 - ui/core/src/ui-core/button/blue.scss | 2 - ui/core/src/ui-core/button/classes.scss | 14 + .../src/ui-core/button/disabled-large.scss | 2 - ui/core/src/ui-core/button/disabled.scss | 3 - ui/core/src/ui-core/button/hollow-large.scss | 2 - ui/core/src/ui-core/button/hollow.scss | 3 - ui/core/src/ui-core/button/index.scss | 3 +- ui/core/src/ui-core/button/primary-large.scss | 2 - ui/core/src/ui-core/button/primary.scss | 2 - ui/core/src/ui-core/classes.scss | 12 + ui/core/src/ui-core/colors.scss | 25 - ui/core/src/ui-core/colorthemes.css | 97 - ui/core/src/ui-core/colorthemes.scss | 14 +- ui/core/src/ui-core/colorvariables.css | 50 - ui/core/src/ui-core/colorvariables.scss | 1 + .../src/ui-core/contextmenu/ContextMenu.tsx | 2 + .../ui-core/expandable/ExpandableBlock.scss | 2 +- .../Icon.scss => expandable/classes.scss} | 17 +- ui/core/src/ui-core/expandable/list.scss | 2 - ui/core/src/ui-core/icons/WebFontIcon.scss | 7 - ui/core/src/ui-core/icons/WebFontIcon.tsx | 3 +- ui/core/src/ui-core/icons/classes.scss | 10 + .../ui-core/imagecheckbox/ImageCheckBox.scss | 2 +- ui/core/src/ui-core/index.scss | 10 +- ui/core/src/ui-core/inputs/Input.tsx | 1 - ui/core/src/ui-core/inputs/LabeledInput.tsx | 1 - ui/core/src/ui-core/inputs/LabeledSelect.tsx | 1 - .../src/ui-core/inputs/LabeledTextarea.tsx | 1 - ui/core/src/ui-core/inputs/Radio.tsx | 13 +- ui/core/src/ui-core/inputs/Select.tsx | 1 - ui/core/src/ui-core/inputs/Textarea.tsx | 1 - .../src/ui-core/inputs/checkbox/Checkbox.tsx | 2 - .../src/ui-core/inputs/checkbox/checkbox.scss | 2 - ui/core/src/ui-core/inputs/classes.scss | 16 + ui/core/src/ui-core/inputs/index.scss | 4 +- ui/core/src/ui-core/inputs/input.scss | 11 +- ui/core/src/ui-core/inputs/labeled-input.scss | 10 +- .../src/ui-core/inputs/labeled-select.scss | 10 +- .../src/ui-core/inputs/labeled-textarea.scss | 10 +- ui/core/src/ui-core/inputs/radio.scss | 6 +- ui/core/src/ui-core/inputs/select.scss | 5 +- ui/core/src/ui-core/inputs/textarea.scss | 26 +- ui/core/src/ui-core/inputs/variables.scss | 3 +- .../src/ui-core/loading/LoadingPrompt.scss | 4 +- ui/core/src/ui-core/popup/Popup.tsx | 2 +- .../src/ui-core/radialmenu/RadialMenu.scss | 1 + ui/core/src/ui-core/radialmenu/RadialMenu.tsx | 2 +- ui/core/src/ui-core/searchbox/SearchBox.tsx | 5 + ui/core/src/ui-core/style/colors.scss | 1 - ui/core/src/ui-core/style/index.scss | 1 + ui/core/src/ui-core/style/mixins.scss | 6 +- ui/core/src/ui-core/style/themecolors.scss | 9 + ui/core/src/ui-core/table/variables.scss | 19 - ui/core/src/ui-core/tabs/HorizontalTabs.tsx | 2 - ui/core/src/ui-core/tabs/classes.scss | 7 + ui/core/src/ui-core/tabs/horizontal.scss | 2 - ui/core/src/ui-core/tabs/tabs.scss | 2 +- ui/core/src/ui-core/text/BodyText.tsx | 1 - ui/core/src/ui-core/text/Headline.tsx | 1 - ui/core/src/ui-core/text/LeadingText.tsx | 1 - ui/core/src/ui-core/text/LeadingText2.tsx | 1 - ui/core/src/ui-core/text/MutedText.tsx | 1 - ui/core/src/ui-core/text/SmallText.tsx | 1 - ui/core/src/ui-core/text/Subheading.tsx | 1 - ui/core/src/ui-core/text/Subheading2.tsx | 1 - ui/core/src/ui-core/text/Title.tsx | 1 - ui/core/src/ui-core/text/Title2.tsx | 1 - ui/core/src/ui-core/text/block.scss | 2 - ui/core/src/ui-core/text/classes.scss | 16 + ui/core/src/ui-core/text/headline.scss | 2 - ui/core/src/ui-core/text/index.scss | 3 +- ui/core/src/ui-core/text/leading-2.scss | 2 - ui/core/src/ui-core/text/leading.scss | 2 - ui/core/src/ui-core/text/mixins.scss | 1 + ui/core/src/ui-core/text/muted.scss | 2 - ui/core/src/ui-core/text/small.scss | 2 - ui/core/src/ui-core/text/subheading-2.scss | 2 - ui/core/src/ui-core/text/subheading.scss | 2 - ui/core/src/ui-core/text/title-2.scss | 2 - ui/core/src/ui-core/text/title.scss | 2 - ui/core/src/ui-core/toggle/Toggle.scss | 1 - ui/core/src/ui-core/tree/ExpansionToggle.scss | 2 +- ui/core/src/ui-core/tree/Node.scss | 51 +- ui/core/src/ui-core/tree/Node.tsx | 23 +- ui/core/src/ui-core/tree/Placeholder.scss | 4 +- ui/framework/.npmignore | 1 + ui/framework/CHANGELOG.json | 33 + ui/framework/CHANGELOG.md | 16 +- ui/framework/package.json | 63 +- .../src/test/content/ContentLayout.test.snap | 20 +- .../src/test/content/ContentLayout.test.tsx | 11 +- .../test/feedback/ValidationTextbox.test.snap | 2 +- .../frontstage/FrontstageComposer.test.tsx | 2 +- .../test/frontstage/ModalFrontstage.test.tsx | 2 +- .../visibility-tree/VisibilityTree.test.snap | 468 + .../visibility-tree/VisibilityTree.test.tsx | 840 + .../src/test/messages/InputField.test.snap | 6 +- .../CubeNavigationAid.test.snap | 2 +- .../SheetNavigationAid.test.snap | 2 +- .../StandardRotationNavigationAid.test.snap | 2 +- .../src/test/pickers/ModelSelector.test.snap | 3 + .../src/test/shared/IconComponent.test.snap | 12 +- .../test/syncui/SyncUiEventDispatcher.test.ts | 8 +- ui/framework/src/ui-framework.ts | 4 + .../configurableui/ConfigurableUiContent.tsx | 16 +- .../configurableui/ConfigurableUiManager.tsx | 4 +- .../configurableui/configurableui.scss | 30 +- .../ui-framework/content/ContentLayout.scss | 135 +- .../ui-framework/content/ContentLayout.tsx | 30 +- .../dragdrop/DragDropLayerManager.tsx | 2 +- .../ui-framework/feedback/ElementTooltip.tsx | 2 +- .../feedback/ValidationTextbox.scss | 4 +- .../feedback/ValidationTextbox.tsx | 2 +- .../frontstage/FrontstageComposer.tsx | 2 +- .../ui-framework/frontstage/FrontstageDef.tsx | 3 +- .../frontstage/ModalFrontstage.scss | 103 +- .../frontstage/ModalFrontstage.tsx | 4 +- .../visibility-tree/Hierarchy.json | 217 + .../visibility-tree/VisibilityTree.scss | 25 + .../visibility-tree/VisibilityTree.tsx | 474 + .../src/ui-framework/messages/InputField.scss | 8 +- .../src/ui-framework/messages/InputField.tsx | 8 +- .../src/ui-framework/messages/Pointer.scss | 24 +- .../src/ui-framework/messages/Pointer.tsx | 2 +- .../navigationaids/CubeNavigationAid.scss | 12 +- .../navigationaids/CubeNavigationAid.tsx | 2 +- .../navigationaids/SheetNavigationAid.scss | 2 +- .../navigationaids/SheetNavigationAid.tsx | 2 +- .../navigationaids/SheetsModalFrontstage.scss | 4 +- .../navigationaids/SheetsModalFrontstage.tsx | 4 +- .../StandardRotationNavigationAid.scss | 2 +- .../StandardRotationNavigationAid.tsx | 2 +- .../src/ui-framework/oidc/SignIn.scss | 4 +- .../src/ui-framework/oidc/SignOut.scss | 2 +- .../ui-framework/openimodel/IModelList.scss | 6 +- .../openimodel/IModelViewPicker.scss | 2 +- .../ui-framework/openimodel/PopupTest.scss | 2 +- .../openimodel/ProjectDialog.scss | 4 +- .../src/ui-framework/pickers/ListPicker.scss | 35 +- .../src/ui-framework/pickers/ListPicker.tsx | 2 +- .../ui-framework/pickers/ModelSelector.scss | 69 +- .../ui-framework/pickers/ModelSelector.tsx | 236 +- .../src/ui-framework/settings/Settings.scss | 4 +- .../src/ui-framework/settings/Settings.tsx | 4 +- .../src/ui-framework/shared/IconComponent.tsx | 2 +- .../statusfields/ActivityCenter.tsx | 4 +- .../statusfields/MessageCenter.tsx | 20 +- .../src/ui-framework/widgets/StatusBar.tsx | 4 +- .../DefaultToolSettingsProvider.scss | 6 +- .../DefaultToolSettingsProvider.tsx | 4 +- ui/ninezone/CHANGELOG.json | 18 + ui/ninezone/CHANGELOG.md | 11 +- ui/ninezone/demo/src/pages/Home/Home.scss | 8 +- ui/ninezone/demo/src/pages/Zones.scss | 10 +- ui/ninezone/package.json | 10 +- .../test/zones/state/layout/Layouts.test.ts | 2 +- ui/ninezone/src/ui-ninezone/_scrollbar.scss | 2 +- .../src/ui-ninezone/backstage/_variables.scss | 2 +- .../src/ui-ninezone/footer/Footer.scss | 45 +- .../src/ui-ninezone/footer/StatusBarText.scss | 2 +- .../src/ui-ninezone/footer/_variables.scss | 8 +- .../footer/message-center/Content.scss | 8 +- .../footer/message-center/Message.scss | 8 +- .../footer/message-center/MessageCenter.scss | 2 +- .../footer/message-center/Tab.scss | 10 +- .../src/ui-ninezone/footer/message/Toast.scss | 2 +- .../footer/message/content/Button.scss | 2 +- .../footer/message/content/Hyperlink.scss | 8 +- .../footer/message/content/Progress.scss | 2 +- .../footer/message/content/dialog/Button.scss | 2 +- .../footer/message/content/dialog/Dialog.scss | 2 +- .../message/content/dialog/ResizeHandle.scss | 4 +- .../footer/message/content/dialog/Title.scss | 4 +- .../message/content/dialog/TitleBar.scss | 2 +- .../content/dialog/content/Scrollable.scss | 4 +- .../message/content/status/Message.scss | 4 +- .../footer/selection-info/SelectionInfo.scss | 2 +- .../ui-ninezone/footer/snap-mode/Dialog.scss | 2 +- .../ui-ninezone/footer/snap-mode/Icon.scss | 2 +- .../footer/snap-mode/Indicator.scss | 7 +- .../ui-ninezone/footer/snap-mode/Snap.scss | 12 +- .../footer/tool-assistance/Content.scss | 4 +- .../footer/tool-assistance/Dialog.scss | 2 +- .../footer/tool-assistance/Separator.scss | 4 +- .../ui-ninezone/popup/popover/Triangle.scss | 2 +- .../ui-ninezone/popup/tooltip/Tooltip.scss | 2 +- .../src/ui-ninezone/toolbar/Items.scss | 2 +- .../src/ui-ninezone/toolbar/item/Icon.scss | 12 +- .../ui-ninezone/toolbar/item/_variables.scss | 6 +- .../toolbar/item/expandable/group/Nested.scss | 2 +- .../item/expandable/group/_variables.scss | 2 +- .../item/expandable/group/tool/Tool.scss | 8 +- .../expandable/group/tool/_variables.scss | 2 +- .../toolbar/item/expandable/history/Icon.scss | 2 +- .../toolbar/item/expandable/history/Item.scss | 4 +- .../toolbar/item/expandable/history/Tray.scss | 4 +- .../item/expandable/history/_variables.scss | 4 +- .../src/ui-ninezone/widget/Stacked.scss | 2 +- .../src/ui-ninezone/widget/ToolSettings.scss | 2 +- .../src/ui-ninezone/widget/_variables.scss | 6 +- .../widget/rectangular/Content.scss | 4 +- .../widget/rectangular/tab/Group.scss | 4 +- .../widget/rectangular/tab/Tab.scss | 10 +- .../ui-ninezone/widget/tool-settings/Tab.scss | 4 +- .../widget/tools/button/Button.scss | 4 +- .../widget/tools/button/_variables.scss | 4 +- .../ui-ninezone/zones/state/layout/Root.ts | 2 +- .../src/ui-ninezone/zones/target/Arrow.scss | 4 +- .../src/ui-ninezone/zones/target/Merge.scss | 2 +- 678 files changed, 49296 insertions(+), 41988 deletions(-) create mode 100644 core/backend/src/ExportGraphics.ts rename ui/core/src/ui-core/table/index.scss => core/clients-backend/src/imodeljs-clients-backend-mobile.ts (86%) create mode 100644 core/frontend/certa.json create mode 100644 core/frontend/src/render/webgl/glsl/Instancing.ts rename {test-apps/testbed/frontend => core/frontend/src/test}/FrameBuffer.test.ts (95%) rename {test-apps/testbed/frontend => core/frontend/src/test}/Handle.test.ts (86%) rename {test-apps/testbed/frontend => core/frontend/src/test}/IModelApp.test.ts (94%) rename test-apps/testbed/frontend/MockRender.ts => core/frontend/src/test/MockRender.test.ts (86%) rename {test-apps/testbed/frontend => core/frontend/src/test}/RenderFlags.test.ts (94%) rename {test-apps/testbed/frontend => core/frontend/src/test}/RenderState.test.ts (98%) rename {test-apps/testbed/frontend => core/frontend/src/test}/ShaderBuilder.test.ts (96%) rename {test-apps/testbed/frontend => core/frontend/src/test}/System.test.ts (95%) rename {test-apps/testbed/frontend => core/frontend/src/test}/Target.test.ts (98%) rename {test-apps/testbed/frontend => core/frontend/src/test}/Technique.test.ts (95%) rename {test-apps/testbed/frontend => core/frontend/src/test}/Texture.test.ts (97%) rename {test-apps/testbed/frontend => core/frontend/src/test}/ToolRegistry.test.ts (99%) rename {test-apps/testbed/frontend => core/frontend/src/test}/VertexTable.test.ts (95%) rename {test-apps/testbed => core/frontend/src/test}/public/locales/en/TestApp.json (100%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/CachedGeometry.test.ts (100%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/ColorMap.test.ts (98%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/DisplayParams.test.ts (98%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/EdgeOverrides.test.ts (93%) create mode 100644 core/frontend/src/test/render/FeatureSymbology.test.ts rename {test-apps/testbed/frontend => core/frontend/src/test/render}/FeaturesInfo.test.ts (98%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/FloatRGBA.test.ts (98%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/Geometry.test.ts (93%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/Matrix.test.ts (99%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/Polyline.test.ts (100%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/Primitives.test.ts (97%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/Strokes.test.ts (96%) rename {test-apps/testbed/frontend => core/frontend/src/test/render}/VertexKey.test.ts (93%) create mode 100644 core/frontend/src/test/utils/WebGLTestContext.ts create mode 100644 core/frontend/src/test/utils/webpack.config.js create mode 100644 core/frontend/src/tile/IModelTile.ts create mode 100644 core/geometry/src/test/topology/Triangulator.test.ts create mode 100644 docs/core/changehistory/ChangeLogs.md delete mode 100644 docs/core/config/layouts/browserApplication.html delete mode 100644 docs/core/config/layouts/sampleProject.html delete mode 100644 docs/core/config/layouts/updateApplication.html delete mode 100644 docs/core/config/layouts/updateProject.html delete mode 100644 docs/core/getting-started/browser-application.md create mode 100644 docs/core/getting-started/leftNav.md delete mode 100644 docs/core/getting-started/sample-project.md delete mode 100644 docs/core/getting-started/update-application.md delete mode 100644 docs/core/getting-started/update-project.md create mode 100644 docs/presentation/learning/RelatedInstanceSpecification.md create mode 100644 docs/presentation/learning/content/Rules.md create mode 100644 docs/presentation/learning/content/modifiers/CalculatedPropertiesSpecification.md create mode 100644 docs/presentation/learning/content/modifiers/PropertiesDisplaySpecification.md create mode 100644 docs/presentation/learning/content/modifiers/PropertyEditorsSpecification.md create mode 100644 docs/presentation/learning/content/modifiers/RelatedPropertiesSpecification.md create mode 100644 docs/presentation/learning/content/rules/ContentRule.md create mode 100644 docs/presentation/learning/content/specifications/ContentInstancesOfSpecificClasses.md create mode 100644 docs/presentation/learning/content/specifications/ContentRelatedInstances.md create mode 100644 docs/presentation/learning/content/specifications/SelectedNodeInstances.md create mode 100644 docs/presentation/learning/customization/Rules.md create mode 100644 docs/presentation/learning/customization/rules/CheckBoxRule.md create mode 100644 docs/presentation/learning/customization/rules/ImageIdOverride.md create mode 100644 docs/presentation/learning/customization/rules/InstanceLabelOverride.md create mode 100644 docs/presentation/learning/customization/rules/LabelOverride.md create mode 100644 docs/presentation/learning/customization/rules/SortingRule.md create mode 100644 docs/presentation/learning/customization/rules/StyleOverride.md create mode 100644 docs/presentation/learning/hierarchies/Rules.md create mode 100644 docs/presentation/learning/hierarchies/rules/ChildNodeRule.md create mode 100644 docs/presentation/learning/hierarchies/rules/GroupingRule.md create mode 100644 docs/presentation/learning/hierarchies/rules/RootNodeRule.md create mode 100644 docs/presentation/learning/hierarchies/specifications/AllInstanceNodes.md create mode 100644 docs/presentation/learning/hierarchies/specifications/AllRelatedInstanceNodes.md create mode 100644 docs/presentation/learning/hierarchies/specifications/CustomNode.md create mode 100644 docs/presentation/learning/hierarchies/specifications/CustomQueryInstanceNodes.md create mode 100644 docs/presentation/learning/hierarchies/specifications/InstanceNodesOfSpecificClasses.md create mode 100644 docs/presentation/learning/hierarchies/specifications/RelatedInstanceNodes.md create mode 100644 integration-tests/core/.nycrc create mode 100644 integration-tests/core/README.md create mode 100644 integration-tests/core/certa.json create mode 100644 integration-tests/core/package.json create mode 100644 integration-tests/core/src/backend/RpcImpl.ts create mode 100644 integration-tests/core/src/backend/backend.ts create mode 100644 integration-tests/core/src/common/RpcInterfaces.ts create mode 100644 integration-tests/core/src/frontend/FakeDisplayParams.ts rename {test-apps/testbed => integration-tests/core/src}/frontend/TestViewport.ts (97%) rename {test-apps/testbed => integration-tests/core/src}/frontend/WebGLTestContext.ts (100%) create mode 100644 integration-tests/core/src/frontend/_Setup.test.ts rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/ChangeSummary.test.ts (93%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/Disposable.test.ts (98%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/IModelConnection.test.ts (98%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TestData.ts (100%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.data.1.1.ts (99%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.data.1.2.ts (99%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.data.1.3.ts (99%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.data.1.4.ts (99%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.data.fake.ts (94%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.data.ts (100%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/hub}/TileIO.test.ts (95%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/ECSqlQuery.test.ts (93%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/FeatureOverrides.test.ts (96%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/FeatureSymbology.test.ts (89%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/GeoCoord.test.ts (95%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/GeometryAccumulator.test.ts (97%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/Graphic.test.ts (89%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/IModelGateway.test.ts (94%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/MeshBuilder.test.ts (98%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/MeshBuilderMap.test.ts (98%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/MeshPrimitives.test.ts (93%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/ModelState.test.ts (92%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/PrimitiveBuilder.test.ts (98%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/Render.test.ts (96%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/Tool.test.ts (97%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/ViewState.test.ts (97%) rename {test-apps/testbed/frontend => integration-tests/core/src/frontend/standalone}/Viewport.test.ts (98%) rename {test-apps/testbed => integration-tests/core}/tsconfig.json (55%) create mode 100644 integration-tests/core/tslint.json create mode 100644 integration-tests/core/webpack.config.js create mode 100644 integration-tests/rpc/README.md create mode 100644 integration-tests/rpc/certa.json rename {test-apps/testbed => integration-tests/rpc}/local_dev_server.crt (100%) rename {test-apps/testbed => integration-tests/rpc}/local_dev_server.key (100%) create mode 100644 integration-tests/rpc/package.json create mode 100644 integration-tests/rpc/src/backend/CommonBackendSetup.ts rename {test-apps/testbed => integration-tests/rpc/src}/backend/TestRpcImpl.ts (83%) create mode 100644 integration-tests/rpc/src/backend/direct.ts create mode 100644 integration-tests/rpc/src/backend/electron.ts create mode 100644 integration-tests/rpc/src/backend/http.ts create mode 100644 integration-tests/rpc/src/backend/http2.ts create mode 100644 integration-tests/rpc/src/common/SideChannels.ts rename {test-apps/testbed => integration-tests/rpc/src}/common/TestRpcInterface.ts (66%) create mode 100644 integration-tests/rpc/src/frontend/Rpc.ElectronProtocol.test.ts rename {test-apps/testbed => integration-tests/rpc/src}/frontend/Rpc.HttpProtocol.test.ts (86%) rename {test-apps/testbed => integration-tests/rpc/src}/frontend/RpcInterface.test.ts (80%) create mode 100644 integration-tests/rpc/src/frontend/_Setup.test.ts create mode 100644 integration-tests/rpc/tsconfig.json create mode 100644 integration-tests/rpc/tslint.json rename {test-apps/testbed => integration-tests/rpc}/webpack.config.js (86%) create mode 100644 plugins/markup/public/Markup/rotate.png create mode 100644 plugins/markup/public/locales/en/MarkupTools.json create mode 100644 plugins/markup/src/RedlineTool.ts create mode 100644 plugins/markup/src/SvgJsExt.ts create mode 100644 plugins/markup/src/TextEdit.ts delete mode 100644 test-apps/display-test-app/mobile.backend.webpack.config.js delete mode 100644 test-apps/display-test-app/mobile.frontend.webpack.config.js delete mode 100644 test-apps/display-test-app/public/DemoMarkup.svg create mode 100644 test-apps/display-test-app/public/svgedit.svg create mode 100644 test-apps/export-obj/package.json create mode 100644 test-apps/export-obj/src/ExportObj.ts create mode 100644 test-apps/export-obj/tsconfig.json create mode 100644 test-apps/export-obj/tslint.json delete mode 100644 test-apps/presentation-integration-tests/src/frontend/NodePaths.test.snap create mode 100644 test-apps/presentation-test-app/assets/presentation_rules/Models.PresentationRuleSet.json delete mode 100644 test-apps/testbed/backend/IModelUnitTestRpcImpl.ts delete mode 100644 test-apps/testbed/backend/index.ts delete mode 100644 test-apps/testbed/bin/testbed.js delete mode 100644 test-apps/testbed/bootstrap.js delete mode 100644 test-apps/testbed/common/IModelUnitTestRpcInterface.ts delete mode 100644 test-apps/testbed/common/Testbed.ts delete mode 100644 test-apps/testbed/common/TestbedConfig.ts delete mode 100644 test-apps/testbed/coverage.js delete mode 100644 test-apps/testbed/floss/.gitignore delete mode 100644 test-apps/testbed/floss/.npmignore delete mode 100644 test-apps/testbed/floss/.travis.yml delete mode 100644 test-apps/testbed/floss/LICENSE delete mode 100644 test-apps/testbed/floss/README.md delete mode 100644 test-apps/testbed/floss/bin/floss.js delete mode 100644 test-apps/testbed/floss/electron/index.html delete mode 100644 test-apps/testbed/floss/electron/index.js delete mode 100644 test-apps/testbed/floss/electron/package.json delete mode 100644 test-apps/testbed/floss/electron/renderer.js delete mode 100644 test-apps/testbed/floss/index.js delete mode 100644 test-apps/testbed/floss/package.json delete mode 100644 test-apps/testbed/floss/test/index.js delete mode 100644 test-apps/testbed/frontend/Rpc.ElectronProtocol.test.ts delete mode 100644 test-apps/testbed/frontend/_Setup.test.ts delete mode 100644 test-apps/testbed/package.json delete mode 100644 test-apps/testbed/tslint.json delete mode 100644 test-apps/testbed/webpack_performance.config.js create mode 100644 test-apps/ui-test-app/src/frontend/appui/widgets/VisibilityTreeWidget.tsx create mode 100644 tools/certa/.npmignore create mode 100644 tools/certa/CHANGELOG.json create mode 100644 tools/certa/CHANGELOG.md create mode 100644 tools/certa/LICENSE.md create mode 100644 tools/certa/README.md create mode 100644 tools/certa/bin/certa.js create mode 100644 tools/certa/certa.schema.json create mode 100644 tools/certa/package.json create mode 100644 tools/certa/src/CertaConfig.ts create mode 100644 tools/certa/src/CertaCore.ts create mode 100644 tools/certa/src/runners/chrome/ChromeTestRunner.ts create mode 100644 tools/certa/src/runners/chrome/webserver.ts create mode 100644 tools/certa/src/runners/electron/ElectronTestRunner.ts create mode 100644 tools/certa/src/runners/electron/initElectronTests.ts create mode 100644 tools/certa/src/runners/node/NodeTestRunner.ts create mode 100644 tools/certa/src/utils/CallbackUtils.ts create mode 100644 tools/certa/src/utils/CoverageUtils.ts create mode 100644 tools/certa/src/utils/SpawnUtils.ts create mode 100644 tools/certa/src/utils/initMocha.ts create mode 100644 tools/certa/src/utils/initSourceMaps.ts create mode 100644 tools/certa/tsconfig.json create mode 100644 tools/certa/tslint.json create mode 100644 ui/components/src/test/color/AlphaSlider.test.tsx create mode 100644 ui/components/src/test/color/HueSlider.test.tsx create mode 100644 ui/components/src/test/color/SaturationPicker.test.tsx create mode 100644 ui/components/src/ui-components/color/AlphaSlider.scss create mode 100644 ui/components/src/ui-components/color/AlphaSlider.tsx create mode 100644 ui/components/src/ui-components/color/ColorPickerButton.scss create mode 100644 ui/components/src/ui-components/color/ColorPickerButton.tsx create mode 100644 ui/components/src/ui-components/color/HueSlider.scss create mode 100644 ui/components/src/ui-components/color/HueSlider.tsx create mode 100644 ui/components/src/ui-components/color/SaturationPicker.scss create mode 100644 ui/components/src/ui-components/color/SaturationPicker.tsx create mode 100644 ui/components/src/ui-components/editors/ColorEditor.scss create mode 100644 ui/components/src/ui-components/editors/ColorEditor.tsx create mode 100644 ui/core/src/ui-core/button/classes.scss create mode 100644 ui/core/src/ui-core/classes.scss delete mode 100644 ui/core/src/ui-core/colors.scss delete mode 100644 ui/core/src/ui-core/colorthemes.css delete mode 100644 ui/core/src/ui-core/colorvariables.css rename ui/core/src/ui-core/{icons/Icon.scss => expandable/classes.scss} (64%) create mode 100644 ui/core/src/ui-core/icons/classes.scss create mode 100644 ui/core/src/ui-core/inputs/classes.scss delete mode 100644 ui/core/src/ui-core/table/variables.scss create mode 100644 ui/core/src/ui-core/tabs/classes.scss create mode 100644 ui/core/src/ui-core/text/classes.scss create mode 100644 ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.snap create mode 100644 ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.tsx create mode 100644 ui/framework/src/ui-framework/imodel-components/visibility-tree/Hierarchy.json create mode 100644 ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.scss create mode 100644 ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.tsx diff --git a/README.md b/README.md index 99ca18c..acf5aee 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,9 @@ See [rush.json](./rush.json) for the list of packages. These packages are descri * `test-apps/display-test-app/package.json` * Private, not published * Test application for graphics visualization -* `test-apps/testbed/package.json` +* `integration-tests/core/package.json` * Private, not published - * Test application for frontend/backend interaction + * Integration tests for frontend/backend interaction using standard RPC interfaces Each package will have its own **node_modules** directory which will contain symbolic links to *common* dependencies managed by Rush. @@ -88,7 +88,7 @@ Note that it is a good idea to `rush install` after each `git pull` as dependenc 3. Locally commit changes: `git commit` (or use the Visual Studio Code user interface) 4. Repeat steps 1-3 until ready to push changes 5. Add changelog entry (which could potentially cover several commits): `rush change` -6. Follow prompts to enter a change description or press ENTER if the change does not warrant a changelog entry. If multiple packages have changed, multiple sets of prompts will be presented. If the changes are only to non-published packages (like **testbed**), then `rush change` will indicate that a changelog entry is not needed. +6. Follow prompts to enter a change description or press ENTER if the change does not warrant a changelog entry. If multiple packages have changed, multiple sets of prompts will be presented. If the changes are only to non-published packages (like **display-test-app**), then `rush change` will indicate that a changelog entry is not needed. 7. Completing the `rush change` prompts will cause new changelog entry JSON files to be created. 8. Check for API signature changes: `rush extract-api`. This will update the signature files, located in `common/api`. 9. Review any diffs to the API signature files in the `common/api` directory to ensure they are compatible with the intended release of the package diff --git a/common/api/ecschema-metadata.api.ts b/common/api/ecschema-metadata.api.ts index 9b19178..fb868d9 100644 --- a/common/api/ecschema-metadata.api.ts +++ b/common/api/ecschema-metadata.api.ts @@ -1,2113 +1,2113 @@ -// @public (undocumented) -class ArrayProperty extends Property { - // (undocumented) - protected _maxOccurs?: number; - // (undocumented) - protected _minOccurs: number; - // (undocumented) - readonly maxOccurs: number | undefined; - // (undocumented) - readonly minOccurs: number; -} - -// @public -class BaseDiagnostic implements IDiagnostic { - constructor(ecDefinition: TYPE, messageArgs: ARGS); - readonly category: DiagnosticCategory; - readonly code: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: TYPE; - messageArgs: ARGS; - readonly messageText: string; -} - -// @public -class ClassDiagnostic extends SchemaItemDiagnostic { - constructor(ecClass: AnyClass, messageArgs: ARGS); -} - -// @public -export function classModifierToString(modifier: ECClassModifier): string; - -// @public -class Constant extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _definition: string; - // (undocumented) - protected _denominator: number; - // (undocumented) - protected _numerator: number; - // (undocumented) - protected _phenomenon?: LazyLoadedPhenomenon; - // (undocumented) - readonly definition: string; - // (undocumented) - readonly denominator: number; - // WARNING: The type "ConstantProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(constantProps: ConstantProps): Promise; - // WARNING: The type "ConstantProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(constantProps: ConstantProps): void; - // (undocumented) - readonly numerator: number; - // (undocumented) - readonly phenomenon: LazyLoadedPhenomenon | undefined; - // WARNING: The type "SchemaItemType.Constant" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.Constant; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public -export function containerTypeToString(type: CustomAttributeContainerType): string; - -// @public -export function createClassDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { - new (ecClass: AnyClass, messageArgs: ARGS): { - readonly code: string; - readonly category: DiagnosticCategory; - readonly messageText: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: AnyClass; - messageArgs: ARGS; - }; - diagnosticType: DiagnosticType; -}; - -// @public -export function createCustomAttributeContainerDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { - new (container: CustomAttributeContainerProps, messageArgs: ARGS): { - readonly code: string; - readonly category: DiagnosticCategory; - readonly messageText: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: CustomAttributeContainerProps; - messageArgs: ARGS; - }; -}; - -// @public -export function createPropertyDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { - new (property: AnyProperty, messageArgs: ARGS): { - readonly code: string; - readonly category: DiagnosticCategory; - readonly messageText: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: AnyProperty; - messageArgs: ARGS; - }; -}; - -// @public -export function createRelationshipConstraintDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { - new (constraint: RelationshipConstraint, messageArgs: ARGS): { - readonly code: string; - readonly category: DiagnosticCategory; - readonly messageText: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: RelationshipConstraint; - messageArgs: ARGS; - }; -}; - -// @public -export function createSchemaDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { - new (schema: Schema, messageArgs: ARGS): { - readonly code: string; - readonly category: DiagnosticCategory; - readonly messageText: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: Schema; - messageArgs: ARGS; - }; - diagnosticType: DiagnosticType; -}; - -// @public -export function createSchemaItemDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { - new (ecDefinition: ITEM, messageArgs: ARGS): { - readonly code: string; - readonly category: DiagnosticCategory; - readonly messageText: string; - readonly diagnosticType: DiagnosticType; - ecDefinition: ITEM; - messageArgs: ARGS; - }; - diagnosticType: DiagnosticType; -}; - -// @public -class CustomAttributeClass extends ECClass { - constructor(schema: Schema, name: string, modifier?: ECClassModifier); - // (undocumented) - protected _containerType?: CustomAttributeContainerType; - // (undocumented) - readonly containerType: CustomAttributeContainerType; - // WARNING: The type "CustomAttributeClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(customAttributeProps: CustomAttributeClassProps): Promise; - // WARNING: The type "CustomAttributeClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(customAttributeProps: CustomAttributeClassProps): void; - // WARNING: The type "SchemaItemType.CustomAttributeClass" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.CustomAttributeClass; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) -// @public -class CustomAttributeContainerDiagnostic extends BaseDiagnostic { - // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) - constructor(container: CustomAttributeContainerProps, messageArgs: ARGS); - // (undocumented) - readonly diagnosticType: DiagnosticType; -} - -// @public -enum CustomAttributeContainerType { - // (undocumented) - Any = 4095, - // (undocumented) - AnyClass = 30, - // (undocumented) - AnyProperty = 992, - // (undocumented) - AnyRelationshipConstraint = 3072, - // (undocumented) - CustomAttributeClass = 4, - // (undocumented) - EntityClass = 2, - // (undocumented) - NavigationProperty = 512, - // (undocumented) - PrimitiveArrayProperty = 128, - // (undocumented) - PrimitiveProperty = 32, - // (undocumented) - RelationshipClass = 16, - // (undocumented) - Schema = 1, - // (undocumented) - SourceRelationshipConstraint = 1024, - // (undocumented) - StructArrayProperty = 256, - // (undocumented) - StructClass = 8, - // (undocumented) - StructProperty = 64, - // (undocumented) - TargetRelationshipConstraint = 2048 -} - -// @public (undocumented) -enum DecimalPrecision { - // (undocumented) - Eight = 8, - // (undocumented) - Eleven = 11, - // (undocumented) - Five = 5, - // (undocumented) - Four = 4, - // (undocumented) - Nine = 9, - // (undocumented) - One = 1, - // (undocumented) - Seven = 7, - // (undocumented) - Six = 6, - // (undocumented) - Ten = 10, - // (undocumented) - Three = 3, - // (undocumented) - Twelve = 12, - // (undocumented) - Two = 2, - // (undocumented) - Zero = 0 -} - -// @public -class DelayedPromise implements Promise { - // WARNING: The name "__@toStringTag" contains unsupported characters; API names should use only letters, numbers, and underscores - // (undocumented) - readonly __@toStringTag: "Promise"; - constructor(startCallback: () => Promise); - catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; - start: () => Promise; - then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; -} - -// @public (undocumented) -interface DelayedPromiseWithPropsConstructor { - new (props: TProps, startCallback: () => Promise): Readonly & DelayedPromise; -} - -// @public -enum DiagnosticCategory { - // (undocumented) - Error = 1, - // (undocumented) - Message = 3, - // (undocumented) - Suggestion = 2, - // (undocumented) - Warning = 0 -} - -// @public (undocumented) -export function diagnosticCategoryToString(category: DiagnosticCategory): "Error" | "Warning" | "Message" | "Suggestion"; - -// @public -class DiagnosticReporterBase implements IDiagnosticReporter { - constructor(i18n?: I18N); - protected formatStringFromArgs(text: string, args: ArrayLike, baseIndex?: number): string; - i18N?: I18N; - report(diagnostic: AnyDiagnostic): void; - protected abstract reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string): void; -} - -// @public -enum DiagnosticType { - // (undocumented) - CustomAttributeContainer = 4, - // (undocumented) - None = 0, - // (undocumented) - Property = 3, - // (undocumented) - RelationshipConstraint = 5, - // (undocumented) - Schema = 1, - // (undocumented) - SchemaItem = 2 -} - -// @public (undocumented) -export function diagnosticTypeToString(type: DiagnosticType): "Schema" | "None" | "CustomAttributeContainer" | "Property" | "RelationshipConstraint" | "SchemaItem"; - -// @public -class ECClass extends SchemaItem, implements CustomAttributeContainerProps { - constructor(schema: Schema, name: string, modifier?: ECClassModifier); - // (undocumented) - protected _baseClass?: LazyLoadedECClass; - // (undocumented) - protected _modifier: ECClassModifier; - // (undocumented) - protected _properties?: Property[]; - // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected addCustomAttribute(customAttribute: CustomAttribute): void; - protected addProperty(prop: T): T; - // (undocumented) - baseClass: LazyLoadedECClass | undefined; - // (undocumented) - protected buildPropertyCache(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): Promise; - // (undocumented) - protected buildPropertyCacheSync(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): void; - protected createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise; - protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty; - protected createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise; - protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty; - // (undocumented) - protected createStructArrayProperty(name: string, structType: string | StructClass): Promise; - // (undocumented) - protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty; - // (undocumented) - protected createStructProperty(name: string, structType: string | StructClass): Promise; - // (undocumented) - protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty; - // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly customAttributes: CustomAttributeSet | undefined; - // WARNING: The type "ClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(classProps: ClassProps): Promise; - // WARNING: The type "ClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(classProps: ClassProps): void; - getAllBaseClasses(): AsyncIterableIterator; - // (undocumented) - getAllBaseClassesSync(): Iterable; - // (undocumented) - getBaseClassSync(): ECClass | undefined; - getInheritedProperty(name: string): Promise; - getInheritedPropertySync(name: string): Property | undefined; - getProperties(resetCache?: boolean): Promise; - getPropertiesSync(resetCache?: boolean): Property[]; - getProperty(name: string, includeInherited?: boolean): Promise; - getPropertySync(name: string, includeInherited?: boolean): Property | undefined; - is(targetClass: string, schemaName: string): Promise; - isSync(targetClass: ECClass): boolean; - // (undocumented) - protected loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise; - // (undocumented) - protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration; - // (undocumented) - protected loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise; - // (undocumented) - protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass; - // (undocumented) - protected static mergeProperties(target: Property[], existingValues: Map, propertiesToMerge: Property[], overwriteExisting: boolean): void; - // (undocumented) - readonly modifier: ECClassModifier; - // (undocumented) - readonly properties: Property[] | undefined; - // (undocumented) - toJson: { - [value: string]: any; - } - traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise; - traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean; -} - -// @public (undocumented) -enum ECClassModifier { - // (undocumented) - Abstract = 1, - // (undocumented) - None = 0, - // (undocumented) - Sealed = 2 -} - -// @public -class ECName { - constructor(name: string); - // (undocumented) - readonly name: string; - // (undocumented) - static validate(newName: string): boolean; -} - -// @public (undocumented) -class ECObjectsError extends BentleyError { - constructor(errorNumber: number, message?: string); - // (undocumented) - readonly errorNumber: number; - // (undocumented) - toDebugString(): string; -} - -// @public (undocumented) -enum ECObjectsStatus { - // (undocumented) - ClassNotFound = 35074, - // (undocumented) - DifferentSchemaContexts = 35076, - // (undocumented) - DuplicateItem = 35053, - // (undocumented) - DuplicateProperty = 35054, - // (undocumented) - DuplicateSchema = 35055, - // (undocumented) - ECOBJECTS_ERROR_BASE = 35052, - // (undocumented) - ImmutableSchema = 35056, - // (undocumented) - InvalidContainerType = 35057, - // (undocumented) - InvalidECJson = 35058, - // (undocumented) - InvalidECName = 35059, - // (undocumented) - InvalidECVersion = 35060, - // (undocumented) - InvalidEnumValue = 35061, - // (undocumented) - InvalidModifier = 35062, - // (undocumented) - InvalidMultiplicity = 35063, - // (undocumented) - InvalidPrimitiveType = 35064, - // (undocumented) - InvalidRelationshipEnd = 35068, - // (undocumented) - InvalidSchemaItemType = 35065, - // (undocumented) - InvalidSchemaString = 35073, - // (undocumented) - InvalidSchemaXML = 35072, - // (undocumented) - InvalidStrength = 35066, - // (undocumented) - InvalidStrengthDirection = 35067, - // (undocumented) - InvalidType = 35069, - // (undocumented) - MissingSchemaUrl = 35070, - // (undocumented) - SchemaContextUndefined = 35075, - // (undocumented) - Success = 0, - // (undocumented) - UnableToLocateSchema = 35071 -} - -// @public (undocumented) -class ECStringConstants { - // (undocumented) - static readonly CONTAINERTYPE_ANY: string; - // (undocumented) - static readonly CONTAINERTYPE_ANYCLASS: string; - // (undocumented) - static readonly CONTAINERTYPE_ANYPROPERTY: string; - // (undocumented) - static readonly CONTAINERTYPE_ANYRELATIONSHIPCONSTRAINT: string; - // (undocumented) - static readonly CONTAINERTYPE_CUSTOMATTRIBUTECLASS: string; - // (undocumented) - static readonly CONTAINERTYPE_ENTITYCLASS: string; - // (undocumented) - static readonly CONTAINERTYPE_NAVIGATIONPROPERTY: string; - // (undocumented) - static readonly CONTAINERTYPE_PRIMITIVEARRAYPROPERTY: string; - // (undocumented) - static readonly CONTAINERTYPE_PRIMITIVEPROPERTY: string; - // (undocumented) - static readonly CONTAINERTYPE_RELATIONSHIPCLASS: string; - // (undocumented) - static readonly CONTAINERTYPE_SCHEMA: string; - // (undocumented) - static readonly CONTAINERTYPE_SOURCERELATIONSHIPCONSTRAINT: string; - // (undocumented) - static readonly CONTAINERTYPE_STRUCTARRAYPROPERTY: string; - // (undocumented) - static readonly CONTAINERTYPE_STRUCTCLASS: string; - // (undocumented) - static readonly CONTAINERTYPE_STRUCTPROPERTY: string; - // (undocumented) - static readonly CONTAINERTYPE_TARGETRELATIONSHIPCONSTRAINT: string; - // (undocumented) - static readonly RELATIONSHIP_END_SOURCE: string; - // (undocumented) - static readonly RELATIONSHIP_END_TARGET: string; -} - -// @public (undocumented) -class ECVersion { - constructor(read?: number, write?: number, minor?: number); - compare(rhv: ECVersion): number; - static fromString(versionString: string): ECVersion; - // (undocumented) - readonly minor: number; - // (undocumented) - readonly read: number; - toString(padZeroes?: boolean): string; - // (undocumented) - readonly write: number; -} - -// @public -class EntityClass extends ECClass { - constructor(schema: Schema, name: string, modifier?: ECClassModifier); - // (undocumented) - protected _mixins?: LazyLoadedMixin[]; - // (undocumented) - protected addMixin(mixin: Mixin): void; - // (undocumented) - protected buildPropertyCache(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): Promise; - // (undocumented) - protected buildPropertyCacheSync(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): void; - // (undocumented) - protected createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise; - // (undocumented) - protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty; - // WARNING: The type "EntityClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(entityClassProps: EntityClassProps): Promise; - // WARNING: The type "EntityClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(entityClassProps: EntityClassProps): void; - getInheritedProperty(name: string): Promise; - getInheritedPropertySync(name: string): Property | undefined; - // (undocumented) - getMixinsSync(): Iterable; - // (undocumented) - readonly mixins: LazyLoadedMixin[]; - // WARNING: The type "SchemaItemType.EntityClass" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.EntityClass; - // (undocumented) - toJson(standalone: boolean, includeSchemaVersion: boolean): any | void; -} - -// @public -class Enumeration extends SchemaItem { - // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) - constructor(schema: Schema, name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String); - // (undocumented) - protected _enumerators: AnyEnumerator[]; - // (undocumented) - protected _isStrict: boolean; - // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected _type?: PrimitiveType.Integer | PrimitiveType.String; - protected addEnumerator(enumerator: AnyEnumerator): void; - createEnumerator(name: string, value: string | number, label?: string, description?: string): AnyEnumerator; - // WARNING: The type "EnumerationProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(enumerationProps: EnumerationProps): Promise; - // WARNING: The type "EnumerationProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(enumerationProps: EnumerationProps): void; - // (undocumented) - readonly enumerators: Enumerator[]; - getEnumerator(value: string): Enumerator | undefined; - getEnumeratorByName(name: string): AnyEnumerator | undefined; - // (undocumented) - readonly isInt: boolean; - // (undocumented) - readonly isStrict: boolean; - // (undocumented) - readonly isString: boolean; - // WARNING: The type "SchemaItemType.Enumeration" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.Enumeration; - // (undocumented) - toJson: { - [value: string]: any; - } - // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly type: PrimitiveType.Integer | PrimitiveType.String | undefined; -} - -// @public (undocumented) -class EnumerationArrayProperty extends EnumerationArrayProperty_base { - constructor(ecClass: ECClass, name: string, type: LazyLoadedEnumeration); -} - -// @public (undocumented) -class EnumerationProperty extends PrimitiveOrEnumPropertyBase { - constructor(ecClass: ECClass, name: string, type: LazyLoadedEnumeration); - // (undocumented) - protected _enumeration?: LazyLoadedEnumeration; - // WARNING: The type "EnumerationPropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(enumerationPropertyProps: EnumerationPropertyProps): Promise; - // WARNING: The type "EnumerationPropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(enumerationPropertyProps: EnumerationPropertyProps): void; - // (undocumented) - readonly enumeration: LazyLoadedEnumeration | undefined; - // (undocumented) - toJson(): any; -} - -// @public (undocumented) -interface Enumerator { - // (undocumented) - readonly description?: string; - // (undocumented) - readonly label?: string; - // (undocumented) - readonly name: string; - // (undocumented) - readonly value: T; -} - -// @public -class FileSchemaKey extends SchemaKey { - constructor(key: SchemaKey, fileName: string, schemaJson?: string); - // (undocumented) - fileName: string; - // (undocumented) - schemaText?: string; -} - -// @public (undocumented) -class Format extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _decimalSeparator: string; - // (undocumented) - protected _formatTraits: FormatTraits; - // (undocumented) - protected _includeZero: boolean; - // (undocumented) - protected _minWidth?: number; - // (undocumented) - protected _precision: number; - // (undocumented) - protected _roundFactor: number; - // (undocumented) - protected _scientificType?: ScientificType; - // (undocumented) - protected _showSignOption: ShowSignOption; - // (undocumented) - protected _spacer: string; - // (undocumented) - protected _stationOffsetSize?: number; - // (undocumented) - protected _stationSeparator: string; - // (undocumented) - protected _thousandSeparator: string; - // (undocumented) - protected _type: FormatType; - // (undocumented) - protected _units?: Array<[Unit | InvertedUnit, string | undefined]>; - // (undocumented) - protected _uomSeparator: string; - protected addUnit(unit: Unit | InvertedUnit, label?: string): void; - // (undocumented) - readonly decimalSeparator: string; - // WARNING: The type "FormatProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(formatProps: FormatProps): Promise; - // WARNING: The type "FormatProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(formatProps: FormatProps): void; - // (undocumented) - readonly formatTraits: FormatTraits; - // (undocumented) - hasFormatTrait(formatTrait: FormatTraits): boolean; - // (undocumented) - readonly includeZero: boolean | undefined; - // (undocumented) - readonly minWidth: number | undefined; - // (undocumented) - readonly precision: DecimalPrecision | FractionalPrecision; - // (undocumented) - readonly roundFactor: number; - // WARNING: The type "SchemaItemType.Format" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.Format; - // (undocumented) - readonly scientificType: ScientificType | undefined; - // (undocumented) - protected setPrecision(precision: number): void; - // (undocumented) - readonly showSignOption: ShowSignOption; - // (undocumented) - readonly spacer: string | undefined; - // (undocumented) - readonly stationOffsetSize: number | undefined; - // (undocumented) - readonly stationSeparator: string; - // (undocumented) - readonly thousandSeparator: string; - // (undocumented) - toJson: { - [value: string]: any; - } - // (undocumented) - readonly type: FormatType; - // (undocumented) - readonly units: Array<[Unit | InvertedUnit, string | undefined]> | undefined; - // (undocumented) - readonly uomSeparator: string; -} - -// @public (undocumented) -enum FormatTraits { - // (undocumented) - ApplyRounding = 16, - // (undocumented) - ExponentOnlyNegative = 512, - // (undocumented) - FractionDash = 32, - // (undocumented) - KeepDecimalPoint = 8, - // (undocumented) - KeepSingleZero = 2, - // (undocumented) - PrependUnitLabel = 128, - // (undocumented) - ShowUnitLabel = 64, - // (undocumented) - TrailZeroes = 1, - // (undocumented) - Use1000Separator = 256, - // (undocumented) - ZeroEmpty = 4 -} - -// @public (undocumented) -export function formatTraitsToArray(currentFormatTrait: FormatTraits): string[]; - -// @public (undocumented) -enum FormatType { - // (undocumented) - Decimal = 0, - // (undocumented) - Fractional = 1, - // (undocumented) - Scientific = 2, - // (undocumented) - Station = 3 -} - -// @public (undocumented) -export function formatTypeToString(type: FormatType): string; - -// @public (undocumented) -enum FractionalPrecision { - // (undocumented) - Eight = 8, - // (undocumented) - Four = 4, - // (undocumented) - One = 1, - // (undocumented) - OneHundredTwentyEight = 128, - // (undocumented) - Sixteen = 16, - // (undocumented) - SixtyFour = 64, - // (undocumented) - ThirtyTwo = 32, - // (undocumented) - Two = 2, - // (undocumented) - TwoHundredFiftySix = 256 -} - -// @public (undocumented) -export function getItemNamesFromFormatString(formatString: string): Iterable; - -// @public -interface IDiagnostic { - category: DiagnosticCategory; - code: string; - diagnosticType: DiagnosticType; - ecDefinition: TYPE; - messageArgs: ARGS; - messageText: string; -} - -// @public -interface IDiagnosticReporter { - i18N?: I18N; - report(diagnostic: AnyDiagnostic): void; -} - -// @public -class InvertedUnit extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _invertsUnit?: LazyLoadedUnit; - // (undocumented) - protected _unitSystem?: LazyLoadedUnitSystem; - // WARNING: The type "InvertedUnitProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(invertedUnitProps: InvertedUnitProps): Promise; - // WARNING: The type "InvertedUnitProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(invertedUnitProps: InvertedUnitProps): void; - // (undocumented) - readonly invertsUnit: LazyLoadedUnit | undefined; - // WARNING: The type "SchemaItemType.InvertedUnit" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.InvertedUnit; - // (undocumented) - toJson: { - [value: string]: any; - } - // (undocumented) - readonly unitSystem: LazyLoadedUnitSystem | undefined; -} - -// @public -interface IRuleSet { - classRules?: Array>; - constantRules?: Array>; - customAttributeClassRules?: Array>; - customAttributeContainerRules?: Array>; - customAttributeInstanceRules?: Array>; - entityClassRules?: Array>; - enumerationRules?: Array>; - formatRules?: Array>; - invertedUnitRules?: Array>; - kindOfQuantityRules?: Array>; - mixinRules?: Array>; - name: string; - phenomenonRules?: Array>; - propertyCategoryRules?: Array>; - propertyRules?: Array>; - relationshipConstraintRules?: Array>; - relationshipRules?: Array>; - schemaItemRules?: Array>; - schemaRules?: Array>; - structClassRules?: Array>; - unitRules?: Array>; - unitSystemRules?: Array>; -} - -// @public (undocumented) -interface ISchemaItemLocater { - // (undocumented) - getSchemaItem(schemaItemKey: SchemaItemKey): Promise; -} - -// @public -interface ISchemaLocater { - getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context?: SchemaContext): Promise; - getSchemaSync(schemaKey: SchemaKey, matchType: SchemaMatchType, context?: SchemaContext): T | undefined; -} - -// @public -interface ISchemaPartVisitor { - visitClass?: (ecClass: AnyClass) => Promise; - visitClassSync?: (ecClass: AnyClass) => void; - visitConstant?: (constant: Constant) => Promise; - visitConstantSync?: (constant: Constant) => void; - visitCustomAttributeClass?: (customAttributeClass: CustomAttributeClass) => Promise; - visitCustomAttributeClassSync?: (customAttributeClass: CustomAttributeClass) => void; - visitCustomAttributeContainer?: (customAttributeContainer: CustomAttributeContainerProps) => Promise; - visitCustomAttributeContainerSync?: (customAttributeContainer: CustomAttributeContainerProps) => void; - visitEmptySchema?: (schema: Schema) => Promise; - visitEmptySchemaSync?: (schema: Schema) => void; - visitEntityClass?: (entityClass: EntityClass) => Promise; - visitEntityClassSync?: (entityClass: EntityClass) => void; - visitEnumeration?: (enumeration: Enumeration) => Promise; - visitEnumerationSync?: (enumeration: Enumeration) => void; - visitFormat?: (format: Format) => Promise; - visitFormatSync?: (format: Format) => void; - visitFullSchema?: (schema: Schema) => Promise; - visitFullSchemaSync?: (schema: Schema) => void; - visitInvertedUnit?: (invertedUnit: InvertedUnit) => Promise; - visitInvertedUnitSync?: (invertedUnit: InvertedUnit) => void; - visitKindOfQuantity?: (koq: KindOfQuantity) => Promise; - visitKindOfQuantitySync?: (koq: KindOfQuantity) => void; - visitMixin?: (mixin: Mixin) => Promise; - visitMixinSync?: (mixin: Mixin) => void; - visitPhenomenon?: (phenomena: Phenomenon) => Promise; - visitPhenomenonSync?: (phenomena: Phenomenon) => void; - visitProperty?: (property: AnyProperty) => Promise; - visitPropertyCategory?: (category: PropertyCategory) => Promise; - visitPropertyCategorySync?: (category: PropertyCategory) => void; - visitPropertySync?: (property: AnyProperty) => void; - visitRelationshipClass?: (relationshipClass: RelationshipClass) => Promise; - visitRelationshipClassSync?: (relationshipClass: RelationshipClass) => void; - visitRelationshipConstraint?: (relationshipConstraint: RelationshipConstraint) => Promise; - visitRelationshipConstraintSync?: (relationshipConstraint: RelationshipConstraint) => void; - visitSchemaItem?: (schemaItem: SchemaItem) => Promise; - visitSchemaItemSync?: (schemaItem: SchemaItem) => void; - visitStructClass?: (structClass: StructClass) => Promise; - visitStructClassSync?: (structClass: StructClass) => void; - visitUnit?: (unit: Unit) => Promise; - visitUnitSync?: (unit: Unit) => void; - visitUnitSystem?: (unitSystem: UnitSystem) => Promise; - visitUnitSystemSync?: (unitSystem: UnitSystem) => void; -} - -// @public -class KindOfQuantity extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _persistenceUnit?: LazyLoadedUnit | LazyLoadedInvertedUnit; - // (undocumented) - protected _presentationUnits: Array; - // (undocumented) - protected _relativeError: number; - // (undocumented) - protected addPresentationFormat(format: Format | OverrideFormat, isDefault?: boolean): void; - // (undocumented) - protected createFormatOverride(parent: Format, name: string, precision?: number, unitLabelOverrides?: Array<[Unit | InvertedUnit, string | undefined]>): OverrideFormat; - // (undocumented) - readonly defaultPresentationFormat: undefined | Format | OverrideFormat; - // WARNING: The type "KindOfQuantityProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(kindOfQuantityProps: KindOfQuantityProps): Promise; - // WARNING: The type "KindOfQuantityProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(kindOfQuantityProps: KindOfQuantityProps): void; - // (undocumented) - persistenceUnit: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined; - // (undocumented) - readonly presentationUnits: Array | undefined; - // (undocumented) - readonly relativeError: number; - // WARNING: The type "SchemaItemType.KindOfQuantity" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.KindOfQuantity; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public -class LoggingDiagnosticReporter extends DiagnosticReporterBase { - // (undocumented) - reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string): void; -} - -// @public -class Mixin extends ECClass { - constructor(schema: Schema, name: string); - // (undocumented) - protected _appliesTo?: LazyLoadedEntityClass; - // (undocumented) - applicableTo(entityClass: EntityClass): Promise; - // (undocumented) - readonly appliesTo: LazyLoadedEntityClass | undefined; - // (undocumented) - protected createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise; - // (undocumented) - protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty; - // WARNING: The type "MixinProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(mixinProps: MixinProps): Promise; - // WARNING: The type "MixinProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(mixinProps: MixinProps): void; - // WARNING: The type "SchemaItemType.Mixin" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.Mixin; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public (undocumented) -class NavigationProperty extends Property { - constructor(ecClass: ECClass, name: string, relationship: LazyLoadedRelationshipClass, direction?: StrengthDirection); - // (undocumented) - protected _direction: StrengthDirection; - // (undocumented) - protected _relationshipClass: LazyLoadedRelationshipClass; - // (undocumented) - readonly direction: StrengthDirection; - // (undocumented) - getRelationshipClassSync(): RelationshipClass | undefined; - // (undocumented) - readonly relationshipClass: LazyLoadedRelationshipClass; - // (undocumented) - toJson(): any; -} - -// @public (undocumented) -interface NoDelayedPromiseMethods { - // (undocumented) - [propName: string]: any; - // (undocumented) - catch?: never; - // (undocumented) - start?: never; - // (undocumented) - then?: never; -} - -// @public -class OverrideFormat { - constructor(parent: Format, name: string, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>); - // (undocumented) - readonly decimalSeparator: string; - // (undocumented) - readonly formatTraits: FormatTraits; - // (undocumented) - readonly fullName: string; - // (undocumented) - hasFormatTrait(formatTrait: FormatTraits): boolean; - // (undocumented) - readonly includeZero: boolean | undefined; - // (undocumented) - readonly minWidth: number | undefined; - readonly name: string; - readonly parent: Format; - // (undocumented) - readonly precision: DecimalPrecision | FractionalPrecision; - // (undocumented) - readonly roundFactor: number; - // (undocumented) - readonly scientificType: ScientificType | undefined; - // (undocumented) - readonly showSignOption: ShowSignOption; - // (undocumented) - readonly spacer: string | undefined; - // (undocumented) - readonly stationOffsetSize: number | undefined; - // (undocumented) - readonly stationSeparator: string; - // (undocumented) - readonly thousandSeparator: string; - // (undocumented) - readonly type: FormatType; - // (undocumented) - readonly units: [Unit | InvertedUnit, string | undefined][] | undefined; - // (undocumented) - readonly uomSeparator: string; -} - -// @public -export function parseClassModifier(modifier: string): ECClassModifier | undefined; - -// @public -export function parseCustomAttributeContainerType(type: string): CustomAttributeContainerType | undefined; - -// @public (undocumented) -export function parseDecimalPrecision(jsonObjPrecision: number): DecimalPrecision | undefined; - -// @public (undocumented) -export function parseFormatTrait(formatTraitsString: string): FormatTraits | undefined; - -// @public (undocumented) -export function parseFormatType(jsonObjType: string): FormatType | undefined; - -// @public (undocumented) -export function parseFractionalPrecision(jsonObjPrecision: number): FractionalPrecision | undefined; - -// @public (undocumented) -export function parsePrecision(precision: number, type: FormatType): DecimalPrecision | FractionalPrecision | undefined; - -// @public -export function parsePrimitiveType(type: string): PrimitiveType | undefined; - -// @public (undocumented) -export function parseRelationshipEnd(end: string): RelationshipEnd | undefined; - -// @public -export function parseSchemaItemType(type: string): SchemaItemType | undefined; - -// @public (undocumented) -export function parseScientificType(scientificType: string): ScientificType | undefined; - -// @public (undocumented) -export function parseShowSignOption(showSignOption: string): ShowSignOption | undefined; - -// @public -export function parseStrength(strength: string): StrengthType | undefined; - -// @public (undocumented) -export function parseStrengthDirection(direction: string): StrengthDirection | undefined; - -// @public (undocumented) -class Phenomenon extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _definition: string; - // (undocumented) - readonly definition: string; - // WARNING: The type "PhenomenonProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(phenomenonProps: PhenomenonProps): Promise; - // WARNING: The type "PhenomenonProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(phenomenonProps: PhenomenonProps): void; - // WARNING: The type "SchemaItemType.Phenomenon" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.Phenomenon; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public (undocumented) -class PrimitiveArrayProperty extends PrimitiveArrayProperty_base { - constructor(ecClass: ECClass, name: string, primitiveType?: PrimitiveType); -} - -// @public (undocumented) -class PrimitiveOrEnumPropertyBase extends Property { - constructor(ecClass: ECClass, name: string, type: PropertyType); - // (undocumented) - protected _extendedTypeName?: string; - // (undocumented) - protected _maxLength?: number; - // (undocumented) - protected _maxValue?: number; - // (undocumented) - protected _minLength?: number; - // (undocumented) - protected _minValue?: number; - // WARNING: The type "PrimitiveOrEnumPropertyBaseProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(propertyBaseProps: PrimitiveOrEnumPropertyBaseProps): Promise; - // WARNING: The type "PrimitiveOrEnumPropertyBaseProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(propertyBaseProps: PrimitiveOrEnumPropertyBaseProps): void; - // (undocumented) - readonly extendedTypeName: string | undefined; - // (undocumented) - readonly maxLength: number | undefined; - // (undocumented) - readonly maxValue: number | undefined; - // (undocumented) - readonly minLength: number | undefined; - // (undocumented) - readonly minValue: number | undefined; - // (undocumented) - toJson(): any; -} - -// @public (undocumented) -class PrimitiveProperty extends PrimitiveOrEnumPropertyBase { - constructor(ecClass: ECClass, name: string, primitiveType?: PrimitiveType); - // WARNING: The type "PrimitivePropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(primitivePropertyProps: PrimitivePropertyProps): Promise; - // WARNING: The type "PrimitivePropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(primitivePropertyProps: PrimitivePropertyProps): void; - // (undocumented) - readonly primitiveType: PrimitiveType; - // (undocumented) - toJson(): any; -} - -// @public -enum PrimitiveType { - // (undocumented) - Binary = 257, - // (undocumented) - Boolean = 513, - // (undocumented) - DateTime = 769, - // (undocumented) - Double = 1025, - // (undocumented) - IGeometry = 2561, - // (undocumented) - Integer = 1281, - // (undocumented) - Long = 1537, - // (undocumented) - Point2d = 1793, - // (undocumented) - Point3d = 2049, - // (undocumented) - String = 2305, - // (undocumented) - Uninitialized = 0 -} - -// @public (undocumented) -export function primitiveTypeToString(type: PrimitiveType): string; - -// @public -class Property implements CustomAttributeContainerProps { - constructor(ecClass: ECClass, name: string, type: PropertyType); - // (undocumented) - protected _category?: LazyLoadedPropertyCategory; - // (undocumented) - protected _class: AnyClass; - // (undocumented) - protected _description?: string; - // (undocumented) - protected _isReadOnly?: boolean; - // (undocumented) - protected _kindOfQuantity?: LazyLoadedKindOfQuantity; - // (undocumented) - protected _label?: string; - // (undocumented) - protected _name: ECName; - // (undocumented) - protected _priority?: number; - // (undocumented) - protected _type: PropertyType; - // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected addCustomAttribute(customAttribute: CustomAttribute): void; - // (undocumented) - readonly category: LazyLoadedPropertyCategory | undefined; - // (undocumented) - readonly class: AnyClass; - // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly customAttributes: CustomAttributeSet | undefined; - // (undocumented) - readonly description: string | undefined; - // WARNING: The type "PropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(propertyProps: PropertyProps): Promise; - // WARNING: The type "PropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(propertyProps: PropertyProps): void; - readonly fullName: string; - // (undocumented) - getCategorySync(): PropertyCategory | undefined; - // (undocumented) - getKindOfQuantitySync(): KindOfQuantity | undefined; - // (undocumented) - isArray(): this is AnyArrayProperty; - // (undocumented) - isEnumeration(): this is AnyEnumerationProperty; - // (undocumented) - isNavigation(): this is NavigationProperty; - // (undocumented) - isPrimitive(): this is AnyPrimitiveProperty; - // (undocumented) - readonly isReadOnly: boolean; - // (undocumented) - isStruct(): this is AnyStructProperty; - // (undocumented) - readonly kindOfQuantity: LazyLoadedKindOfQuantity | undefined; - // (undocumented) - readonly label: string | undefined; - // (undocumented) - readonly name: string; - // (undocumented) - readonly priority: number; - readonly schema: Schema; - // (undocumented) - toJson(): any; -} - -// @public (undocumented) -class PropertyCategory extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _priority: number; - // WARNING: The type "PropertyCategoryProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(propertyCategoryProps: PropertyCategoryProps): Promise; - // WARNING: The type "PropertyCategoryProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(propertyCategoryProps: PropertyCategoryProps): void; - // (undocumented) - readonly priority: number; - // WARNING: The type "SchemaItemType.PropertyCategory" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.PropertyCategory; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public -class PropertyDiagnostic extends BaseDiagnostic { - constructor(property: AnyProperty, messageArgs: ARGS); - // (undocumented) - readonly diagnosticType: DiagnosticType; -} - -// @public (undocumented) -enum PropertyType { - // (undocumented) - Binary = 257, - // (undocumented) - Binary_Array = 261, - // (undocumented) - Boolean = 513, - // (undocumented) - Boolean_Array = 517, - // (undocumented) - DateTime = 769, - // (undocumented) - DateTime_Array = 773, - // (undocumented) - Double = 1025, - // (undocumented) - Double_Array = 1029, - // (undocumented) - IGeometry = 2561, - // (undocumented) - IGeometry_Array = 2565, - // (undocumented) - Integer = 1281, - // (undocumented) - Integer_Array = 1285, - // (undocumented) - Integer_Enumeration = 1297, - // (undocumented) - Integer_Enumeration_Array = 1301, - // (undocumented) - Long = 1537, - // (undocumented) - Long_Array = 1541, - // (undocumented) - Navigation = 8, - // (undocumented) - Point2d = 1793, - // (undocumented) - Point2d_Array = 1797, - // (undocumented) - Point3d = 2049, - // (undocumented) - Point3d_Array = 2053, - // (undocumented) - String = 2305, - // (undocumented) - String_Array = 2309, - // (undocumented) - String_Enumeration = 2321, - // (undocumented) - String_Enumeration_Array = 2325, - // (undocumented) - Struct = 2, - // (undocumented) - Struct_Array = 6 -} - -// @public (undocumented) -export function propertyTypeToString(type: PropertyType): "PrimitiveProperty" | "StructProperty" | "StructArrayProperty" | "NavigationProperty" | "PrimitiveArrayProperty"; - -// @public (undocumented) -module PropertyTypeUtils { - // (undocumented) - function asArray(t: PropertyType): PropertyType; - - // (undocumented) - function fromPrimitiveType(t: PrimitiveType): PropertyType; - - // (undocumented) - function getPrimitiveType(t: PropertyType): PrimitiveType; - - // (undocumented) - function isArray(t: PropertyType): boolean; - - // (undocumented) - function isEnumeration(t: PropertyType): boolean; - - // (undocumented) - function isNavigation(t: PropertyType): boolean; - - // (undocumented) - function isPrimitive(t: PropertyType): boolean; - - // (undocumented) - function isStruct(t: PropertyType): boolean; - -} - -// @public -class RelationshipClass extends ECClass { - constructor(schema: Schema, name: string, modifier?: ECClassModifier); - // (undocumented) - protected _source: RelationshipConstraint; - // (undocumented) - protected _strength: StrengthType; - // (undocumented) - protected _strengthDirection: StrengthDirection; - // (undocumented) - protected _target: RelationshipConstraint; - // (undocumented) - protected createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise; - // (undocumented) - protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty; - // WARNING: The type "RelationshipClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(relationshipClassProps: RelationshipClassProps): Promise; - // WARNING: The type "RelationshipClassProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(relationshipClassProps: RelationshipClassProps): void; - // (undocumented) - readonly schema: Schema; - // WARNING: The type "SchemaItemType.RelationshipClass" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.RelationshipClass; - // (undocumented) - readonly source: RelationshipConstraint; - // (undocumented) - readonly strength: StrengthType; - // (undocumented) - readonly strengthDirection: StrengthDirection; - // (undocumented) - readonly target: RelationshipConstraint; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public -class RelationshipConstraint implements CustomAttributeContainerProps { - constructor(relClass: RelationshipClass, relEnd: RelationshipEnd, roleLabel?: string, polymorphic?: boolean); - // (undocumented) - protected _abstractConstraint?: LazyLoadedRelationshipConstraintClass; - // (undocumented) - protected _constraintClasses?: LazyLoadedRelationshipConstraintClass[]; - // (undocumented) - protected _multiplicity?: RelationshipMultiplicity; - // (undocumented) - protected _polymorphic?: boolean; - // (undocumented) - protected _relationshipClass: RelationshipClass; - // (undocumented) - protected _relationshipEnd: RelationshipEnd; - // (undocumented) - protected _roleLabel?: string; - // (undocumented) - abstractConstraint: LazyLoadedRelationshipConstraintClass | undefined; - addClass(constraint: EntityClass | Mixin | RelationshipClass): void; - // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected addCustomAttribute(customAttribute: CustomAttribute): void; - static classCompatibleWithConstraint(constraintClass: ECClass, testClass: ECClass, isPolymorphic: boolean): Promise; - // (undocumented) - readonly constraintClasses: LazyLoadedRelationshipConstraintClass[] | undefined; - // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly customAttributes: CustomAttributeSet | undefined; - // WARNING: The type "RelationshipConstraintProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(relationshipConstraintProps: RelationshipConstraintProps): Promise; - // WARNING: The type "RelationshipConstraintProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(relationshipConstraintProps: RelationshipConstraintProps): void; - readonly fullName: "Source" | "Target"; - readonly isSource: boolean; - // (undocumented) - readonly multiplicity: RelationshipMultiplicity | undefined; - // (undocumented) - readonly polymorphic: boolean | undefined; - // (undocumented) - readonly relationshipClass: RelationshipClass; - // (undocumented) - readonly relationshipEnd: RelationshipEnd; - // (undocumented) - readonly roleLabel: string | undefined; - readonly schema: Schema; - supportsClass(ecClass: ECClass): Promise; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public -class RelationshipConstraintDiagnostic extends BaseDiagnostic { - constructor(constraint: RelationshipConstraint, messageArgs: ARGS); - // (undocumented) - readonly diagnosticType: DiagnosticType; -} - -// @public -enum RelationshipEnd { - // (undocumented) - Source = 0, - // (undocumented) - Target = 1 -} - -// @public (undocumented) -export function relationshipEndToString(end: RelationshipEnd): string; - -// @public (undocumented) -class RelationshipMultiplicity { - constructor(lowerLimit: number, upperLimit: number); - // (undocumented) - equals(rhs: RelationshipMultiplicity): boolean; - // (undocumented) - static fromString(str: string): RelationshipMultiplicity | undefined; - // (undocumented) - readonly lowerLimit: number; - // (undocumented) - static readonly oneMany: RelationshipMultiplicity; - // (undocumented) - static readonly oneOne: RelationshipMultiplicity; - // (undocumented) - toString(): string; - // (undocumented) - readonly upperLimit: number; - // (undocumented) - static readonly zeroMany: RelationshipMultiplicity; - // (undocumented) - static readonly zeroOne: RelationshipMultiplicity; -} - -// @public (undocumented) -class Schema implements CustomAttributeContainerProps { - constructor(context: SchemaContext, name: string, readVersion: number, writeVersion: number, minorVersion: number); - // (undocumented) - protected _alias?: string; - // (undocumented) - protected _description?: string; - // (undocumented) - protected _label?: string; - // (undocumented) - protected _schemaKey?: SchemaKey; - // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected addCustomAttribute(customAttribute: CustomAttribute): void; - // (undocumented) - protected addItem(item: T): void; - // (undocumented) - protected addReference(refSchema: Schema): Promise; - // (undocumented) - protected addReferenceSync(refSchema: Schema): void; - // (undocumented) - readonly alias: string | undefined; - readonly context: SchemaContext; - protected createConstant(name: string): Promise; - // (undocumented) - protected createConstantSync(name: string): Constant; - protected createCustomAttributeClass(name: string, modifier?: ECClassModifier): Promise; - // (undocumented) - protected createCustomAttributeClassSync(name: string, modifier?: ECClassModifier): CustomAttributeClass; - protected createEntityClass(name: string, modifier?: ECClassModifier): Promise; - // (undocumented) - protected createEntityClassSync(name: string, modifier?: ECClassModifier): EntityClass; - // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) - protected createEnumeration(name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String): Promise; - // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected createEnumerationSync(name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String): Enumeration; - protected createFormat(name: string): Promise; - // (undocumented) - protected createFormatSync(name: string): Format; - protected createInvertedUnit(name: string): Promise; - // (undocumented) - protected createInvertedUnitSync(name: string): InvertedUnit; - protected createKindOfQuantity(name: string): Promise; - // (undocumented) - protected createKindOfQuantitySync(name: string): KindOfQuantity; - protected createMixinClass(name: string): Promise; - // (undocumented) - protected createMixinClassSync(name: string): Mixin; - protected createPhenomenon(name: string): Promise; - // (undocumented) - protected createPhenomenonSync(name: string): Phenomenon; - protected createPropertyCategory(name: string): Promise; - // (undocumented) - protected createPropertyCategorySync(name: string): PropertyCategory; - protected createRelationshipClass(name: string, modifier?: ECClassModifier): Promise; - // (undocumented) - protected createRelationshipClassSync(name: string, modifier?: ECClassModifier): RelationshipClass; - protected createStructClass(name: string, modifier?: ECClassModifier): Promise; - // (undocumented) - protected createStructClassSync(name: string, modifier?: ECClassModifier): StructClass; - protected createUnit(name: string): Promise; - // (undocumented) - protected createUnitSync(name: string): Unit; - protected createUnitSystem(name: string): Promise; - // (undocumented) - protected createUnitSystemSync(name: string): UnitSystem; - // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly customAttributes: CustomAttributeSet | undefined; - // (undocumented) - readonly description: string | undefined; - // WARNING: The type "SchemaProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(schemaProps: SchemaProps): Promise; - // WARNING: The type "SchemaProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(schemaProps: SchemaProps): void; - // (undocumented) - static fromJson(jsonObj: object | string, context: SchemaContext): Promise; - // (undocumented) - static fromJsonSync(jsonObj: object | string, context: SchemaContext): Schema; - readonly fullName: string; - // (undocumented) - getClasses(): ECClass[]; - getItem(name: string): Promise; - // (undocumented) - getItems(): T[]; - getItemSync(name: string): T | undefined; - // (undocumented) - getReference(refSchemaName: string): Promise; - // (undocumented) - getReferenceSync(refSchemaName: string): T | undefined; - getSchemaItemKey(fullName: string): SchemaItemKey; - // (undocumented) - readonly label: string | undefined; - lookupItem(key: Readonly | string): Promise; - lookupItemSync(key: Readonly | string): T | undefined; - // (undocumented) - readonly minorVersion: number; - // (undocumented) - readonly name: string; - // (undocumented) - readonly readVersion: number; - // (undocumented) - readonly references: Schema[]; - readonly schema: Schema; - // (undocumented) - readonly schemaKey: SchemaKey; - // (undocumented) - toJson: { - [value: string]: any; - } - // (undocumented) - readonly writeVersion: number; -} - -// @public (undocumented) -class SchemaCache implements ISchemaLocater { - constructor(); - addSchema(schema: T): Promise; - addSchemaSync(schema: T): void; - // (undocumented) - readonly count: number; - getSchema(schemaKey: SchemaKey, matchType?: SchemaMatchType): Promise; - // (undocumented) - getSchemaSync(schemaKey: SchemaKey, matchType?: SchemaMatchType): T | undefined; -} - -// @public -class SchemaContext implements ISchemaLocater, ISchemaItemLocater { - constructor(); - // (undocumented) - addLocater(locater: ISchemaLocater): void; - addSchema(schema: Schema): Promise; - addSchemaItem(schemaItem: SchemaItem): Promise; - addSchemaSync(schema: Schema): void; - // (undocumented) - getSchema(schemaKey: SchemaKey, matchType?: SchemaMatchType): Promise; - // (undocumented) - getSchemaItem(schemaItemKey: SchemaItemKey): Promise; - // (undocumented) - getSchemaItemSync(schemaItemKey: SchemaItemKey): T | undefined; - // (undocumented) - getSchemaSync(schemaKey: SchemaKey, matchType?: SchemaMatchType): T | undefined; -} - -// @public -class SchemaDiagnostic extends BaseDiagnostic { - constructor(schema: Schema, messageArgs: ARGS); - // (undocumented) - static diagnosticType: DiagnosticType; -} - -// @public -class SchemaFileLocater { - constructor(); - addSchemaSearchPath(schemaPath: string): void; - addSchemaSearchPaths(schemaPaths: string[]): void; - compareSchemaKeyByVersion(lhs: FileSchemaKey, rhs: FileSchemaKey): number; - // (undocumented) - fileExists(filePath: string): Promise; - protected findEligibleSchemaKeys(desiredKey: SchemaKey, matchType: SchemaMatchType, format: string): FileSchemaKey[]; - // (undocumented) - abstract getSchema(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise; - // (undocumented) - protected abstract getSchemaKey(data: string): SchemaKey; - // (undocumented) - readUtf8FileToString(filePath: string): Promise; - // (undocumented) - searchPaths: string[]; -} - -// @public -class SchemaGraphUtil { - static buildDependencyOrderedSchemaList(insertSchema: Schema, schemas?: Schema[]): Schema[]; -} - -// @public -class SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _description?: string; - // (undocumented) - protected _key: SchemaItemKey; - // (undocumented) - protected _label?: string; - // (undocumented) - readonly description: string | undefined; - // WARNING: The type "SchemaItemProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(schemaItemProps: SchemaItemProps): Promise; - // WARNING: The type "SchemaItemProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(schemaItemProps: SchemaItemProps): void; - static equalByKey(thisSchemaItem: SchemaItem, thatSchemaItemOrKey?: SchemaItem | SchemaItemKey): boolean; - // (undocumented) - readonly fullName: string; - // (undocumented) - readonly key: SchemaItemKey; - // (undocumented) - readonly label: string | undefined; - // (undocumented) - readonly name: string; - static parseFullName(fullName: string): [string, string]; - // (undocumented) - readonly schema: Schema; - // (undocumented) - readonly schemaItemType: SchemaItemType; - // (undocumented) - toJson: { - [value: string]: any; - } -} - -// @public -class SchemaItemDiagnostic extends BaseDiagnostic { - constructor(ecDefinition: TYPE, messageArgs: ARGS); - // (undocumented) - static diagnosticType: DiagnosticType; -} - -// @public -class SchemaItemKey { - constructor(name: string, schema: SchemaKey); - // (undocumented) - protected _schemaKey: SchemaKey; - // (undocumented) - readonly fullName: string; - matches(rhs: SchemaItemKey): boolean; - // (undocumented) - matchesFullName(rhs: string): boolean; - // (undocumented) - readonly name: string; - // (undocumented) - readonly schemaKey: SchemaKey; - // (undocumented) - readonly schemaName: string; -} - -// @public (undocumented) -enum SchemaItemType { - // (undocumented) - Constant = 10, - // (undocumented) - CustomAttributeClass = 3, - // (undocumented) - EntityClass = 0, - // (undocumented) - Enumeration = 5, - // (undocumented) - Format = 13, - // (undocumented) - InvertedUnit = 9, - // (undocumented) - KindOfQuantity = 6, - // (undocumented) - Mixin = 1, - // (undocumented) - Phenomenon = 11, - // (undocumented) - PropertyCategory = 7, - // (undocumented) - RelationshipClass = 4, - // (undocumented) - StructClass = 2, - // (undocumented) - Unit = 8, - // (undocumented) - UnitSystem = 12 -} - -// @public -export function schemaItemTypeToString(value: SchemaItemType): string; - -// @public -class SchemaJsonFileLocater extends SchemaFileLocater, implements ISchemaLocater { - getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise; - protected getSchemaKey(data: string): SchemaKey; - getSchemaSync(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): T | undefined; -} - -// @public -class SchemaKey { - constructor(name: string, version: ECVersion); - // (undocumented) - protected _version: ECVersion; - // (undocumented) - compareByName(rhs: SchemaKey | string | undefined): boolean; - compareByVersion(rhs: SchemaKey): number; - // (undocumented) - matches(rhs: SchemaKey, matchType?: SchemaMatchType): boolean; - // (undocumented) - readonly minorVersion: number; - // (undocumented) - readonly name: string; - // (undocumented) - static parseString(fullName: string): SchemaKey; - // (undocumented) - readonly readVersion: number; - toString(padZeroes?: boolean): string; - // (undocumented) - readonly version: ECVersion; - // (undocumented) - readonly writeVersion: number; -} - -// @public (undocumented) -class SchemaMap extends Array { -} - -// @public -enum SchemaMatchType { - // (undocumented) - Exact = 1, - // (undocumented) - Identical = 0, - // (undocumented) - Latest = 3, - // (undocumented) - LatestReadCompatible = 4, - // (undocumented) - LatestWriteCompatible = 2 -} - -// @public -class SchemaPartVisitorDelegate { - constructor(visitor: ISchemaPartVisitor); - visitSchema(schema: Schema, fullSchema?: boolean): Promise; - visitSchemaPart(schemaPart: AnyECType): Promise; - visitSchemaPartSync(schemaPart: AnyECType): void; - visitSchemaSync(schema: Schema, fullSchema?: boolean): void; -} - -// @public -class SchemaValidationVisitor implements ISchemaPartVisitor { - // (undocumented) - applyClassRules(ecClass: AnyClass, ruleSet: IRuleSet): Promise; - // (undocumented) - applyConstantRules(constant: Constant, ruleSet: IRuleSet): Promise; - // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - applyCustomAttributeContainerRules(container: CustomAttributeContainerProps, ruleSet: IRuleSet): Promise; - // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - applyCustomAttributeInstanceRules(container: CustomAttributeContainerProps, customAttribute: CustomAttribute, ruleSet: IRuleSet): Promise; - // (undocumented) - applyCustomAttributeRules(customAttribute: CustomAttributeClass, ruleSet: IRuleSet): Promise; - // (undocumented) - applyEntityRules(entityClass: EntityClass, ruleSet: IRuleSet): Promise; - // (undocumented) - applyEnumerationRules(enumeration: Enumeration, ruleSet: IRuleSet): Promise; - // (undocumented) - applyFormatRules(format: Format, ruleSet: IRuleSet): Promise; - // (undocumented) - applyInvertedUnitRules(invertedUnit: InvertedUnit, ruleSet: IRuleSet): Promise; - // (undocumented) - applyKindOfQuantityRules(kindOfQuantity: KindOfQuantity, ruleSet: IRuleSet): Promise; - // (undocumented) - applyMixinRules(mixin: Mixin, ruleSet: IRuleSet): Promise; - // (undocumented) - applyPhenomenonRules(phenomenon: Phenomenon, ruleSet: IRuleSet): Promise; - // (undocumented) - applyPropertyCategoryRules(propertyCategory: PropertyCategory, ruleSet: IRuleSet): Promise; - // (undocumented) - applyPropertyRules(property: AnyProperty, ruleSet: IRuleSet): Promise; - // (undocumented) - applyRelationshipConstraintRules(constraint: RelationshipConstraint, ruleSet: IRuleSet): Promise; - // (undocumented) - applyRelationshipRules(relationship: RelationshipClass, ruleSet: IRuleSet): Promise; - // (undocumented) - applySchemaItemRules(schemaItem: SchemaItem, ruleSet: IRuleSet): Promise; - // (undocumented) - applySchemaRules(schema: Schema, ruleSet: IRuleSet): Promise; - // (undocumented) - applyStructRules(structClass: StructClass, ruleSet: IRuleSet): Promise; - // (undocumented) - applyUnitRules(unit: Unit, ruleSet: IRuleSet): Promise; - // (undocumented) - applyUnitSystemRules(unitSystem: UnitSystem, ruleSet: IRuleSet): Promise; - readonly diagnosticReporters: IDiagnosticReporter[]; - registerReporter(...reporters: IDiagnosticReporter[]): void; - registerRuleSet(ruleSet: IRuleSet): void; - // WARNING: The type "RuleSetArray" needs to be exported by the package (e.g. added to index.ts) - readonly ruleSets: RuleSetArray; - visitClass(ecClass: AnyClass): Promise; - visitConstant(constant: Constant): Promise; - visitCustomAttributeClass(customAttribute: CustomAttributeClass): Promise; - // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) - visitCustomAttributeContainer(container: CustomAttributeContainerProps): Promise; - visitEntityClass(entity: EntityClass): Promise; - visitEnumeration(enumeration: Enumeration): Promise; - visitFormat(format: Format): Promise; - visitFullSchema(schema: Schema): Promise; - visitInvertedUnit(invertedUnit: InvertedUnit): Promise; - visitKindOfQuantity(koq: KindOfQuantity): Promise; - visitMixin(mixin: Mixin): Promise; - visitPhenomenon(phenomenon: Phenomenon): Promise; - visitProperty(property: AnyProperty): Promise; - visitPropertyCategory(category: PropertyCategory): Promise; - visitRelationshipClass(relationship: RelationshipClass): Promise; - visitRelationshipConstraint(constraint: RelationshipConstraint): Promise; - visitSchemaItem(schemaItem: SchemaItem): Promise; - visitStructClass(struct: StructClass): Promise; - visitUnit(unit: Unit): Promise; - visitUnitSystem(unitSystem: UnitSystem): Promise; -} - -// @public -class SchemaWalker { - constructor(visitor: ISchemaPartVisitor); - traverseSchema(schema: T): Promise; -} - -// @public -class SchemaXmlFileLocater extends SchemaFileLocater, implements ISchemaLocater { - addSchemaReferences(schema: Schema, context?: SchemaContext): Promise; - addSchemaReferencesSync(schema: Schema, context?: SchemaContext): void; - getSchema(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise; - getSchemaKey(data: string): SchemaKey; - getSchemaReferenceKeys(schemaKey: FileSchemaKey): SchemaKey[]; - getSchemaSync(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): T | undefined; - loadSchema(schemaPath: string, context: SchemaContext): Promise; -} - -// @public (undocumented) -enum ScientificType { - // (undocumented) - Normalized = 0, - // (undocumented) - ZeroNormalized = 1 -} - -// @public (undocumented) -export function scientificTypeToString(scientificType: ScientificType): string; - -// @public (undocumented) -enum ShowSignOption { - // (undocumented) - NegativeParentheses = 3, - // (undocumented) - NoSign = 0, - // (undocumented) - OnlyNegative = 1, - // (undocumented) - SignAlways = 2 -} - -// @public (undocumented) -export function showSignOptionToString(showSign: ShowSignOption): string; - -// @public (undocumented) -enum StrengthDirection { - // (undocumented) - Backward = 2, - // (undocumented) - Forward = 1 -} - -// @public (undocumented) -export function strengthDirectionToString(direction: StrengthDirection): string; - -// @public (undocumented) -export function strengthToString(strength: StrengthType): string; - -// @public (undocumented) -enum StrengthType { - // (undocumented) - Embedding = 2, - // (undocumented) - Holding = 1, - // (undocumented) - Referencing = 0 -} - -// @public (undocumented) -class StructArrayProperty extends StructArrayProperty_base { - constructor(ecClass: ECClass, name: string, type: StructClass); -} - -// @public -class StructClass extends ECClass { - constructor(schema: Schema, name: string, modifier?: ECClassModifier); - // WARNING: The type "SchemaItemType.StructClass" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.StructClass; -} - -// @public (undocumented) -class StructProperty extends Property { - constructor(ecClass: ECClass, name: string, type: StructClass); - // (undocumented) - protected _structClass: StructClass; - // WARNING: The type "StructPropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(structPropertyProps: StructPropertyProps): Promise; - // WARNING: The type "StructPropertyProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(structPropertyProps: StructPropertyProps): void; - // (undocumented) - readonly structClass: StructClass; - // (undocumented) - toJson(): any; -} - -// @public -class Unit extends SchemaItem { - constructor(schema: Schema, name: string); - // (undocumented) - protected _definition: string; - // (undocumented) - protected _denominator: number; - // (undocumented) - protected _numerator: number; - // (undocumented) - protected _offset: number; - // (undocumented) - protected _phenomenon?: LazyLoadedPhenomenon; - // (undocumented) - protected _unitSystem?: LazyLoadedUnitSystem; - // (undocumented) - readonly definition: string; - // (undocumented) - readonly denominator: number; - // WARNING: The type "UnitProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserialize(unitProps: UnitProps): Promise; - // WARNING: The type "UnitProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - deserializeSync(unitProps: UnitProps): void; - // (undocumented) - readonly numerator: number; - // (undocumented) - readonly offset: number; - // (undocumented) - readonly phenomenon: LazyLoadedPhenomenon | undefined; - // WARNING: The type "SchemaItemType.Unit" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.Unit; - // (undocumented) - toJson: { - [value: string]: any; - } - // (undocumented) - readonly unitSystem: LazyLoadedUnitSystem | undefined; -} - -// @public (undocumented) -class UnitSystem extends SchemaItem { - constructor(schema: Schema, name: string); - // WARNING: The type "SchemaItemType.UnitSystem" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly schemaItemType: SchemaItemType.UnitSystem; -} - -// WARNING: Unsupported export: AnyEnumerator -// WARNING: Unsupported export: AnyArrayProperty -// WARNING: Unsupported export: AnyEnumerationProperty -// WARNING: Unsupported export: AnyPrimitiveProperty -// WARNING: Unsupported export: AnyProperty -// WARNING: Unsupported export: AnyStructProperty -// WARNING: Unsupported export: DiagnosticCodes -// WARNING: Unsupported export: Diagnostics -// WARNING: Unsupported export: ECRuleSet -// WARNING: Unsupported export: DelayedPromiseWithProps -// WARNING: Unsupported export: DelayedPromiseWithProps -// WARNING: Unsupported export: LazyLoadedSchema -// WARNING: Unsupported export: LazyLoadedSchemaItem -// WARNING: Unsupported export: LazyLoadedECClass -// WARNING: Unsupported export: LazyLoadedEntityClass -// WARNING: Unsupported export: LazyLoadedMixin -// WARNING: Unsupported export: LazyLoadedStructClass -// WARNING: Unsupported export: LazyLoadedCustomAttributeClass -// WARNING: Unsupported export: LazyLoadedRelationshipClass -// WARNING: Unsupported export: LazyLoadedEnumeration -// WARNING: Unsupported export: LazyLoadedKindOfQuantity -// WARNING: Unsupported export: LazyLoadedPropertyCategory -// WARNING: Unsupported export: LazyLoadedRelationshipConstraintClass -// WARNING: Unsupported export: LazyLoadedUnit -// WARNING: Unsupported export: LazyLoadedInvertedUnit -// WARNING: Unsupported export: LazyLoadedConstant -// WARNING: Unsupported export: LazyLoadedPhenomenon -// WARNING: Unsupported export: LazyLoadedUnitSystem -// WARNING: Unsupported export: LazyLoadedFormat -// WARNING: Unsupported export: AnyClass -// WARNING: Unsupported export: AnySchemaItem -// WARNING: Unsupported export: AnyECType -// WARNING: Unsupported export: formatStringRgx -// WARNING: Unsupported export: AnyDiagnostic -// WARNING: Unsupported export: IRule -// WARNING: Unsupported export: BaseRule -// (No @packagedocumentation comment for this package) +// @public (undocumented) +class ArrayProperty extends Property { + // (undocumented) + protected _maxOccurs?: number; + // (undocumented) + protected _minOccurs: number; + // (undocumented) + readonly maxOccurs: number | undefined; + // (undocumented) + readonly minOccurs: number; +} + +// @public +class BaseDiagnostic implements IDiagnostic { + constructor(ecDefinition: TYPE, messageArgs: ARGS); + readonly category: DiagnosticCategory; + readonly code: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: TYPE; + messageArgs: ARGS; + readonly messageText: string; +} + +// @public +class ClassDiagnostic extends SchemaItemDiagnostic { + constructor(ecClass: AnyClass, messageArgs: ARGS); +} + +// @public +export function classModifierToString(modifier: ECClassModifier): string; + +// @public +class Constant extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _definition: string; + // (undocumented) + protected _denominator: number; + // (undocumented) + protected _numerator: number; + // (undocumented) + protected _phenomenon?: LazyLoadedPhenomenon; + // (undocumented) + readonly definition: string; + // (undocumented) + readonly denominator: number; + // WARNING: The type "ConstantProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(constantProps: ConstantProps): Promise; + // WARNING: The type "ConstantProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(constantProps: ConstantProps): void; + // (undocumented) + readonly numerator: number; + // (undocumented) + readonly phenomenon: LazyLoadedPhenomenon | undefined; + // WARNING: The type "SchemaItemType.Constant" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.Constant; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public +export function containerTypeToString(type: CustomAttributeContainerType): string; + +// @public +export function createClassDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { + new (ecClass: AnyClass, messageArgs: ARGS): { + readonly code: string; + readonly category: DiagnosticCategory; + readonly messageText: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: AnyClass; + messageArgs: ARGS; + }; + diagnosticType: DiagnosticType; +}; + +// @public +export function createCustomAttributeContainerDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { + new (container: CustomAttributeContainerProps, messageArgs: ARGS): { + readonly code: string; + readonly category: DiagnosticCategory; + readonly messageText: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: CustomAttributeContainerProps; + messageArgs: ARGS; + }; +}; + +// @public +export function createPropertyDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { + new (property: AnyProperty, messageArgs: ARGS): { + readonly code: string; + readonly category: DiagnosticCategory; + readonly messageText: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: AnyProperty; + messageArgs: ARGS; + }; +}; + +// @public +export function createRelationshipConstraintDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { + new (constraint: RelationshipConstraint, messageArgs: ARGS): { + readonly code: string; + readonly category: DiagnosticCategory; + readonly messageText: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: RelationshipConstraint; + messageArgs: ARGS; + }; +}; + +// @public +export function createSchemaDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { + new (schema: Schema, messageArgs: ARGS): { + readonly code: string; + readonly category: DiagnosticCategory; + readonly messageText: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: Schema; + messageArgs: ARGS; + }; + diagnosticType: DiagnosticType; +}; + +// @public +export function createSchemaItemDiagnosticClass(code: string, messageText: string, category?: DiagnosticCategory): { + new (ecDefinition: ITEM, messageArgs: ARGS): { + readonly code: string; + readonly category: DiagnosticCategory; + readonly messageText: string; + readonly diagnosticType: DiagnosticType; + ecDefinition: ITEM; + messageArgs: ARGS; + }; + diagnosticType: DiagnosticType; +}; + +// @public +class CustomAttributeClass extends ECClass { + constructor(schema: Schema, name: string, modifier?: ECClassModifier); + // (undocumented) + protected _containerType?: CustomAttributeContainerType; + // (undocumented) + readonly containerType: CustomAttributeContainerType; + // WARNING: The type "CustomAttributeClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(customAttributeProps: CustomAttributeClassProps): Promise; + // WARNING: The type "CustomAttributeClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(customAttributeProps: CustomAttributeClassProps): void; + // WARNING: The type "SchemaItemType.CustomAttributeClass" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.CustomAttributeClass; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) +// @public +class CustomAttributeContainerDiagnostic extends BaseDiagnostic { + // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) + constructor(container: CustomAttributeContainerProps, messageArgs: ARGS); + // (undocumented) + readonly diagnosticType: DiagnosticType; +} + +// @public +enum CustomAttributeContainerType { + // (undocumented) + Any = 4095, + // (undocumented) + AnyClass = 30, + // (undocumented) + AnyProperty = 992, + // (undocumented) + AnyRelationshipConstraint = 3072, + // (undocumented) + CustomAttributeClass = 4, + // (undocumented) + EntityClass = 2, + // (undocumented) + NavigationProperty = 512, + // (undocumented) + PrimitiveArrayProperty = 128, + // (undocumented) + PrimitiveProperty = 32, + // (undocumented) + RelationshipClass = 16, + // (undocumented) + Schema = 1, + // (undocumented) + SourceRelationshipConstraint = 1024, + // (undocumented) + StructArrayProperty = 256, + // (undocumented) + StructClass = 8, + // (undocumented) + StructProperty = 64, + // (undocumented) + TargetRelationshipConstraint = 2048 +} + +// @public (undocumented) +enum DecimalPrecision { + // (undocumented) + Eight = 8, + // (undocumented) + Eleven = 11, + // (undocumented) + Five = 5, + // (undocumented) + Four = 4, + // (undocumented) + Nine = 9, + // (undocumented) + One = 1, + // (undocumented) + Seven = 7, + // (undocumented) + Six = 6, + // (undocumented) + Ten = 10, + // (undocumented) + Three = 3, + // (undocumented) + Twelve = 12, + // (undocumented) + Two = 2, + // (undocumented) + Zero = 0 +} + +// @public +class DelayedPromise implements Promise { + // WARNING: The name "__@toStringTag" contains unsupported characters; API names should use only letters, numbers, and underscores + // (undocumented) + readonly __@toStringTag: "Promise"; + constructor(startCallback: () => Promise); + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; + start: () => Promise; + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +} + +// @public (undocumented) +interface DelayedPromiseWithPropsConstructor { + new (props: TProps, startCallback: () => Promise): Readonly & DelayedPromise; +} + +// @public +enum DiagnosticCategory { + // (undocumented) + Error = 1, + // (undocumented) + Message = 3, + // (undocumented) + Suggestion = 2, + // (undocumented) + Warning = 0 +} + +// @public (undocumented) +export function diagnosticCategoryToString(category: DiagnosticCategory): "Error" | "Warning" | "Message" | "Suggestion"; + +// @public +class DiagnosticReporterBase implements IDiagnosticReporter { + constructor(i18n?: I18N); + protected formatStringFromArgs(text: string, args: ArrayLike, baseIndex?: number): string; + i18N?: I18N; + report(diagnostic: AnyDiagnostic): void; + protected abstract reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string): void; +} + +// @public +enum DiagnosticType { + // (undocumented) + CustomAttributeContainer = 4, + // (undocumented) + None = 0, + // (undocumented) + Property = 3, + // (undocumented) + RelationshipConstraint = 5, + // (undocumented) + Schema = 1, + // (undocumented) + SchemaItem = 2 +} + +// @public (undocumented) +export function diagnosticTypeToString(type: DiagnosticType): "Schema" | "None" | "CustomAttributeContainer" | "Property" | "RelationshipConstraint" | "SchemaItem"; + +// @public +class ECClass extends SchemaItem, implements CustomAttributeContainerProps { + constructor(schema: Schema, name: string, modifier?: ECClassModifier); + // (undocumented) + protected _baseClass?: LazyLoadedECClass; + // (undocumented) + protected _modifier: ECClassModifier; + // (undocumented) + protected _properties?: Property[]; + // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected addCustomAttribute(customAttribute: CustomAttribute): void; + protected addProperty(prop: T): T; + // (undocumented) + baseClass: LazyLoadedECClass | undefined; + // (undocumented) + protected buildPropertyCache(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): Promise; + // (undocumented) + protected buildPropertyCacheSync(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): void; + protected createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise; + protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty; + protected createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise; + protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty; + // (undocumented) + protected createStructArrayProperty(name: string, structType: string | StructClass): Promise; + // (undocumented) + protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty; + // (undocumented) + protected createStructProperty(name: string, structType: string | StructClass): Promise; + // (undocumented) + protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty; + // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly customAttributes: CustomAttributeSet | undefined; + // WARNING: The type "ClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(classProps: ClassProps): Promise; + // WARNING: The type "ClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(classProps: ClassProps): void; + getAllBaseClasses(): AsyncIterableIterator; + // (undocumented) + getAllBaseClassesSync(): Iterable; + // (undocumented) + getBaseClassSync(): ECClass | undefined; + getInheritedProperty(name: string): Promise; + getInheritedPropertySync(name: string): Property | undefined; + getProperties(resetCache?: boolean): Promise; + getPropertiesSync(resetCache?: boolean): Property[]; + getProperty(name: string, includeInherited?: boolean): Promise; + getPropertySync(name: string, includeInherited?: boolean): Property | undefined; + is(targetClass: string, schemaName: string): Promise; + isSync(targetClass: ECClass): boolean; + // (undocumented) + protected loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise; + // (undocumented) + protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration; + // (undocumented) + protected loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise; + // (undocumented) + protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass; + // (undocumented) + protected static mergeProperties(target: Property[], existingValues: Map, propertiesToMerge: Property[], overwriteExisting: boolean): void; + // (undocumented) + readonly modifier: ECClassModifier; + // (undocumented) + readonly properties: Property[] | undefined; + // (undocumented) + toJson: { + [value: string]: any; + } + traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise; + traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean; +} + +// @public (undocumented) +enum ECClassModifier { + // (undocumented) + Abstract = 1, + // (undocumented) + None = 0, + // (undocumented) + Sealed = 2 +} + +// @public +class ECName { + constructor(name: string); + // (undocumented) + readonly name: string; + // (undocumented) + static validate(newName: string): boolean; +} + +// @public (undocumented) +class ECObjectsError extends BentleyError { + constructor(errorNumber: number, message?: string); + // (undocumented) + readonly errorNumber: number; + // (undocumented) + toDebugString(): string; +} + +// @public (undocumented) +enum ECObjectsStatus { + // (undocumented) + ClassNotFound = 35074, + // (undocumented) + DifferentSchemaContexts = 35076, + // (undocumented) + DuplicateItem = 35053, + // (undocumented) + DuplicateProperty = 35054, + // (undocumented) + DuplicateSchema = 35055, + // (undocumented) + ECOBJECTS_ERROR_BASE = 35052, + // (undocumented) + ImmutableSchema = 35056, + // (undocumented) + InvalidContainerType = 35057, + // (undocumented) + InvalidECJson = 35058, + // (undocumented) + InvalidECName = 35059, + // (undocumented) + InvalidECVersion = 35060, + // (undocumented) + InvalidEnumValue = 35061, + // (undocumented) + InvalidModifier = 35062, + // (undocumented) + InvalidMultiplicity = 35063, + // (undocumented) + InvalidPrimitiveType = 35064, + // (undocumented) + InvalidRelationshipEnd = 35068, + // (undocumented) + InvalidSchemaItemType = 35065, + // (undocumented) + InvalidSchemaString = 35073, + // (undocumented) + InvalidSchemaXML = 35072, + // (undocumented) + InvalidStrength = 35066, + // (undocumented) + InvalidStrengthDirection = 35067, + // (undocumented) + InvalidType = 35069, + // (undocumented) + MissingSchemaUrl = 35070, + // (undocumented) + SchemaContextUndefined = 35075, + // (undocumented) + Success = 0, + // (undocumented) + UnableToLocateSchema = 35071 +} + +// @public (undocumented) +class ECStringConstants { + // (undocumented) + static readonly CONTAINERTYPE_ANY: string; + // (undocumented) + static readonly CONTAINERTYPE_ANYCLASS: string; + // (undocumented) + static readonly CONTAINERTYPE_ANYPROPERTY: string; + // (undocumented) + static readonly CONTAINERTYPE_ANYRELATIONSHIPCONSTRAINT: string; + // (undocumented) + static readonly CONTAINERTYPE_CUSTOMATTRIBUTECLASS: string; + // (undocumented) + static readonly CONTAINERTYPE_ENTITYCLASS: string; + // (undocumented) + static readonly CONTAINERTYPE_NAVIGATIONPROPERTY: string; + // (undocumented) + static readonly CONTAINERTYPE_PRIMITIVEARRAYPROPERTY: string; + // (undocumented) + static readonly CONTAINERTYPE_PRIMITIVEPROPERTY: string; + // (undocumented) + static readonly CONTAINERTYPE_RELATIONSHIPCLASS: string; + // (undocumented) + static readonly CONTAINERTYPE_SCHEMA: string; + // (undocumented) + static readonly CONTAINERTYPE_SOURCERELATIONSHIPCONSTRAINT: string; + // (undocumented) + static readonly CONTAINERTYPE_STRUCTARRAYPROPERTY: string; + // (undocumented) + static readonly CONTAINERTYPE_STRUCTCLASS: string; + // (undocumented) + static readonly CONTAINERTYPE_STRUCTPROPERTY: string; + // (undocumented) + static readonly CONTAINERTYPE_TARGETRELATIONSHIPCONSTRAINT: string; + // (undocumented) + static readonly RELATIONSHIP_END_SOURCE: string; + // (undocumented) + static readonly RELATIONSHIP_END_TARGET: string; +} + +// @public (undocumented) +class ECVersion { + constructor(read?: number, write?: number, minor?: number); + compare(rhv: ECVersion): number; + static fromString(versionString: string): ECVersion; + // (undocumented) + readonly minor: number; + // (undocumented) + readonly read: number; + toString(padZeroes?: boolean): string; + // (undocumented) + readonly write: number; +} + +// @public +class EntityClass extends ECClass { + constructor(schema: Schema, name: string, modifier?: ECClassModifier); + // (undocumented) + protected _mixins?: LazyLoadedMixin[]; + // (undocumented) + protected addMixin(mixin: Mixin): void; + // (undocumented) + protected buildPropertyCache(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): Promise; + // (undocumented) + protected buildPropertyCacheSync(result: Property[], existingValues?: Map, resetBaseCaches?: boolean): void; + // (undocumented) + protected createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise; + // (undocumented) + protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty; + // WARNING: The type "EntityClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(entityClassProps: EntityClassProps): Promise; + // WARNING: The type "EntityClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(entityClassProps: EntityClassProps): void; + getInheritedProperty(name: string): Promise; + getInheritedPropertySync(name: string): Property | undefined; + // (undocumented) + getMixinsSync(): Iterable; + // (undocumented) + readonly mixins: LazyLoadedMixin[]; + // WARNING: The type "SchemaItemType.EntityClass" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.EntityClass; + // (undocumented) + toJson(standalone: boolean, includeSchemaVersion: boolean): any | void; +} + +// @public +class Enumeration extends SchemaItem { + // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) + constructor(schema: Schema, name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String); + // (undocumented) + protected _enumerators: AnyEnumerator[]; + // (undocumented) + protected _isStrict: boolean; + // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected _type?: PrimitiveType.Integer | PrimitiveType.String; + protected addEnumerator(enumerator: AnyEnumerator): void; + createEnumerator(name: string, value: string | number, label?: string, description?: string): AnyEnumerator; + // WARNING: The type "EnumerationProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(enumerationProps: EnumerationProps): Promise; + // WARNING: The type "EnumerationProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(enumerationProps: EnumerationProps): void; + // (undocumented) + readonly enumerators: Enumerator[]; + getEnumerator(value: string): Enumerator | undefined; + getEnumeratorByName(name: string): AnyEnumerator | undefined; + // (undocumented) + readonly isInt: boolean; + // (undocumented) + readonly isStrict: boolean; + // (undocumented) + readonly isString: boolean; + // WARNING: The type "SchemaItemType.Enumeration" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.Enumeration; + // (undocumented) + toJson: { + [value: string]: any; + } + // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly type: PrimitiveType.Integer | PrimitiveType.String | undefined; +} + +// @public (undocumented) +class EnumerationArrayProperty extends EnumerationArrayProperty_base { + constructor(ecClass: ECClass, name: string, type: LazyLoadedEnumeration); +} + +// @public (undocumented) +class EnumerationProperty extends PrimitiveOrEnumPropertyBase { + constructor(ecClass: ECClass, name: string, type: LazyLoadedEnumeration); + // (undocumented) + protected _enumeration?: LazyLoadedEnumeration; + // WARNING: The type "EnumerationPropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(enumerationPropertyProps: EnumerationPropertyProps): Promise; + // WARNING: The type "EnumerationPropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(enumerationPropertyProps: EnumerationPropertyProps): void; + // (undocumented) + readonly enumeration: LazyLoadedEnumeration | undefined; + // (undocumented) + toJson(): any; +} + +// @public (undocumented) +interface Enumerator { + // (undocumented) + readonly description?: string; + // (undocumented) + readonly label?: string; + // (undocumented) + readonly name: string; + // (undocumented) + readonly value: T; +} + +// @public +class FileSchemaKey extends SchemaKey { + constructor(key: SchemaKey, fileName: string, schemaJson?: string); + // (undocumented) + fileName: string; + // (undocumented) + schemaText?: string; +} + +// @public (undocumented) +class Format extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _decimalSeparator: string; + // (undocumented) + protected _formatTraits: FormatTraits; + // (undocumented) + protected _includeZero: boolean; + // (undocumented) + protected _minWidth?: number; + // (undocumented) + protected _precision: number; + // (undocumented) + protected _roundFactor: number; + // (undocumented) + protected _scientificType?: ScientificType; + // (undocumented) + protected _showSignOption: ShowSignOption; + // (undocumented) + protected _spacer: string; + // (undocumented) + protected _stationOffsetSize?: number; + // (undocumented) + protected _stationSeparator: string; + // (undocumented) + protected _thousandSeparator: string; + // (undocumented) + protected _type: FormatType; + // (undocumented) + protected _units?: Array<[Unit | InvertedUnit, string | undefined]>; + // (undocumented) + protected _uomSeparator: string; + protected addUnit(unit: Unit | InvertedUnit, label?: string): void; + // (undocumented) + readonly decimalSeparator: string; + // WARNING: The type "FormatProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(formatProps: FormatProps): Promise; + // WARNING: The type "FormatProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(formatProps: FormatProps): void; + // (undocumented) + readonly formatTraits: FormatTraits; + // (undocumented) + hasFormatTrait(formatTrait: FormatTraits): boolean; + // (undocumented) + readonly includeZero: boolean | undefined; + // (undocumented) + readonly minWidth: number | undefined; + // (undocumented) + readonly precision: DecimalPrecision | FractionalPrecision; + // (undocumented) + readonly roundFactor: number; + // WARNING: The type "SchemaItemType.Format" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.Format; + // (undocumented) + readonly scientificType: ScientificType | undefined; + // (undocumented) + protected setPrecision(precision: number): void; + // (undocumented) + readonly showSignOption: ShowSignOption; + // (undocumented) + readonly spacer: string | undefined; + // (undocumented) + readonly stationOffsetSize: number | undefined; + // (undocumented) + readonly stationSeparator: string; + // (undocumented) + readonly thousandSeparator: string; + // (undocumented) + toJson: { + [value: string]: any; + } + // (undocumented) + readonly type: FormatType; + // (undocumented) + readonly units: Array<[Unit | InvertedUnit, string | undefined]> | undefined; + // (undocumented) + readonly uomSeparator: string; +} + +// @public (undocumented) +enum FormatTraits { + // (undocumented) + ApplyRounding = 16, + // (undocumented) + ExponentOnlyNegative = 512, + // (undocumented) + FractionDash = 32, + // (undocumented) + KeepDecimalPoint = 8, + // (undocumented) + KeepSingleZero = 2, + // (undocumented) + PrependUnitLabel = 128, + // (undocumented) + ShowUnitLabel = 64, + // (undocumented) + TrailZeroes = 1, + // (undocumented) + Use1000Separator = 256, + // (undocumented) + ZeroEmpty = 4 +} + +// @public (undocumented) +export function formatTraitsToArray(currentFormatTrait: FormatTraits): string[]; + +// @public (undocumented) +enum FormatType { + // (undocumented) + Decimal = 0, + // (undocumented) + Fractional = 1, + // (undocumented) + Scientific = 2, + // (undocumented) + Station = 3 +} + +// @public (undocumented) +export function formatTypeToString(type: FormatType): string; + +// @public (undocumented) +enum FractionalPrecision { + // (undocumented) + Eight = 8, + // (undocumented) + Four = 4, + // (undocumented) + One = 1, + // (undocumented) + OneHundredTwentyEight = 128, + // (undocumented) + Sixteen = 16, + // (undocumented) + SixtyFour = 64, + // (undocumented) + ThirtyTwo = 32, + // (undocumented) + Two = 2, + // (undocumented) + TwoHundredFiftySix = 256 +} + +// @public (undocumented) +export function getItemNamesFromFormatString(formatString: string): Iterable; + +// @public +interface IDiagnostic { + category: DiagnosticCategory; + code: string; + diagnosticType: DiagnosticType; + ecDefinition: TYPE; + messageArgs: ARGS; + messageText: string; +} + +// @public +interface IDiagnosticReporter { + i18N?: I18N; + report(diagnostic: AnyDiagnostic): void; +} + +// @public +class InvertedUnit extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _invertsUnit?: LazyLoadedUnit; + // (undocumented) + protected _unitSystem?: LazyLoadedUnitSystem; + // WARNING: The type "InvertedUnitProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(invertedUnitProps: InvertedUnitProps): Promise; + // WARNING: The type "InvertedUnitProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(invertedUnitProps: InvertedUnitProps): void; + // (undocumented) + readonly invertsUnit: LazyLoadedUnit | undefined; + // WARNING: The type "SchemaItemType.InvertedUnit" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.InvertedUnit; + // (undocumented) + toJson: { + [value: string]: any; + } + // (undocumented) + readonly unitSystem: LazyLoadedUnitSystem | undefined; +} + +// @public +interface IRuleSet { + classRules?: Array>; + constantRules?: Array>; + customAttributeClassRules?: Array>; + customAttributeContainerRules?: Array>; + customAttributeInstanceRules?: Array>; + entityClassRules?: Array>; + enumerationRules?: Array>; + formatRules?: Array>; + invertedUnitRules?: Array>; + kindOfQuantityRules?: Array>; + mixinRules?: Array>; + name: string; + phenomenonRules?: Array>; + propertyCategoryRules?: Array>; + propertyRules?: Array>; + relationshipConstraintRules?: Array>; + relationshipRules?: Array>; + schemaItemRules?: Array>; + schemaRules?: Array>; + structClassRules?: Array>; + unitRules?: Array>; + unitSystemRules?: Array>; +} + +// @public (undocumented) +interface ISchemaItemLocater { + // (undocumented) + getSchemaItem(schemaItemKey: SchemaItemKey): Promise; +} + +// @public +interface ISchemaLocater { + getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context?: SchemaContext): Promise; + getSchemaSync(schemaKey: SchemaKey, matchType: SchemaMatchType, context?: SchemaContext): T | undefined; +} + +// @public +interface ISchemaPartVisitor { + visitClass?: (ecClass: AnyClass) => Promise; + visitClassSync?: (ecClass: AnyClass) => void; + visitConstant?: (constant: Constant) => Promise; + visitConstantSync?: (constant: Constant) => void; + visitCustomAttributeClass?: (customAttributeClass: CustomAttributeClass) => Promise; + visitCustomAttributeClassSync?: (customAttributeClass: CustomAttributeClass) => void; + visitCustomAttributeContainer?: (customAttributeContainer: CustomAttributeContainerProps) => Promise; + visitCustomAttributeContainerSync?: (customAttributeContainer: CustomAttributeContainerProps) => void; + visitEmptySchema?: (schema: Schema) => Promise; + visitEmptySchemaSync?: (schema: Schema) => void; + visitEntityClass?: (entityClass: EntityClass) => Promise; + visitEntityClassSync?: (entityClass: EntityClass) => void; + visitEnumeration?: (enumeration: Enumeration) => Promise; + visitEnumerationSync?: (enumeration: Enumeration) => void; + visitFormat?: (format: Format) => Promise; + visitFormatSync?: (format: Format) => void; + visitFullSchema?: (schema: Schema) => Promise; + visitFullSchemaSync?: (schema: Schema) => void; + visitInvertedUnit?: (invertedUnit: InvertedUnit) => Promise; + visitInvertedUnitSync?: (invertedUnit: InvertedUnit) => void; + visitKindOfQuantity?: (koq: KindOfQuantity) => Promise; + visitKindOfQuantitySync?: (koq: KindOfQuantity) => void; + visitMixin?: (mixin: Mixin) => Promise; + visitMixinSync?: (mixin: Mixin) => void; + visitPhenomenon?: (phenomena: Phenomenon) => Promise; + visitPhenomenonSync?: (phenomena: Phenomenon) => void; + visitProperty?: (property: AnyProperty) => Promise; + visitPropertyCategory?: (category: PropertyCategory) => Promise; + visitPropertyCategorySync?: (category: PropertyCategory) => void; + visitPropertySync?: (property: AnyProperty) => void; + visitRelationshipClass?: (relationshipClass: RelationshipClass) => Promise; + visitRelationshipClassSync?: (relationshipClass: RelationshipClass) => void; + visitRelationshipConstraint?: (relationshipConstraint: RelationshipConstraint) => Promise; + visitRelationshipConstraintSync?: (relationshipConstraint: RelationshipConstraint) => void; + visitSchemaItem?: (schemaItem: SchemaItem) => Promise; + visitSchemaItemSync?: (schemaItem: SchemaItem) => void; + visitStructClass?: (structClass: StructClass) => Promise; + visitStructClassSync?: (structClass: StructClass) => void; + visitUnit?: (unit: Unit) => Promise; + visitUnitSync?: (unit: Unit) => void; + visitUnitSystem?: (unitSystem: UnitSystem) => Promise; + visitUnitSystemSync?: (unitSystem: UnitSystem) => void; +} + +// @public +class KindOfQuantity extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _persistenceUnit?: LazyLoadedUnit | LazyLoadedInvertedUnit; + // (undocumented) + protected _presentationUnits: Array; + // (undocumented) + protected _relativeError: number; + // (undocumented) + protected addPresentationFormat(format: Format | OverrideFormat, isDefault?: boolean): void; + // (undocumented) + protected createFormatOverride(parent: Format, name: string, precision?: number, unitLabelOverrides?: Array<[Unit | InvertedUnit, string | undefined]>): OverrideFormat; + // (undocumented) + readonly defaultPresentationFormat: undefined | Format | OverrideFormat; + // WARNING: The type "KindOfQuantityProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(kindOfQuantityProps: KindOfQuantityProps): Promise; + // WARNING: The type "KindOfQuantityProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(kindOfQuantityProps: KindOfQuantityProps): void; + // (undocumented) + persistenceUnit: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined; + // (undocumented) + readonly presentationUnits: Array | undefined; + // (undocumented) + readonly relativeError: number; + // WARNING: The type "SchemaItemType.KindOfQuantity" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.KindOfQuantity; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public +class LoggingDiagnosticReporter extends DiagnosticReporterBase { + // (undocumented) + reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string): void; +} + +// @public +class Mixin extends ECClass { + constructor(schema: Schema, name: string); + // (undocumented) + protected _appliesTo?: LazyLoadedEntityClass; + // (undocumented) + applicableTo(entityClass: EntityClass): Promise; + // (undocumented) + readonly appliesTo: LazyLoadedEntityClass | undefined; + // (undocumented) + protected createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise; + // (undocumented) + protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty; + // WARNING: The type "MixinProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(mixinProps: MixinProps): Promise; + // WARNING: The type "MixinProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(mixinProps: MixinProps): void; + // WARNING: The type "SchemaItemType.Mixin" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.Mixin; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public (undocumented) +class NavigationProperty extends Property { + constructor(ecClass: ECClass, name: string, relationship: LazyLoadedRelationshipClass, direction?: StrengthDirection); + // (undocumented) + protected _direction: StrengthDirection; + // (undocumented) + protected _relationshipClass: LazyLoadedRelationshipClass; + // (undocumented) + readonly direction: StrengthDirection; + // (undocumented) + getRelationshipClassSync(): RelationshipClass | undefined; + // (undocumented) + readonly relationshipClass: LazyLoadedRelationshipClass; + // (undocumented) + toJson(): any; +} + +// @public (undocumented) +interface NoDelayedPromiseMethods { + // (undocumented) + [propName: string]: any; + // (undocumented) + catch?: never; + // (undocumented) + start?: never; + // (undocumented) + then?: never; +} + +// @public +class OverrideFormat { + constructor(parent: Format, name: string, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>); + // (undocumented) + readonly decimalSeparator: string; + // (undocumented) + readonly formatTraits: FormatTraits; + // (undocumented) + readonly fullName: string; + // (undocumented) + hasFormatTrait(formatTrait: FormatTraits): boolean; + // (undocumented) + readonly includeZero: boolean | undefined; + // (undocumented) + readonly minWidth: number | undefined; + readonly name: string; + readonly parent: Format; + // (undocumented) + readonly precision: DecimalPrecision | FractionalPrecision; + // (undocumented) + readonly roundFactor: number; + // (undocumented) + readonly scientificType: ScientificType | undefined; + // (undocumented) + readonly showSignOption: ShowSignOption; + // (undocumented) + readonly spacer: string | undefined; + // (undocumented) + readonly stationOffsetSize: number | undefined; + // (undocumented) + readonly stationSeparator: string; + // (undocumented) + readonly thousandSeparator: string; + // (undocumented) + readonly type: FormatType; + // (undocumented) + readonly units: [Unit | InvertedUnit, string | undefined][] | undefined; + // (undocumented) + readonly uomSeparator: string; +} + +// @public +export function parseClassModifier(modifier: string): ECClassModifier | undefined; + +// @public +export function parseCustomAttributeContainerType(type: string): CustomAttributeContainerType | undefined; + +// @public (undocumented) +export function parseDecimalPrecision(jsonObjPrecision: number): DecimalPrecision | undefined; + +// @public (undocumented) +export function parseFormatTrait(formatTraitsString: string): FormatTraits | undefined; + +// @public (undocumented) +export function parseFormatType(jsonObjType: string): FormatType | undefined; + +// @public (undocumented) +export function parseFractionalPrecision(jsonObjPrecision: number): FractionalPrecision | undefined; + +// @public (undocumented) +export function parsePrecision(precision: number, type: FormatType): DecimalPrecision | FractionalPrecision | undefined; + +// @public +export function parsePrimitiveType(type: string): PrimitiveType | undefined; + +// @public (undocumented) +export function parseRelationshipEnd(end: string): RelationshipEnd | undefined; + +// @public +export function parseSchemaItemType(type: string): SchemaItemType | undefined; + +// @public (undocumented) +export function parseScientificType(scientificType: string): ScientificType | undefined; + +// @public (undocumented) +export function parseShowSignOption(showSignOption: string): ShowSignOption | undefined; + +// @public +export function parseStrength(strength: string): StrengthType | undefined; + +// @public (undocumented) +export function parseStrengthDirection(direction: string): StrengthDirection | undefined; + +// @public (undocumented) +class Phenomenon extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _definition: string; + // (undocumented) + readonly definition: string; + // WARNING: The type "PhenomenonProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(phenomenonProps: PhenomenonProps): Promise; + // WARNING: The type "PhenomenonProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(phenomenonProps: PhenomenonProps): void; + // WARNING: The type "SchemaItemType.Phenomenon" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.Phenomenon; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public (undocumented) +class PrimitiveArrayProperty extends PrimitiveArrayProperty_base { + constructor(ecClass: ECClass, name: string, primitiveType?: PrimitiveType); +} + +// @public (undocumented) +class PrimitiveOrEnumPropertyBase extends Property { + constructor(ecClass: ECClass, name: string, type: PropertyType); + // (undocumented) + protected _extendedTypeName?: string; + // (undocumented) + protected _maxLength?: number; + // (undocumented) + protected _maxValue?: number; + // (undocumented) + protected _minLength?: number; + // (undocumented) + protected _minValue?: number; + // WARNING: The type "PrimitiveOrEnumPropertyBaseProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(propertyBaseProps: PrimitiveOrEnumPropertyBaseProps): Promise; + // WARNING: The type "PrimitiveOrEnumPropertyBaseProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(propertyBaseProps: PrimitiveOrEnumPropertyBaseProps): void; + // (undocumented) + readonly extendedTypeName: string | undefined; + // (undocumented) + readonly maxLength: number | undefined; + // (undocumented) + readonly maxValue: number | undefined; + // (undocumented) + readonly minLength: number | undefined; + // (undocumented) + readonly minValue: number | undefined; + // (undocumented) + toJson(): any; +} + +// @public (undocumented) +class PrimitiveProperty extends PrimitiveOrEnumPropertyBase { + constructor(ecClass: ECClass, name: string, primitiveType?: PrimitiveType); + // WARNING: The type "PrimitivePropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(primitivePropertyProps: PrimitivePropertyProps): Promise; + // WARNING: The type "PrimitivePropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(primitivePropertyProps: PrimitivePropertyProps): void; + // (undocumented) + readonly primitiveType: PrimitiveType; + // (undocumented) + toJson(): any; +} + +// @public +enum PrimitiveType { + // (undocumented) + Binary = 257, + // (undocumented) + Boolean = 513, + // (undocumented) + DateTime = 769, + // (undocumented) + Double = 1025, + // (undocumented) + IGeometry = 2561, + // (undocumented) + Integer = 1281, + // (undocumented) + Long = 1537, + // (undocumented) + Point2d = 1793, + // (undocumented) + Point3d = 2049, + // (undocumented) + String = 2305, + // (undocumented) + Uninitialized = 0 +} + +// @public (undocumented) +export function primitiveTypeToString(type: PrimitiveType): string; + +// @public +class Property implements CustomAttributeContainerProps { + constructor(ecClass: ECClass, name: string, type: PropertyType); + // (undocumented) + protected _category?: LazyLoadedPropertyCategory; + // (undocumented) + protected _class: AnyClass; + // (undocumented) + protected _description?: string; + // (undocumented) + protected _isReadOnly?: boolean; + // (undocumented) + protected _kindOfQuantity?: LazyLoadedKindOfQuantity; + // (undocumented) + protected _label?: string; + // (undocumented) + protected _name: ECName; + // (undocumented) + protected _priority?: number; + // (undocumented) + protected _type: PropertyType; + // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected addCustomAttribute(customAttribute: CustomAttribute): void; + // (undocumented) + readonly category: LazyLoadedPropertyCategory | undefined; + // (undocumented) + readonly class: AnyClass; + // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly customAttributes: CustomAttributeSet | undefined; + // (undocumented) + readonly description: string | undefined; + // WARNING: The type "PropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(propertyProps: PropertyProps): Promise; + // WARNING: The type "PropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(propertyProps: PropertyProps): void; + readonly fullName: string; + // (undocumented) + getCategorySync(): PropertyCategory | undefined; + // (undocumented) + getKindOfQuantitySync(): KindOfQuantity | undefined; + // (undocumented) + isArray(): this is AnyArrayProperty; + // (undocumented) + isEnumeration(): this is AnyEnumerationProperty; + // (undocumented) + isNavigation(): this is NavigationProperty; + // (undocumented) + isPrimitive(): this is AnyPrimitiveProperty; + // (undocumented) + readonly isReadOnly: boolean; + // (undocumented) + isStruct(): this is AnyStructProperty; + // (undocumented) + readonly kindOfQuantity: LazyLoadedKindOfQuantity | undefined; + // (undocumented) + readonly label: string | undefined; + // (undocumented) + readonly name: string; + // (undocumented) + readonly priority: number; + readonly schema: Schema; + // (undocumented) + toJson(): any; +} + +// @public (undocumented) +class PropertyCategory extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _priority: number; + // WARNING: The type "PropertyCategoryProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(propertyCategoryProps: PropertyCategoryProps): Promise; + // WARNING: The type "PropertyCategoryProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(propertyCategoryProps: PropertyCategoryProps): void; + // (undocumented) + readonly priority: number; + // WARNING: The type "SchemaItemType.PropertyCategory" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.PropertyCategory; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public +class PropertyDiagnostic extends BaseDiagnostic { + constructor(property: AnyProperty, messageArgs: ARGS); + // (undocumented) + readonly diagnosticType: DiagnosticType; +} + +// @public (undocumented) +enum PropertyType { + // (undocumented) + Binary = 257, + // (undocumented) + Binary_Array = 261, + // (undocumented) + Boolean = 513, + // (undocumented) + Boolean_Array = 517, + // (undocumented) + DateTime = 769, + // (undocumented) + DateTime_Array = 773, + // (undocumented) + Double = 1025, + // (undocumented) + Double_Array = 1029, + // (undocumented) + IGeometry = 2561, + // (undocumented) + IGeometry_Array = 2565, + // (undocumented) + Integer = 1281, + // (undocumented) + Integer_Array = 1285, + // (undocumented) + Integer_Enumeration = 1297, + // (undocumented) + Integer_Enumeration_Array = 1301, + // (undocumented) + Long = 1537, + // (undocumented) + Long_Array = 1541, + // (undocumented) + Navigation = 8, + // (undocumented) + Point2d = 1793, + // (undocumented) + Point2d_Array = 1797, + // (undocumented) + Point3d = 2049, + // (undocumented) + Point3d_Array = 2053, + // (undocumented) + String = 2305, + // (undocumented) + String_Array = 2309, + // (undocumented) + String_Enumeration = 2321, + // (undocumented) + String_Enumeration_Array = 2325, + // (undocumented) + Struct = 2, + // (undocumented) + Struct_Array = 6 +} + +// @public (undocumented) +export function propertyTypeToString(type: PropertyType): "PrimitiveProperty" | "StructProperty" | "StructArrayProperty" | "NavigationProperty" | "PrimitiveArrayProperty"; + +// @public (undocumented) +module PropertyTypeUtils { + // (undocumented) + function asArray(t: PropertyType): PropertyType; + + // (undocumented) + function fromPrimitiveType(t: PrimitiveType): PropertyType; + + // (undocumented) + function getPrimitiveType(t: PropertyType): PrimitiveType; + + // (undocumented) + function isArray(t: PropertyType): boolean; + + // (undocumented) + function isEnumeration(t: PropertyType): boolean; + + // (undocumented) + function isNavigation(t: PropertyType): boolean; + + // (undocumented) + function isPrimitive(t: PropertyType): boolean; + + // (undocumented) + function isStruct(t: PropertyType): boolean; + +} + +// @public +class RelationshipClass extends ECClass { + constructor(schema: Schema, name: string, modifier?: ECClassModifier); + // (undocumented) + protected _source: RelationshipConstraint; + // (undocumented) + protected _strength: StrengthType; + // (undocumented) + protected _strengthDirection: StrengthDirection; + // (undocumented) + protected _target: RelationshipConstraint; + // (undocumented) + protected createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise; + // (undocumented) + protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty; + // WARNING: The type "RelationshipClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(relationshipClassProps: RelationshipClassProps): Promise; + // WARNING: The type "RelationshipClassProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(relationshipClassProps: RelationshipClassProps): void; + // (undocumented) + readonly schema: Schema; + // WARNING: The type "SchemaItemType.RelationshipClass" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.RelationshipClass; + // (undocumented) + readonly source: RelationshipConstraint; + // (undocumented) + readonly strength: StrengthType; + // (undocumented) + readonly strengthDirection: StrengthDirection; + // (undocumented) + readonly target: RelationshipConstraint; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public +class RelationshipConstraint implements CustomAttributeContainerProps { + constructor(relClass: RelationshipClass, relEnd: RelationshipEnd, roleLabel?: string, polymorphic?: boolean); + // (undocumented) + protected _abstractConstraint?: LazyLoadedRelationshipConstraintClass; + // (undocumented) + protected _constraintClasses?: LazyLoadedRelationshipConstraintClass[]; + // (undocumented) + protected _multiplicity?: RelationshipMultiplicity; + // (undocumented) + protected _polymorphic?: boolean; + // (undocumented) + protected _relationshipClass: RelationshipClass; + // (undocumented) + protected _relationshipEnd: RelationshipEnd; + // (undocumented) + protected _roleLabel?: string; + // (undocumented) + abstractConstraint: LazyLoadedRelationshipConstraintClass | undefined; + addClass(constraint: EntityClass | Mixin | RelationshipClass): void; + // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected addCustomAttribute(customAttribute: CustomAttribute): void; + static classCompatibleWithConstraint(constraintClass: ECClass, testClass: ECClass, isPolymorphic: boolean): Promise; + // (undocumented) + readonly constraintClasses: LazyLoadedRelationshipConstraintClass[] | undefined; + // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly customAttributes: CustomAttributeSet | undefined; + // WARNING: The type "RelationshipConstraintProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(relationshipConstraintProps: RelationshipConstraintProps): Promise; + // WARNING: The type "RelationshipConstraintProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(relationshipConstraintProps: RelationshipConstraintProps): void; + readonly fullName: "Source" | "Target"; + readonly isSource: boolean; + // (undocumented) + readonly multiplicity: RelationshipMultiplicity | undefined; + // (undocumented) + readonly polymorphic: boolean | undefined; + // (undocumented) + readonly relationshipClass: RelationshipClass; + // (undocumented) + readonly relationshipEnd: RelationshipEnd; + // (undocumented) + readonly roleLabel: string | undefined; + readonly schema: Schema; + supportsClass(ecClass: ECClass): Promise; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public +class RelationshipConstraintDiagnostic extends BaseDiagnostic { + constructor(constraint: RelationshipConstraint, messageArgs: ARGS); + // (undocumented) + readonly diagnosticType: DiagnosticType; +} + +// @public +enum RelationshipEnd { + // (undocumented) + Source = 0, + // (undocumented) + Target = 1 +} + +// @public (undocumented) +export function relationshipEndToString(end: RelationshipEnd): string; + +// @public (undocumented) +class RelationshipMultiplicity { + constructor(lowerLimit: number, upperLimit: number); + // (undocumented) + equals(rhs: RelationshipMultiplicity): boolean; + // (undocumented) + static fromString(str: string): RelationshipMultiplicity | undefined; + // (undocumented) + readonly lowerLimit: number; + // (undocumented) + static readonly oneMany: RelationshipMultiplicity; + // (undocumented) + static readonly oneOne: RelationshipMultiplicity; + // (undocumented) + toString(): string; + // (undocumented) + readonly upperLimit: number; + // (undocumented) + static readonly zeroMany: RelationshipMultiplicity; + // (undocumented) + static readonly zeroOne: RelationshipMultiplicity; +} + +// @public (undocumented) +class Schema implements CustomAttributeContainerProps { + constructor(context: SchemaContext, name: string, readVersion: number, writeVersion: number, minorVersion: number); + // (undocumented) + protected _alias?: string; + // (undocumented) + protected _description?: string; + // (undocumented) + protected _label?: string; + // (undocumented) + protected _schemaKey?: SchemaKey; + // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected addCustomAttribute(customAttribute: CustomAttribute): void; + // (undocumented) + protected addItem(item: T): void; + // (undocumented) + protected addReference(refSchema: Schema): Promise; + // (undocumented) + protected addReferenceSync(refSchema: Schema): void; + // (undocumented) + readonly alias: string | undefined; + readonly context: SchemaContext; + protected createConstant(name: string): Promise; + // (undocumented) + protected createConstantSync(name: string): Constant; + protected createCustomAttributeClass(name: string, modifier?: ECClassModifier): Promise; + // (undocumented) + protected createCustomAttributeClassSync(name: string, modifier?: ECClassModifier): CustomAttributeClass; + protected createEntityClass(name: string, modifier?: ECClassModifier): Promise; + // (undocumented) + protected createEntityClassSync(name: string, modifier?: ECClassModifier): EntityClass; + // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) + protected createEnumeration(name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String): Promise; + // WARNING: The type "PrimitiveType.Integer" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "PrimitiveType.String" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected createEnumerationSync(name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String): Enumeration; + protected createFormat(name: string): Promise; + // (undocumented) + protected createFormatSync(name: string): Format; + protected createInvertedUnit(name: string): Promise; + // (undocumented) + protected createInvertedUnitSync(name: string): InvertedUnit; + protected createKindOfQuantity(name: string): Promise; + // (undocumented) + protected createKindOfQuantitySync(name: string): KindOfQuantity; + protected createMixinClass(name: string): Promise; + // (undocumented) + protected createMixinClassSync(name: string): Mixin; + protected createPhenomenon(name: string): Promise; + // (undocumented) + protected createPhenomenonSync(name: string): Phenomenon; + protected createPropertyCategory(name: string): Promise; + // (undocumented) + protected createPropertyCategorySync(name: string): PropertyCategory; + protected createRelationshipClass(name: string, modifier?: ECClassModifier): Promise; + // (undocumented) + protected createRelationshipClassSync(name: string, modifier?: ECClassModifier): RelationshipClass; + protected createStructClass(name: string, modifier?: ECClassModifier): Promise; + // (undocumented) + protected createStructClassSync(name: string, modifier?: ECClassModifier): StructClass; + protected createUnit(name: string): Promise; + // (undocumented) + protected createUnitSync(name: string): Unit; + protected createUnitSystem(name: string): Promise; + // (undocumented) + protected createUnitSystemSync(name: string): UnitSystem; + // WARNING: The type "CustomAttributeSet" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly customAttributes: CustomAttributeSet | undefined; + // (undocumented) + readonly description: string | undefined; + // WARNING: The type "SchemaProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(schemaProps: SchemaProps): Promise; + // WARNING: The type "SchemaProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(schemaProps: SchemaProps): void; + // (undocumented) + static fromJson(jsonObj: object | string, context: SchemaContext): Promise; + // (undocumented) + static fromJsonSync(jsonObj: object | string, context: SchemaContext): Schema; + readonly fullName: string; + // (undocumented) + getClasses(): IterableIterator; + getItem(name: string): Promise; + // (undocumented) + getItems(): IterableIterator; + getItemSync(name: string): T | undefined; + // (undocumented) + getReference(refSchemaName: string): Promise; + // (undocumented) + getReferenceSync(refSchemaName: string): T | undefined; + getSchemaItemKey(fullName: string): SchemaItemKey; + // (undocumented) + readonly label: string | undefined; + lookupItem(key: Readonly | string): Promise; + lookupItemSync(key: Readonly | string): T | undefined; + // (undocumented) + readonly minorVersion: number; + // (undocumented) + readonly name: string; + // (undocumented) + readonly readVersion: number; + // (undocumented) + readonly references: Schema[]; + readonly schema: Schema; + // (undocumented) + readonly schemaKey: SchemaKey; + // (undocumented) + toJson: { + [value: string]: any; + } + // (undocumented) + readonly writeVersion: number; +} + +// @public (undocumented) +class SchemaCache implements ISchemaLocater { + constructor(); + addSchema(schema: T): Promise; + addSchemaSync(schema: T): void; + // (undocumented) + readonly count: number; + getSchema(schemaKey: SchemaKey, matchType?: SchemaMatchType): Promise; + // (undocumented) + getSchemaSync(schemaKey: SchemaKey, matchType?: SchemaMatchType): T | undefined; +} + +// @public +class SchemaContext implements ISchemaLocater, ISchemaItemLocater { + constructor(); + // (undocumented) + addLocater(locater: ISchemaLocater): void; + addSchema(schema: Schema): Promise; + addSchemaItem(schemaItem: SchemaItem): Promise; + addSchemaSync(schema: Schema): void; + // (undocumented) + getSchema(schemaKey: SchemaKey, matchType?: SchemaMatchType): Promise; + // (undocumented) + getSchemaItem(schemaItemKey: SchemaItemKey): Promise; + // (undocumented) + getSchemaItemSync(schemaItemKey: SchemaItemKey): T | undefined; + // (undocumented) + getSchemaSync(schemaKey: SchemaKey, matchType?: SchemaMatchType): T | undefined; +} + +// @public +class SchemaDiagnostic extends BaseDiagnostic { + constructor(schema: Schema, messageArgs: ARGS); + // (undocumented) + static diagnosticType: DiagnosticType; +} + +// @public +class SchemaFileLocater { + constructor(); + addSchemaSearchPath(schemaPath: string): void; + addSchemaSearchPaths(schemaPaths: string[]): void; + compareSchemaKeyByVersion(lhs: FileSchemaKey, rhs: FileSchemaKey): number; + // (undocumented) + fileExists(filePath: string): Promise; + protected findEligibleSchemaKeys(desiredKey: SchemaKey, matchType: SchemaMatchType, format: string): FileSchemaKey[]; + // (undocumented) + abstract getSchema(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise; + // (undocumented) + protected abstract getSchemaKey(data: string): SchemaKey; + // (undocumented) + readUtf8FileToString(filePath: string): Promise; + // (undocumented) + searchPaths: string[]; +} + +// @public +class SchemaGraphUtil { + static buildDependencyOrderedSchemaList(insertSchema: Schema, schemas?: Schema[]): Schema[]; +} + +// @public +class SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _description?: string; + // (undocumented) + protected _key: SchemaItemKey; + // (undocumented) + protected _label?: string; + // (undocumented) + readonly description: string | undefined; + // WARNING: The type "SchemaItemProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(schemaItemProps: SchemaItemProps): Promise; + // WARNING: The type "SchemaItemProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(schemaItemProps: SchemaItemProps): void; + static equalByKey(thisSchemaItem: SchemaItem, thatSchemaItemOrKey?: SchemaItem | SchemaItemKey): boolean; + // (undocumented) + readonly fullName: string; + // (undocumented) + readonly key: SchemaItemKey; + // (undocumented) + readonly label: string | undefined; + // (undocumented) + readonly name: string; + static parseFullName(fullName: string): [string, string]; + // (undocumented) + readonly schema: Schema; + // (undocumented) + readonly schemaItemType: SchemaItemType; + // (undocumented) + toJson: { + [value: string]: any; + } +} + +// @public +class SchemaItemDiagnostic extends BaseDiagnostic { + constructor(ecDefinition: TYPE, messageArgs: ARGS); + // (undocumented) + static diagnosticType: DiagnosticType; +} + +// @public +class SchemaItemKey { + constructor(name: string, schema: SchemaKey); + // (undocumented) + protected _schemaKey: SchemaKey; + // (undocumented) + readonly fullName: string; + matches(rhs: SchemaItemKey): boolean; + // (undocumented) + matchesFullName(rhs: string): boolean; + // (undocumented) + readonly name: string; + // (undocumented) + readonly schemaKey: SchemaKey; + // (undocumented) + readonly schemaName: string; +} + +// @public (undocumented) +enum SchemaItemType { + // (undocumented) + Constant = 10, + // (undocumented) + CustomAttributeClass = 3, + // (undocumented) + EntityClass = 0, + // (undocumented) + Enumeration = 5, + // (undocumented) + Format = 13, + // (undocumented) + InvertedUnit = 9, + // (undocumented) + KindOfQuantity = 6, + // (undocumented) + Mixin = 1, + // (undocumented) + Phenomenon = 11, + // (undocumented) + PropertyCategory = 7, + // (undocumented) + RelationshipClass = 4, + // (undocumented) + StructClass = 2, + // (undocumented) + Unit = 8, + // (undocumented) + UnitSystem = 12 +} + +// @public +export function schemaItemTypeToString(value: SchemaItemType): string; + +// @public +class SchemaJsonFileLocater extends SchemaFileLocater, implements ISchemaLocater { + getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise; + protected getSchemaKey(data: string): SchemaKey; + getSchemaSync(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): T | undefined; +} + +// @public +class SchemaKey { + constructor(name: string, version: ECVersion); + // (undocumented) + protected _version: ECVersion; + // (undocumented) + compareByName(rhs: SchemaKey | string | undefined): boolean; + compareByVersion(rhs: SchemaKey): number; + // (undocumented) + matches(rhs: SchemaKey, matchType?: SchemaMatchType): boolean; + // (undocumented) + readonly minorVersion: number; + // (undocumented) + readonly name: string; + // (undocumented) + static parseString(fullName: string): SchemaKey; + // (undocumented) + readonly readVersion: number; + toString(padZeroes?: boolean): string; + // (undocumented) + readonly version: ECVersion; + // (undocumented) + readonly writeVersion: number; +} + +// @public (undocumented) +class SchemaMap extends Array { +} + +// @public +enum SchemaMatchType { + // (undocumented) + Exact = 1, + // (undocumented) + Identical = 0, + // (undocumented) + Latest = 3, + // (undocumented) + LatestReadCompatible = 4, + // (undocumented) + LatestWriteCompatible = 2 +} + +// @public +class SchemaPartVisitorDelegate { + constructor(visitor: ISchemaPartVisitor); + visitSchema(schema: Schema, fullSchema?: boolean): Promise; + visitSchemaPart(schemaPart: AnyECType): Promise; + visitSchemaPartSync(schemaPart: AnyECType): void; + visitSchemaSync(schema: Schema, fullSchema?: boolean): void; +} + +// @public +class SchemaValidationVisitor implements ISchemaPartVisitor { + // (undocumented) + applyClassRules(ecClass: AnyClass, ruleSet: IRuleSet): Promise; + // (undocumented) + applyConstantRules(constant: Constant, ruleSet: IRuleSet): Promise; + // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + applyCustomAttributeContainerRules(container: CustomAttributeContainerProps, ruleSet: IRuleSet): Promise; + // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "CustomAttribute" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + applyCustomAttributeInstanceRules(container: CustomAttributeContainerProps, customAttribute: CustomAttribute, ruleSet: IRuleSet): Promise; + // (undocumented) + applyCustomAttributeRules(customAttribute: CustomAttributeClass, ruleSet: IRuleSet): Promise; + // (undocumented) + applyEntityRules(entityClass: EntityClass, ruleSet: IRuleSet): Promise; + // (undocumented) + applyEnumerationRules(enumeration: Enumeration, ruleSet: IRuleSet): Promise; + // (undocumented) + applyFormatRules(format: Format, ruleSet: IRuleSet): Promise; + // (undocumented) + applyInvertedUnitRules(invertedUnit: InvertedUnit, ruleSet: IRuleSet): Promise; + // (undocumented) + applyKindOfQuantityRules(kindOfQuantity: KindOfQuantity, ruleSet: IRuleSet): Promise; + // (undocumented) + applyMixinRules(mixin: Mixin, ruleSet: IRuleSet): Promise; + // (undocumented) + applyPhenomenonRules(phenomenon: Phenomenon, ruleSet: IRuleSet): Promise; + // (undocumented) + applyPropertyCategoryRules(propertyCategory: PropertyCategory, ruleSet: IRuleSet): Promise; + // (undocumented) + applyPropertyRules(property: AnyProperty, ruleSet: IRuleSet): Promise; + // (undocumented) + applyRelationshipConstraintRules(constraint: RelationshipConstraint, ruleSet: IRuleSet): Promise; + // (undocumented) + applyRelationshipRules(relationship: RelationshipClass, ruleSet: IRuleSet): Promise; + // (undocumented) + applySchemaItemRules(schemaItem: SchemaItem, ruleSet: IRuleSet): Promise; + // (undocumented) + applySchemaRules(schema: Schema, ruleSet: IRuleSet): Promise; + // (undocumented) + applyStructRules(structClass: StructClass, ruleSet: IRuleSet): Promise; + // (undocumented) + applyUnitRules(unit: Unit, ruleSet: IRuleSet): Promise; + // (undocumented) + applyUnitSystemRules(unitSystem: UnitSystem, ruleSet: IRuleSet): Promise; + readonly diagnosticReporters: IDiagnosticReporter[]; + registerReporter(...reporters: IDiagnosticReporter[]): void; + registerRuleSet(ruleSet: IRuleSet): void; + // WARNING: The type "RuleSetArray" needs to be exported by the package (e.g. added to index.ts) + readonly ruleSets: RuleSetArray; + visitClass(ecClass: AnyClass): Promise; + visitConstant(constant: Constant): Promise; + visitCustomAttributeClass(customAttribute: CustomAttributeClass): Promise; + // WARNING: The type "CustomAttributeContainerProps" needs to be exported by the package (e.g. added to index.ts) + visitCustomAttributeContainer(container: CustomAttributeContainerProps): Promise; + visitEntityClass(entity: EntityClass): Promise; + visitEnumeration(enumeration: Enumeration): Promise; + visitFormat(format: Format): Promise; + visitFullSchema(schema: Schema): Promise; + visitInvertedUnit(invertedUnit: InvertedUnit): Promise; + visitKindOfQuantity(koq: KindOfQuantity): Promise; + visitMixin(mixin: Mixin): Promise; + visitPhenomenon(phenomenon: Phenomenon): Promise; + visitProperty(property: AnyProperty): Promise; + visitPropertyCategory(category: PropertyCategory): Promise; + visitRelationshipClass(relationship: RelationshipClass): Promise; + visitRelationshipConstraint(constraint: RelationshipConstraint): Promise; + visitSchemaItem(schemaItem: SchemaItem): Promise; + visitStructClass(struct: StructClass): Promise; + visitUnit(unit: Unit): Promise; + visitUnitSystem(unitSystem: UnitSystem): Promise; +} + +// @public +class SchemaWalker { + constructor(visitor: ISchemaPartVisitor); + traverseSchema(schema: T): Promise; +} + +// @public +class SchemaXmlFileLocater extends SchemaFileLocater, implements ISchemaLocater { + addSchemaReferences(schema: Schema, context?: SchemaContext): Promise; + addSchemaReferencesSync(schema: Schema, context?: SchemaContext): void; + getSchema(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise; + getSchemaKey(data: string): SchemaKey; + getSchemaReferenceKeys(schemaKey: FileSchemaKey): SchemaKey[]; + getSchemaSync(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): T | undefined; + loadSchema(schemaPath: string, context: SchemaContext): Promise; +} + +// @public (undocumented) +enum ScientificType { + // (undocumented) + Normalized = 0, + // (undocumented) + ZeroNormalized = 1 +} + +// @public (undocumented) +export function scientificTypeToString(scientificType: ScientificType): string; + +// @public (undocumented) +enum ShowSignOption { + // (undocumented) + NegativeParentheses = 3, + // (undocumented) + NoSign = 0, + // (undocumented) + OnlyNegative = 1, + // (undocumented) + SignAlways = 2 +} + +// @public (undocumented) +export function showSignOptionToString(showSign: ShowSignOption): string; + +// @public (undocumented) +enum StrengthDirection { + // (undocumented) + Backward = 2, + // (undocumented) + Forward = 1 +} + +// @public (undocumented) +export function strengthDirectionToString(direction: StrengthDirection): string; + +// @public (undocumented) +export function strengthToString(strength: StrengthType): string; + +// @public (undocumented) +enum StrengthType { + // (undocumented) + Embedding = 2, + // (undocumented) + Holding = 1, + // (undocumented) + Referencing = 0 +} + +// @public (undocumented) +class StructArrayProperty extends StructArrayProperty_base { + constructor(ecClass: ECClass, name: string, type: StructClass); +} + +// @public +class StructClass extends ECClass { + constructor(schema: Schema, name: string, modifier?: ECClassModifier); + // WARNING: The type "SchemaItemType.StructClass" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.StructClass; +} + +// @public (undocumented) +class StructProperty extends Property { + constructor(ecClass: ECClass, name: string, type: StructClass); + // (undocumented) + protected _structClass: StructClass; + // WARNING: The type "StructPropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(structPropertyProps: StructPropertyProps): Promise; + // WARNING: The type "StructPropertyProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(structPropertyProps: StructPropertyProps): void; + // (undocumented) + readonly structClass: StructClass; + // (undocumented) + toJson(): any; +} + +// @public +class Unit extends SchemaItem { + constructor(schema: Schema, name: string); + // (undocumented) + protected _definition: string; + // (undocumented) + protected _denominator: number; + // (undocumented) + protected _numerator: number; + // (undocumented) + protected _offset: number; + // (undocumented) + protected _phenomenon?: LazyLoadedPhenomenon; + // (undocumented) + protected _unitSystem?: LazyLoadedUnitSystem; + // (undocumented) + readonly definition: string; + // (undocumented) + readonly denominator: number; + // WARNING: The type "UnitProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserialize(unitProps: UnitProps): Promise; + // WARNING: The type "UnitProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + deserializeSync(unitProps: UnitProps): void; + // (undocumented) + readonly numerator: number; + // (undocumented) + readonly offset: number; + // (undocumented) + readonly phenomenon: LazyLoadedPhenomenon | undefined; + // WARNING: The type "SchemaItemType.Unit" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.Unit; + // (undocumented) + toJson: { + [value: string]: any; + } + // (undocumented) + readonly unitSystem: LazyLoadedUnitSystem | undefined; +} + +// @public (undocumented) +class UnitSystem extends SchemaItem { + constructor(schema: Schema, name: string); + // WARNING: The type "SchemaItemType.UnitSystem" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly schemaItemType: SchemaItemType.UnitSystem; +} + +// WARNING: Unsupported export: AnyEnumerator +// WARNING: Unsupported export: AnyArrayProperty +// WARNING: Unsupported export: AnyEnumerationProperty +// WARNING: Unsupported export: AnyPrimitiveProperty +// WARNING: Unsupported export: AnyProperty +// WARNING: Unsupported export: AnyStructProperty +// WARNING: Unsupported export: DiagnosticCodes +// WARNING: Unsupported export: Diagnostics +// WARNING: Unsupported export: ECRuleSet +// WARNING: Unsupported export: DelayedPromiseWithProps +// WARNING: Unsupported export: DelayedPromiseWithProps +// WARNING: Unsupported export: LazyLoadedSchema +// WARNING: Unsupported export: LazyLoadedSchemaItem +// WARNING: Unsupported export: LazyLoadedECClass +// WARNING: Unsupported export: LazyLoadedEntityClass +// WARNING: Unsupported export: LazyLoadedMixin +// WARNING: Unsupported export: LazyLoadedStructClass +// WARNING: Unsupported export: LazyLoadedCustomAttributeClass +// WARNING: Unsupported export: LazyLoadedRelationshipClass +// WARNING: Unsupported export: LazyLoadedEnumeration +// WARNING: Unsupported export: LazyLoadedKindOfQuantity +// WARNING: Unsupported export: LazyLoadedPropertyCategory +// WARNING: Unsupported export: LazyLoadedRelationshipConstraintClass +// WARNING: Unsupported export: LazyLoadedUnit +// WARNING: Unsupported export: LazyLoadedInvertedUnit +// WARNING: Unsupported export: LazyLoadedConstant +// WARNING: Unsupported export: LazyLoadedPhenomenon +// WARNING: Unsupported export: LazyLoadedUnitSystem +// WARNING: Unsupported export: LazyLoadedFormat +// WARNING: Unsupported export: AnyClass +// WARNING: Unsupported export: AnySchemaItem +// WARNING: Unsupported export: AnyECType +// WARNING: Unsupported export: formatStringRgx +// WARNING: Unsupported export: AnyDiagnostic +// WARNING: Unsupported export: IRule +// WARNING: Unsupported export: BaseRule +// (No @packagedocumentation comment for this package) diff --git a/common/api/geometry-core.api.ts b/common/api/geometry-core.api.ts index beb959a..4edc395 100644 --- a/common/api/geometry-core.api.ts +++ b/common/api/geometry-core.api.ts @@ -1,5924 +1,5950 @@ -// @public -class AbstractNewtonIterator { - protected constructor(stepSizeTolerance?: number, successiveConvergenceTarget?: number, maxIterations?: number); - // (undocumented) - protected _maxIterations: number; - // (undocumented) - protected _numAccepted: number; - // (undocumented) - protected _stepSizeTolerance: number; - // (undocumented) - protected _successiveConvergenceTarget: number; - // (undocumented) - abstract applyCurrentStep(isFinalStep: boolean): boolean; - abstract computeStep(): boolean; - abstract currentStepSize(): number; - // (undocumented) - numIterations: number; - // (undocumented) - runIterations(): boolean; - // (undocumented) - testConvergence(delta: number): boolean; -} - -// WARNING: EQN_EPS has incomplete type information -// WARNING: s_safeDivideFactor has incomplete type information -// WARNING: s_quadricRelTol has incomplete type information -// WARNING: sTestWindow has incomplete type information -// @public -class AnalyticRoots { - // (undocumented) - static appendCubicRoots(c: Float64Array | number[], results: GrowableFloat64Array): void; - // (undocumented) - static appendImplicitLineUnitCircleIntersections(alpha: number, beta: number, gamma: number, cosValues: OptionalGrowableFloat64Array, sinValues: OptionalGrowableFloat64Array, radiansValues: OptionalGrowableFloat64Array, reltol?: number): number; - static appendLinearRoot(c0: number, c1: number, values: GrowableFloat64Array): void; - static appendQuadraticRoots(c: Float64Array | number[], values: GrowableFloat64Array): void; - // (undocumented) - static appendQuarticRoots(c: Float64Array | number[], results: GrowableFloat64Array): void; - // (undocumented) - static cbrt(x: number): number; - static isSmallRatio(x: number, y: number, abstol?: number, reltol?: number): boolean; - static isZero(x: number): boolean; - // (undocumented) - static mostDistantFromMean(data: GrowableFloat64Array | undefined): number; - static safeDivide(values: Float64Array, numerator: number, denominator: number, defaultValue: number | undefined, offset: number): boolean; -} - -// WARNING: piOver4Radians has incomplete type information -// WARNING: piOver2Radians has incomplete type information -// WARNING: piRadians has incomplete type information -// WARNING: pi2Radians has incomplete type information -// WARNING: piOver12Radians has incomplete type information -// @public -class Angle implements BeJSONFunctions { - static adjustDegrees0To360(degrees: number): number; - static adjustDegreesSigned180(degrees: number): number; - static adjustRadians0To2Pi(radians: number): number; - static adjustRadiansMinusPiPlusPi(radians: number): number; - static cleanupTrigValue(value: number, tolerance?: number): number; - // (undocumented) - clone(): Angle; - // (undocumented) - cos(): number; - static create360(): Angle; - static createAtan2(numerator: number, denominator: number): Angle; - static createDegrees(degrees: number): Angle; - static createDegreesAdjustPositive(degrees: number): Angle; - static createDegreesAdjustSigned180(degrees: number): Angle; - static createRadians(radians: number): Angle; - // (undocumented) - readonly degrees: number; - // (undocumented) - static readonly degreesPerRadian: number; - static degreesToRadians(degrees: number): number; - static dotProductsToHalfAngleTrigValues(dotUU: number, dotVV: number, dotUV: number, favorZero?: boolean): TrigValues; - // (undocumented) - freeze(): void; - static fromJSON(json?: AngleProps, defaultValRadians?: number): Angle; - isAlmostEqual(other: Angle): boolean; - isAlmostEqualAllowPeriodShift(other: Angle): boolean; - isAlmostEqualNoPeriodShift(other: Angle): boolean; - static isAlmostEqualRadiansAllowPeriodShift(radiansA: number, radiansB: number): boolean; - static isAlmostEqualRadiansNoPeriodShift(radiansA: number, radiansB: number): boolean; - // (undocumented) - readonly isAlmostZero: boolean; - // (undocumented) - readonly isExactZero: boolean; - readonly isFullCircle: boolean; - // (undocumented) - static isFullCircleRadians(radians: number): boolean; - readonly isHalfCircle: boolean; - static isHalfCircleRadians(radians: number): boolean; - static isPerpendicularDotSet(dotUU: number, dotVV: number, dotUV: number): boolean; - // (undocumented) - readonly radians: number; - static radiansBetweenVectorsXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; - // (undocumented) - static readonly radiansPerDegree: number; - static radiansToDegrees(radians: number): number; - setDegrees(degrees: number): void; - setFrom(other: Angle): void; - setFromJSON(json?: AngleProps, defaultValRadians?: number): void; - setRadians(radians: number): void; - // (undocumented) - sin(): number; - // (undocumented) - tan(): number; - toJSON(): AngleProps; - // (undocumented) - toJSONRadians(): AngleProps; - static trigValuesToHalfAngleTrigValues(rCos2A: number, rSin2A: number): TrigValues; - // (undocumented) - static zero(): Angle; -} - -// @public -class AngleSweep implements BeJSONFunctions { - angleToPositivePeriodicFraction(theta: Angle): number; - angleToSignedPeriodicFraction(theta: Angle): number; - angleToUnboundedFraction(theta: Angle): number; - capLatitudeInPlace(): void; - clone(): AngleSweep; - cloneMinusRadians(radians: number): AngleSweep; - static create360(startRadians?: number): AngleSweep; - static createFullLatitude(): AngleSweep; - static createStartEnd(startAngle: Angle, endAngle: Angle, result?: AngleSweep): AngleSweep; - static createStartEndDegrees(startDegrees?: number, endDegrees?: number, result?: AngleSweep): AngleSweep; - static createStartEndRadians(startRadians?: number, endRadians?: number, result?: AngleSweep): AngleSweep; - static createStartSweep(startAngle: Angle, sweepAngle: Angle, result?: AngleSweep): AngleSweep; - static createStartSweepDegrees(startDegrees?: number, sweepDegrees?: number, result?: AngleSweep): AngleSweep; - static createStartSweepRadians(startRadians?: number, sweepRadians?: number, result?: AngleSweep): AngleSweep; - readonly endAngle: Angle; - readonly endDegrees: number; - readonly endRadians: number; - fractionPeriod(): number; - fractionToAngle(fraction: number): Angle; - fractionToRadians(fraction: number): number; - static fromJSON(json?: AngleSweepProps): AngleSweep; - // (undocumented) - interpolate(fraction: number, other: AngleSweep): AngleSweep; - isAlmostEqual(other: AngleSweep): boolean; - isAlmostEqualAllowPeriodShift(other: AngleSweep): boolean; - isAlmostEqualNoPeriodShift(other: AngleSweep): boolean; - isAngleInSweep(angle: Angle): boolean; - readonly isCCW: boolean; - readonly isFullCircle: boolean; - readonly isFullLatitudeSweep: boolean; - isRadiansInSweep(radians: number): boolean; - radiansArraytoPositivePeriodicFractions(data: GrowableFloat64Array): void; - // (undocumented) - radiansToPositivePeriodicFraction(radians: number): number; - // (undocumented) - radiansToSignedPeriodicFraction(radians: number): number; - reverseInPlace(): void; - setFrom(other: AngleSweep): void; - setFromJSON(json?: any): void; - setStartEndDegrees(startDegrees?: number, endDegrees?: number): void; - setStartEndRadians(startRadians?: number, endRadians?: number): void; - readonly startAngle: Angle; - readonly startDegrees: number; - readonly startRadians: number; - readonly sweepDegrees: number; - readonly sweepRadians: number; - toJSON(): any; -} - -// @public -class AnnotatedLineString3d { - // (undocumented) - curveParam?: GrowableFloat64Array; - uvwParam?: GrowableXYZArray; - // (undocumented) - vectorV?: GrowableXYZArray; - // (undocumented) - vecturU?: GrowableXYZArray; -} - -// WARNING: quadratureGuassCount has incomplete type information -// WARNING: quadratureIntervalAngleDegrees has incomplete type information -// @public -class Arc3d extends CurvePrimitive, implements BeJSONFunctions { - // (undocumented) - allPerpendicularAngles(spacePoint: Point3d, _extend?: boolean, _endpoints?: boolean): number[]; - // (undocumented) - angleToPointAndDerivative(theta: Angle, result?: Ray3d): Ray3d; - announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - // (undocumented) - appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; - readonly center: Point3d; - circularRadius(): number | undefined; - // (undocumented) - clone(): Arc3d; - clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined; - // (undocumented) - cloneTransformed(transform: Transform): CurvePrimitive; - // (undocumented) - closestPoint(spacePoint: Point3d, extend: boolean, result?: CurveLocationDetail): CurveLocationDetail; - computeStrokeCountForOptions(options?: StrokeOptions): number; - // (undocumented) - static create(center: Point3d, vector0: Vector3d, vector90: Vector3d, sweep?: AngleSweep, result?: Arc3d): Arc3d; - static createCircularStartMiddleEnd(pointA: XYAndZ, pointB: XYAndZ, pointC: XYAndZ, result?: Arc3d): Arc3d | LineString3d | undefined; - // (undocumented) - static createRefs(center: Point3d, matrix: Matrix3d, sweep: AngleSweep, result?: Arc3d): Arc3d; - // (undocumented) - static createScaledXYColumns(center: Point3d, matrix: Matrix3d, radius0: number, radius90: number, sweep: AngleSweep, result?: Arc3d): Arc3d; - // (undocumented) - static createUnitCircle(): Arc3d; - // (undocumented) - static createXY(center: Point3d, radius: number, sweep?: AngleSweep): Arc3d; - // (undocumented) - static createXYEllipse(center: Point3d, radiusA: number, radiusB: number, sweep?: AngleSweep): Arc3d; - curveLength(): number; - curveLengthBetweenFractions(fraction0: number, fraction1: number): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(result?: Point3d): Point3d; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - // (undocumented) - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - getFractionToDistanceScale(): number | undefined; - // (undocumented) - isAlmostEqual(otherGeometry: GeometryQuery): boolean; - // (undocumented) - readonly isCircular: boolean; - readonly isExtensibleFractionSpace: boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - readonly matrix: Matrix3d; - maxVectorLength(): number; - moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: false, result?: CurveLocationDetail): CurveLocationDetail; - quickEccentricity(): number; - quickLength(): number; - // (undocumented) - radiansToPointAndDerivative(radians: number, result?: Ray3d): Ray3d; - // (undocumented) - reverseInPlace(): void; - // (undocumented) - set(center: Point3d, matrix: Matrix3d, sweep: AngleSweep | undefined): void; - // (undocumented) - setFrom(other: Arc3d): void; - // (undocumented) - setFromJSON(json?: any): void; - // (undocumented) - setRefs(center: Point3d, matrix: Matrix3d, sweep: AngleSweep): void; - // (undocumented) - setVector0Vector90(vector0: Vector3d, vector90: Vector3d): void; - // (undocumented) - startPoint(result?: Point3d): Point3d; - // (undocumented) - sweep: AngleSweep; - toJSON(): any; - // (undocumented) - toScaledMatrix3d: { - axes: Matrix3d; - center: Point3d; - r0: number; - r90: number; - sweep: AngleSweep; - } - toTransformedPoint4d: { - center: Point4d; - sweep: AngleSweep; - vector0: Point4d; - vector90: Point4d; - } - toTransformedVectors: { - center: Point3d; - sweep: AngleSweep; - vector0: Vector3d; - vector90: Vector3d; - } - toVectors: { - center: Point3d; - sweep: AngleSweep; - vector0: Vector3d; - vector90: Vector3d; - } - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; - readonly vector0: Vector3d; - readonly vector90: Vector3d; -} - -// @public -class AuxChannel { - constructor(data: AuxChannelData[], dataType: AuxChannelDataType, name?: string, inputName?: string); - // (undocumented) - clone(): AuxChannel; - data: AuxChannelData[]; - // (undocumented) - dataType: AuxChannelDataType; - readonly entriesPerValue: number; - inputName?: string; - // (undocumented) - isAlmostEqual(other: AuxChannel, tol?: number): boolean; - readonly isScalar: boolean; - name?: string; - readonly scalarRange: Range1d | undefined; - readonly valueCount: number; -} - -// @public -class AuxChannelData { - constructor(input: number, values: number[]); - // (undocumented) - clone(): AuxChannelData; - // (undocumented) - copyValues(other: AuxChannelData, thisIndex: number, otherIndex: number, blockSize: number): void; - input: number; - // (undocumented) - isAlmostEqual(other: AuxChannelData, tol?: number): boolean; - values: number[]; -} - -// @public -enum AuxChannelDataType { - Distance = 1, - Normal = 3, - Scalar = 0, - Vector = 2 -} - -// @public (undocumented) -enum AxisIndex { - // (undocumented) - X = 0, - // (undocumented) - Y = 1, - // (undocumented) - Z = 2 -} - -// @public -enum AxisOrder { - XYZ = 0, - XZY = 4, - YXZ = 5, - YZX = 1, - ZXY = 2, - ZYX = 6 -} - -// @public -enum AxisScaleSelect { - LongestRangeDirection = 1, - NonUniformRangeContainment = 2, - Unit = 0 -} - -// @public -class BagOfCurves extends CurveCollection { - constructor(); - // (undocumented) - protected _children: AnyCurve[]; - // (undocumented) - announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; - // (undocumented) - readonly children: AnyCurve[]; - // (undocumented) - cloneEmptyPeer(): BagOfCurves; - // (undocumented) - cloneStroked(options?: StrokeOptions): BagOfCurves; - // (undocumented) - static create(...data: AnyCurve[]): BagOfCurves; - // (undocumented) - dgnBoundaryType(): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - getChild(i: number): AnyCurve | undefined; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - // (undocumented) - tryAddChild(child: AnyCurve): boolean; -} - -// @public (undocumented) -interface BeJSONFunctions { - setFromJSON(json: any): void; - // (undocumented) - toJSON(): any; -} - -// @public -class Bezier1dNd { - constructor(blockSize: number, polygon: Float64Array); - clonePolygon(result?: Float64Array): Float64Array; - static create(data: Point2d[] | Point3d[] | Point4d[]): Bezier1dNd | undefined; - evaluate(s: number, buffer?: Float64Array): Float64Array; - evaluateDerivative(s: number, buffer?: Float64Array): Float64Array; - fractionToParentFraction(fraction: number): number; - getPolygonPoint(i: number, buffer?: Float64Array): Float64Array | undefined; - interpolatePoleInPlace(poleIndexA: number, fraction: number, poleIndexB: number): void; - interval?: Segment1d; - isAlmostEqual(other: any): boolean; - loadSpanPoles(data: Float64Array, spanIndex: number): void; - loadSpanPolesWithWeight(data: Float64Array, dataDimension: number, spanIndex: number, weight: number): void; - readonly order: number; - readonly packedData: Float64Array; - reverseInPlace(): void; - static saturate1dInPlace(coffs: Float64Array, knots: KnotVector, spanIndex: number): boolean; - // (undocumented) - saturateInPlace(knots: KnotVector, spanIndex: number): boolean; - setInterval(a: number, b: number): void; - setPolygonPoint(i: number, buffer: Float64Array): void; - subdivideInPlaceKeepLeft(fraction: number): boolean; - subdivideInPlaceKeepRight(fraction: number): boolean; - subdivideToIntervalInPlace(fraction0: number, fraction1: number): boolean; - unpackToJsonArrays(): any[]; -} - -// @public -class BezierCoffs { - constructor(data: number | Float64Array | number[]); - addInPlace(a: number): void; - protected allocateToOrder(order: number): void; - abstract basisFunctions(u: number, result?: Float64Array): Float64Array; - // (undocumented) - abstract clone(): BezierCoffs; - coffs: Float64Array; - copyFrom(other: BezierCoffs): void; - createPeer(): BezierCoffs; - abstract evaluate(u: number): number; - filter01(roots: number[] | undefined, restrictTo01?: boolean): number[] | undefined; - static maxAbsDiff(dataA: BezierCoffs, dataB: BezierCoffs): number | undefined; - readonly order: number; - roots(targetValue: number, _restrictTo01: boolean): number[] | undefined; - scaleInPlace(scale: number): void; - subdivide(u: number, left: BezierCoffs, right: BezierCoffs): boolean; - abstract sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; - abstract sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; - // (undocumented) - zero(): void; -} - -// @public -class BezierCurve3d extends BezierCurveBase { - // (undocumented) - clone(): BezierCurve3d; - // (undocumented) - clonePartialCurve(f0: number, f1: number): BezierCurve3d | undefined; - cloneTransformed(transform: Transform): BezierCurve3d; - computeStrokeCountForOptions(options?: StrokeOptions): number; - copyPointsAsLineString(): LineString3d; - static create(data: Point3d[] | Point2d[]): BezierCurve3d | undefined; - static createOrder(order: number): BezierCurve3d; - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - getPolePoint3d(i: number, result?: Point3d): Point3d | undefined; - getPolePoint4d(i: number, result?: Point4d): Point4d | undefined; - // (undocumented) - isAlmostEqual(other: any): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - loadSpanPoles(data: Float64Array, spanIndex: number): void; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class BezierCurve3dH extends BezierCurveBase { - // (undocumented) - clone(): BezierCurve3dH; - cloneTransformed(transform: Transform): BezierCurve3dH; - computeStrokeCountForOptions(options?: StrokeOptions): number; - static create(data: Point3d[] | Point4d[] | Point2d[]): BezierCurve3dH | undefined; - static createOrder(order: number): BezierCurve3dH; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPoint4d(fraction: number, result?: Point4d): Point4d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - getPolePoint3d(i: number, result?: Point3d): Point3d | undefined; - getPolePoint4d(i: number, result?: Point4d): Point4d | undefined; - // (undocumented) - isAlmostEqual(other: any): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - isUnitWeight(tolerance?: number): boolean; - loadSpan3dPolesWithWeight(data: Float64Array, spanIndex: number, weight: number): void; - loadSpan4dPoles(data: Float64Array, spanIndex: number): void; - poleProductsXYZW(products: Float64Array, ax: number, ay: number, az: number, aw: number): void; - tryMultiplyMatrix4dInPlace(matrix: Matrix4d): void; - tryTransformInPlace(transform: Transform): boolean; - updateClosestPointByTruePerpendicular(spacePoint: Point3d, detail: CurveLocationDetail): boolean; -} - -// @public -class BezierCurveBase extends CurvePrimitive { - protected constructor(blockSize: number, data: Float64Array); - // (undocumented) - protected _polygon: Bezier1dNd; - // (undocumented) - protected _workBezier?: UnivariateBezier; - // (undocumented) - protected _workCoffsA?: Float64Array; - // (undocumented) - protected _workCoffsB?: Float64Array; - protected _workData0: Float64Array; - // (undocumented) - protected _workData1: Float64Array; - protected _workPoint0: Point3d; - // (undocumented) - protected _workPoint1: Point3d; - protected allocateAndZeroBezierWorkData(primaryBezierOrder: number, orderA: number, orderB: number): void; - abstract computeStrokeCountForOptions(options?: StrokeOptions): number; - copyPolesAsJsonArray(): any[]; - // (undocumented) - readonly degree: number; - emitStrokableParts(handler: IStrokeHandler, _options?: StrokeOptions): void; - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(): Point3d; - abstract extendRange(rangeToExtend: Range3d, transform?: Transform): void; - // (undocumented) - fractionToParentFraction(fraction: number): number; - abstract getPolePoint3d(i: number, point?: Point3d): Point3d | undefined; - abstract getPolePoint4d(i: number, point?: Point4d): Point4d | undefined; - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - readonly numPoles: number; - // (undocumented) - readonly order: number; - // (undocumented) - polygonLength(): number; - // (undocumented) - quickLength(): number; - reverseInPlace(): void; - saturateInPlace(knotVector: KnotVector, spanIndex: number): boolean; - // (undocumented) - setInterval(a: number, b: number): void; - // (undocumented) - startPoint(): Point3d; -} - -// @public -class BezierPolynomialAlgebra { - static accumulate(dataA: Float64Array, orderA: number, resultB: Float64Array): void; - static accumulateProduct(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale?: number): void; - static accumulateProductWithDifferences(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale?: number): void; - static accumulateScaledShiftedComponentTimesComponentDelta(product: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, scale: number, indexA: number, constA: number, indexB: number): void; - static componentDifference(difference: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, index: number): void; - static scaledComponentSum(sum: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, indexA: number, constA: number, indexB: number, constB: number): void; - static univariateDifference(data: Float64Array, difference: Float64Array): void; -} - -// @public (undocumented) -class Box extends SolidPrimitive { - protected constructor(map: Transform, baseX: number, baseY: number, topX: number, topY: number, capped: boolean); - // (undocumented) - clone(): Box; - // (undocumented) - cloneTransformed(transform: Transform): Box | undefined; - // (undocumented) - constantVSection(zFraction: number): CurveCollection; - // (undocumented) - static createDgnBox(baseOrigin: Point3d, vectorX: Vector3d, vectorY: Vector3d, topOrigin: Point3d, baseX: number, baseY: number, topX: number, topY: number, capped: boolean): Box | undefined; - // (undocumented) - static createDgnBoxWithAxes(baseOrigin: Point3d, axes: Matrix3d, topOrigin: Point3d, baseX: number, baseY: number, topX: number, topY: number, capped: boolean): Box | undefined; - // (undocumented) - static createRange(range: Range3d, capped: boolean): Box | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - // (undocumented) - getBaseOrigin(): Point3d; - // (undocumented) - getBaseX(): number; - // (undocumented) - getBaseY(): number; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - getCorners(): Point3d[]; - // (undocumented) - getTopOrigin(): Point3d; - // (undocumented) - getTopX(): number; - // (undocumented) - getTopY(): number; - // (undocumented) - getVectorX(): Vector3d; - // (undocumented) - getVectorY(): Vector3d; - // (undocumented) - getVectorZ(): Vector3d; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - strokeConstantVSection(zFraction: number): LineString3d; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// WARNING: primaryCapId has incomplete type information -// @public (undocumented) -class BoxTopology { - // (undocumented) - static readonly axisEdgeVertex: number[][][]; - // (undocumented) - static readonly cornerIndexCCW: number[][]; - // (undocumented) - static readonly faceDirections: number[][][]; - // (undocumented) - static readonly faceId: number[][]; - // (undocumented) - static readonly partnerFace: number[][]; - static readonly points: Point3d[]; -} - -// @public -class BSpline1dNd { - protected constructor(numPoles: number, poleLength: number, order: number, knots: KnotVector); - // (undocumented) - basisBuffer: Float64Array; - // (undocumented) - basisBuffer1: Float64Array; - // (undocumented) - basisBuffer2: Float64Array; - // (undocumented) - static create(numPoles: number, poleLength: number, order: number, knots: KnotVector): BSpline1dNd | undefined; - // (undocumented) - readonly degree: number; - // (undocumented) - evaluateBasisFunctionsInSpan(spanIndex: number, spanFraction: number, f: Float64Array, df?: Float64Array, ddf?: Float64Array): void; - // (undocumented) - evaluateBuffersAtKnot(u: number, numDerivative?: number): void; - // (undocumented) - evaluateBuffersInSpan(spanIndex: number, spanFraction: number): void; - // (undocumented) - evaluateBuffersInSpan1(spanIndex: number, spanFraction: number): void; - // (undocumented) - getPoint3dPole(i: number, result?: Point3d): Point3d | undefined; - // (undocumented) - knots: KnotVector; - // (undocumented) - readonly numPoles: number; - // (undocumented) - readonly numSpan: number; - // (undocumented) - readonly order: number; - // (undocumented) - packedData: Float64Array; - // (undocumented) - poleBuffer: Float64Array; - // (undocumented) - poleBuffer1: Float64Array; - // (undocumented) - poleBuffer2: Float64Array; - // (undocumented) - poleLength: number; - // (undocumented) - reverseInPlace(): void; - // (undocumented) - spanFractionToKnot(span: number, localFraction: number): number; - sumPoleBuffer1ForSpan(spanIndex: number): void; - sumPoleBuffer2ForSpan(spanIndex: number): void; - sumPoleBufferForSpan(spanIndex: number): void; - testCloseablePolygon(mode?: BSplineWrapMode): boolean; -} - -// @public -class BSpline2dNd extends GeometryQuery { - protected constructor(numPolesU: number, numPolesV: number, poleLength: number, knotsU: KnotVector, knotsV: KnotVector); - // (undocumented) - protected _basisBuffer1UV: Float64Array[]; - // (undocumented) - protected _basisBufferUV: Float64Array[]; - // (undocumented) - protected _poleBuffer: Float64Array; - // (undocumented) - protected _poleBuffer1UV: Float64Array[]; - // (undocumented) - coffs: Float64Array; - // (undocumented) - degreeUV(select: UVSelect): number; - // (undocumented) - evaluateBuffersAtKnot(u: number, v: number, numDerivative?: number): void; - extendRangeXYZ(rangeToExtend: Range3d, transform?: Transform): void; - extendRangeXYZH(rangeToExtend: Range3d, transform?: Transform): void; - abstract fractionToPointAndDerivatives(_fractionU: number, _fractionV: number, _result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; - fractionToRigidFrame(fractionU: number, fractionV: number, result?: Transform): Transform | undefined; - // (undocumented) - getPoint3dPole(i: number, j: number, result?: Point3d): Point3d | undefined; - // (undocumented) - getPoint3dPoleXYZW(i: number, j: number, result?: Point3d): Point3d | undefined; - isClosable(select: UVSelect): boolean; - // (undocumented) - knots: KnotVector[]; - // (undocumented) - numberToUVSelect(value: number): UVSelect; - // (undocumented) - numPolesTotal(): number; - // (undocumented) - numPolesUV(select: UVSelect): number; - // (undocumented) - numSpanUV(select: UVSelect): number; - // (undocumented) - orderUV(select: UVSelect): number; - // (undocumented) - poleDimension: number; - // (undocumented) - poleStepUV(select: UVSelect): number; - reverseInPlace(select: UVSelect): void; - setWrappable(select: UVSelect, value: BSplineWrapMode): void; - // (undocumented) - spanFractionsToBasisFunctions(select: UVSelect, spanIndex: number, spanFraction: number, f: Float64Array, df?: Float64Array): void; - spanFractionToKnot(select: UVSelect, span: number, localFraction: number): number; - sumpoleBufferDerivativesForSpan(spanIndexU: number, spanIndexV: number): void; - sumPoleBufferForSpan(spanIndexU: number, spanIndexV: number): void; - // (undocumented) - static validOrderAndPoleCounts(orderU: number, numPolesU: number, orderV: number, numPolesV: number, numUV: number): boolean; -} - -// @public -class BSplineCurve3d extends BSplineCurve3dBase { - // (undocumented) - clone(): BSplineCurve3d; - // (undocumented) - cloneTransformed(transform: Transform): BSplineCurve3d; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; - computeStrokeCountForOptions(options?: StrokeOptions): number; - copyKnots(includeExtraEndKnot: boolean): number[]; - copyPoints(): any[]; - copyPointsFloat64Array(): Float64Array; - static create(poleArray: Float64Array | Point3d[], knotArray: Float64Array | number[], order: number): BSplineCurve3d | undefined; - static createUniformKnots(poles: Point3d[] | Float64Array, order: number): BSplineCurve3d | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; - // (undocumented) - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - evaluatePointAndTangentInSpan(spanIndex: number, spanFraction: number): Ray3d; - evaluatePointInSpan(spanIndex: number, spanFraction: number): Point3d; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - // (undocumented) - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - // (undocumented) - getPolePoint3d(poleIndex: number, result?: Point3d): Point3d | undefined; - // (undocumented) - getPolePoint4d(poleIndex: number, result?: Point4d): Point4d | undefined; - getSaturatedBezierSpan3d(spanIndex: number, result?: BezierCurveBase): BezierCurveBase | undefined; - getSaturatedBezierSpan3dH(spanIndex: number, result?: BezierCurveBase): BezierCurve3dH | undefined; - getSaturatedBezierSpan3dOr3dH(spanIndex: number, prefer3dH: boolean, result?: BezierCurveBase): BezierCurveBase | undefined; - // (undocumented) - isAlmostEqual(other: any): boolean; - readonly isClosable: BSplineWrapMode; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - knotToPoint(u: number, result?: Point3d): Point3d; - knotToPointAnd2Derivatives(u: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - knotToPointAndDerivative(u: number, result?: Ray3d): Ray3d; - // (undocumented) - quickLength(): number; - setWrappable(value: BSplineWrapMode): void; - // (undocumented) - spanFractionToKnot(span: number, localFraction: number): number; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class BSplineCurve3dBase extends CurvePrimitive { - protected constructor(poleDimension: number, numPoles: number, order: number, knots: KnotVector); - // (undocumented) - protected _bcurve: BSpline1dNd; - appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; - closestPoint(spacePoint: Point3d, _extend: boolean): CurveLocationDetail | undefined; - collectBezierSpans(prefer3dH: boolean): BezierCurveBase[]; - copyKnots(includeExtraEndKnot: boolean): number[]; - // (undocumented) - readonly degree: number; - endPoint(): Point3d; - abstract evaluatePointAndTangentInSpan(spanIndex: number, spanFraction: number, result?: Ray3d): Ray3d; - abstract evaluatePointInSpan(spanIndex: number, spanFraction: number, result?: Point3d): Point3d; - // (undocumented) - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - abstract getPolePoint3d(poleIndex: number, result?: Point3d): Point3d | undefined; - abstract getPolePoint4d(poleIndex: number, result?: Point4d): Point4d | undefined; - abstract getSaturatedBezierSpan3dOr3dH(spanIndex: number, prefer3dH: boolean, result?: BezierCurveBase): BezierCurveBase | undefined; - abstract knotToPoint(knot: number, result?: Point3d): Point3d; - abstract knotToPointAnd2Derivatives(knot: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - abstract knotToPointAndDerivative(knot: number, result?: Ray3d): Ray3d; - // (undocumented) - readonly numPoles: number; - // (undocumented) - readonly numSpan: number; - // (undocumented) - readonly order: number; - poleIndexToDataIndex(poleIndex: number): number | undefined; - reverseInPlace(): void; - setWrappable(value: BSplineWrapMode): void; - startPoint(): Point3d; -} - -// @public -class BSplineCurve3dH extends BSplineCurve3dBase { - // (undocumented) - clone(): BSplineCurve3dH; - // (undocumented) - cloneTransformed(transform: Transform): BSplineCurve3dH; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; - computeStrokeCountForOptions(options?: StrokeOptions): number; - copyPoints(): any[]; - copyPointsFloat64Array(): Float64Array; - static create(controlPoints: Float64Array | Point4d[] | Point3d[], knotArray: Float64Array | number[], order: number): BSplineCurve3dH | undefined; - static createUniformKnots(controlPoints: Point3d[] | Point4d[] | Float64Array, order: number): BSplineCurve3dH | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; - // (undocumented) - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - evaluatePointAndTangentInSpan(spanIndex: number, spanFraction: number, result?: Ray3d): Ray3d; - evaluatePointInSpan(spanIndex: number, spanFraction: number, result?: Point3d): Point3d; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - // (undocumented) - getPolePoint3d(poleIndex: number, result?: Point3d): Point3d | undefined; - // (undocumented) - getPolePoint4d(poleIndex: number, result?: Point4d): Point4d | undefined; - getSaturatedBezierSpan3dH(spanIndex: number, result?: BezierCurveBase): BezierCurveBase | undefined; - getSaturatedBezierSpan3dOr3dH(spanIndex: number, _prefer3dH: boolean, result?: BezierCurveBase): BezierCurveBase | undefined; - // (undocumented) - isAlmostEqual(other: any): boolean; - readonly isClosable: boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - knotToPoint(u: number, result?: Point3d): Point3d; - knotToPointAnd2Derivatives(u: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - knotToPointAndDerivative(u: number, result?: Ray3d): Ray3d; - // (undocumented) - quickLength(): number; - // (undocumented) - spanFractionToKnot(span: number, localFraction: number): number; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class BSplineSurface3d extends BSpline2dNd, implements BSplineSurface3dQuery { - // (undocumented) - clone(): BSplineSurface3d; - cloneTransformed(transform: Transform): BSplineSurface3d; - copyKnots(select: UVSelect, includeExtraEndKnot: boolean): number[]; - copyPointsFloat64Array(): Float64Array; - static create(controlPointArray: Point3d[] | Float64Array, numPolesU: number, orderU: number, knotArrayU: number[] | Float64Array | undefined, numPolesV: number, orderV: number, knotArrayV: number[] | Float64Array | undefined): BSplineSurface3d | undefined; - static createGrid(points: number[][][], orderU: number, knotArrayU: number[] | Float64Array | undefined, orderV: number, knotArrayV: number[] | Float64Array | undefined): BSplineSurface3d | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - fractionToPoint(fractionU: number, fractionV: number): Point3d; - fractionToPointAndDerivatives(fractionU: number, fractionV: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - getPointArray(flatArray?: boolean): any[]; - getPointGridJSON(): PackedPointGrid; - // (undocumented) - getPole(i: number, j: number, result?: Point3d): Point3d | undefined; - // (undocumented) - isAlmostEqual(other: any): boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - knotToPoint(u: number, v: number): Point3d; - knotToPointAndDerivatives(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class BSplineSurface3dH extends BSpline2dNd, implements BSplineSurface3dQuery { - // (undocumented) - clone(): BSplineSurface3dH; - // (undocumented) - cloneTransformed(transform: Transform): BSplineSurface3dH; - copyKnots(select: UVSelect, includeExtraEndKnot: boolean): number[]; - copyPoints4d(): Point4d[]; - copyPointsAndWeights(points: Point3d[], weights: number[], formatter?: (x: number, y: number, z: number) => any): void; - static create(controlPointArray: Point3d[], weightArray: number[], numPolesU: number, orderU: number, knotArrayU: number[] | undefined, numPolesV: number, orderV: number, knotArrayV: number[] | undefined): BSplineSurface3dH | undefined; - static createGrid(xyzwGrid: number[][][], weightStyle: WeightStyle, orderU: number, knotArrayU: number[], orderV: number, knotArrayV: number[]): BSplineSurface3dH | undefined; - dispatchToGeometryHandler(handler: GeometryHandler): any; - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - fractionToPoint(fractionU: number, fractionV: number, result?: Point3d): Point3d; - // (undocumented) - fractionToPoint4d(fractionU: number, fractionV: number): Point4d; - fractionToPointAndDerivatives(fractionU: number, fractionV: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - getPointGridJSON(): PackedPointGrid; - // (undocumented) - getPole(i: number, j: number, result?: Point3d): Point3d | undefined; - // (undocumented) - isAlmostEqual(other: any): boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - knotToPoint(knotU: number, knotV: number, result?: Point3d): Point3d; - knotToPoint4d(u: number, v: number): Point4d; - knotToPointAndDerivatives(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -interface BSplineSurface3dQuery { - // (undocumented) - clone(): BSplineSurface3dQuery; - // (undocumented) - cloneTransformed(transform: Transform): BSplineSurface3dQuery; - degreeUV(select: UVSelect): number; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - // (undocumented) - fractionToPoint(uFractioin: number, vFraction: number): Point3d; - // (undocumented) - fractionToRigidFrame(uFraction: number, vFraction: number): Transform | undefined; - getPointGridJSON(): PackedPointGrid; - // (undocumented) - isAlmostEqual(other: any): boolean; - // (undocumented) - isClosable(select: UVSelect): boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - knotToPoint(uKnot: number, vKnot: number): Point3d; - numberToUVSelect(value: number): UVSelect; - // (undocumented) - numPolesTotal(): number; - numPolesUV(select: UVSelect): number; - numSpanUV(select: UVSelect): number; - orderUV(select: UVSelect): number; - poleStepUV(select: UVSelect): number; - // (undocumented) - reverseInPlace(select: UVSelect): void; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -enum BSplineWrapMode { - None = 0, - OpenByAddingControlPoints = 1, - OpenByRemovingKnots = 2 -} - -// @public -enum ClipMask { - // (undocumented) - All = 63, - // (undocumented) - None = 0, - // (undocumented) - XAndY = 15, - // (undocumented) - XHigh = 2, - // (undocumented) - XLow = 1, - // (undocumented) - YHigh = 8, - // (undocumented) - YLow = 4, - // (undocumented) - ZHigh = 32, - // (undocumented) - ZLow = 16 -} - -// @public -interface Clipper { - // (undocumented) - announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: AnnounceNumberNumber): boolean; - // (undocumented) - isPointOnOrInside(point: Point3d, tolerance?: number): boolean; -} - -// @public -class ClipPlane implements Clipper { - // (undocumented) - announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; - // (undocumented) - appendIntersectionRadians(arc: Arc3d, intersectionRadians: GrowableFloat64Array): void; - clone(): ClipPlane; - cloneNegated(): ClipPlane; - // (undocumented) - convexPolygonClipInPlace(xyz: Point3d[], work: Point3d[]): void; - // (undocumented) - convexPolygonSplitInsideOutside(xyz: Point3d[], xyzIn: Point3d[], xyzOut: Point3d[], altitudeRange: Range1d): void; - // (undocumented) - static createEdgeAndUpVector(point0: Point3d, point1: Point3d, upVector: Vector3d, tiltAngle: Angle, result?: ClipPlane): ClipPlane | undefined; - // (undocumented) - static createEdgeXY(point0: Point3d, point1: Point3d, result?: ClipPlane): ClipPlane | undefined; - static createNormalAndDistance(normal: Vector3d, distance: number, invisible?: boolean, interior?: boolean, result?: ClipPlane): ClipPlane | undefined; - static createNormalAndPoint(normal: Vector3d, point: Point3d, invisible?: boolean, interior?: boolean, result?: ClipPlane): ClipPlane | undefined; - static createNormalAndPointXYZXYZ(normalX: number, normalY: number, normalZ: number, originX: number, originY: number, originZ: number, invisible?: boolean, interior?: boolean): ClipPlane | undefined; - static createPlane(plane: Plane3dByOriginAndUnitNormal, invisible?: boolean, interior?: boolean, result?: ClipPlane): ClipPlane; - // (undocumented) - readonly distance: number; - // (undocumented) - dotProductPlaneNormalPoint(point: Point3d): number; - // (undocumented) - dotProductVector(vector: Vector3d): number; - // (undocumented) - evaluatePoint(point: Point3d): number; - // (undocumented) - static fractionTol: number; - // (undocumented) - static fromJSON(json: any, result?: ClipPlane): ClipPlane | undefined; - getBoundedSegmentSimpleIntersection(pointA: Point3d, pointB: Point3d): number | undefined; - // (undocumented) - getPlane3d(): Plane3dByOriginAndUnitNormal; - // (undocumented) - getPlane4d(): Point4d; - // (undocumented) - readonly interior: boolean; - // (undocumented) - readonly invisible: boolean; - // (undocumented) - readonly inwardNormalRef: Vector3d; - // (undocumented) - isAlmostEqual(other: ClipPlane): boolean; - // (undocumented) - isPointInside(point: Point3d, tolerance?: number): boolean; - // (undocumented) - isPointOn(point: Point3d, tolerance?: number): boolean; - // (undocumented) - isPointOnOrInside(point: Point3d, tolerance?: number): boolean; - // (undocumented) - multiplyPlaneByMatrix(matrix: Matrix4d): void; - negateInPlace(): void; - offsetDistance(offset: number): void; - // (undocumented) - polygonCrossings(xyz: Point3d[], crossings: Point3d[]): void; - // (undocumented) - setFlags(invisible: boolean, interior: boolean): void; - // (undocumented) - setInvisible(invisible: boolean): void; - // (undocumented) - setPlane4d(plane: Point4d): void; - toJSON(): any; - // (undocumented) - transformInPlace(transform: Transform): boolean; -} - -// @public -enum ClipPlaneContainment { - // (undocumented) - Ambiguous = 2, - // (undocumented) - StronglyInside = 1, - // (undocumented) - StronglyOutside = 3 -} - -// @public -class ClipPrimitive { - protected constructor(planeSet?: UnionOfConvexClipPlaneSets | undefined, isInvisible?: boolean); - // (undocumented) - protected _clipPlanes?: UnionOfConvexClipPlaneSets; - // (undocumented) - protected _invisible: boolean; - // (undocumented) - protected _maskPlanes?: UnionOfConvexClipPlaneSets; - static addOutsideEdgeSetToParams(x0: number, y0: number, x1: number, y1: number, pParams: PlaneSetParamsCache, isInvisible?: boolean): void; - static addShapeToParams(shape: Point3d[], pFlags: number[], pParams: PlaneSetParamsCache): void; - classifyPointContainment(points: Point3d[], ignoreMasks: boolean): ClipPlaneContainment; - // (undocumented) - containsZClip(): boolean; - // (undocumented) - abstract fetchClipPlanesRef(): UnionOfConvexClipPlaneSets | undefined; - // (undocumented) - abstract fetchMaskPlanesRef(): UnionOfConvexClipPlaneSets | undefined; - abstract getRange(returnMaskRange: boolean, transform: Transform, result?: Range3d): Range3d | undefined; - // (undocumented) - readonly invisible: boolean; - // (undocumented) - static isLimitEdge(limitValue: number, point0: Point3d, point1: Point3d): boolean; - // (undocumented) - abstract multiplyPlanesTimesMatrix(matrix: Matrix4d): boolean; - setInvisible(invisible: boolean): void; - // (undocumented) - abstract toJSON(): any; - transformInPlace(transform: Transform): boolean; -} - -// @public -class ClipShape extends ClipPrimitive { - protected constructor(polygon?: Point3d[], zLow?: number, zHigh?: number, transform?: Transform, isMask?: boolean, invisible?: boolean); - // (undocumented) - protected _bCurve: BSplineCurve3d | undefined; - // (undocumented) - protected _isMask: boolean; - // (undocumented) - protected _polygon: Point3d[]; - // (undocumented) - protected _transformFromClip: Transform | undefined; - // (undocumented) - protected _transformToClip: Transform | undefined; - // (undocumented) - protected _transformValid: boolean; - // (undocumented) - protected _zHigh: number | undefined; - // (undocumented) - protected _zHighValid: boolean; - // (undocumented) - protected _zLow: number | undefined; - // (undocumented) - protected _zLowValid: boolean; - arePlanesDefined(): boolean; - readonly bCurve: BSplineCurve3d | undefined; - clone(result?: ClipShape): ClipShape; - static createBlock(extremities: Range3d, clipMask: ClipMask, isMask?: boolean, invisible?: boolean, transform?: Transform, result?: ClipShape): ClipShape; - static createEmpty(isMask?: boolean, invisible?: boolean, transform?: Transform, result?: ClipShape): ClipShape; - static createFrom(other: ClipShape, result?: ClipShape): ClipShape; - static createShape(polygon?: Point3d[], zLow?: number, zHigh?: number, transform?: Transform, isMask?: boolean, invisible?: boolean, result?: ClipShape): ClipShape | undefined; - fetchClipPlanesRef(): UnionOfConvexClipPlaneSets; - fetchMaskPlanesRef(): UnionOfConvexClipPlaneSets | undefined; - // (undocumented) - static fromJSON(json: any, result?: ClipShape): ClipShape | undefined; - getRange(returnMaskRange?: boolean, transform?: Transform, result?: Range3d): Range3d | undefined; - initSecondaryProps(isMask: boolean, zLow?: number, zHigh?: number, transform?: Transform): void; - readonly invisible: boolean; - readonly isMask: boolean; - readonly isValidPolygon: boolean; - // (undocumented) - readonly isXYPolygon: boolean; - // (undocumented) - multiplyPlanesTimesMatrix(matrix: Matrix4d): boolean; - performTransformFromClip(point: Point3d): void; - performTransformToClip(point: Point3d): void; - pointInside(point: Point3d, onTolerance?: number): boolean; - readonly polygon: Point3d[]; - setPolygon(polygon: Point3d[]): void; - // (undocumented) - toJSON(): any; - readonly transformFromClip: Transform | undefined; - // (undocumented) - transformInPlace(transform: Transform): boolean; - readonly transformToClip: Transform | undefined; - readonly transformValid: boolean; - readonly zHigh: number | undefined; - readonly zHighValid: boolean; - readonly zLow: number | undefined; - readonly zLowValid: boolean; -} - -// @public -enum ClipStatus { - // (undocumented) - ClipRequired = 0, - // (undocumented) - TrivialAccept = 2, - // (undocumented) - TrivialReject = 1 -} - -// @public -class ClipUtilities { - static announceNNC(intervals: Range1d[], cp: CurvePrimitive, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - static clipPolygonToClipShape(polygon: Point3d[], clipShape: ClipShape): Point3d[][]; - // (undocumented) - static collectClippedCurves(curve: CurvePrimitive, clipper: Clipper): CurvePrimitive[]; - static pointSetSingleClipStatus(points: GrowableXYZArray, planeSet: UnionOfConvexClipPlaneSets, tolerance: number): ClipStatus; - // (undocumented) - static selectIntervals01(curve: CurvePrimitive, unsortedFractions: GrowableFloat64Array, clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; -} - -// @public -class ClipVector { - appendClone(clip: ClipShape): void; - appendReference(clip: ClipShape): void; - appendShape(shape: Point3d[], zLow?: number, zHigh?: number, transform?: Transform, isMask?: boolean, invisible?: boolean): boolean; - // (undocumented) - boundingRange: Range3d; - classifyPointContainment(points: Point3d[], ignoreMasks?: boolean): ClipPlaneContainment; - classifyRangeContainment(range: Range3d, ignoreMasks: boolean): ClipPlaneContainment; - clear(): void; - readonly clips: ClipShape[]; - clone(result?: ClipVector): ClipVector; - static createClipShapeClones(clips: ClipShape[], result?: ClipVector): ClipVector; - static createClipShapeRefs(clips: ClipShape[], result?: ClipVector): ClipVector; - static createEmpty(result?: ClipVector): ClipVector; - static createFrom(donor: ClipVector, result?: ClipVector): ClipVector; - extractBoundaryLoops(loopPoints: Point3d[][], transform?: Transform): number[]; - static fromJSON(json: any, result?: ClipVector): ClipVector; - getRange(transform?: Transform, result?: Range3d): Range3d | undefined; - isAnyLineStringPointInside(points: Point3d[]): boolean; - isLineStringCompletelyContained(points: Point3d[]): boolean; - readonly isValid: boolean; - multiplyPlanesTimesMatrix(matrix: Matrix4d): boolean; - parseClipPlanes(): void; - pointInside(point: Point3d, onTolerance?: number): boolean; - setInvisible(invisible: boolean): void; - sumSizes(intervals: Segment1d[], begin: number, end: number): number; - toJSON(): any; - transformInPlace(transform: Transform): boolean; -} - -// WARNING: clusterTerminator has incomplete type information -// @public (undocumented) -class ClusterableArray extends GrowableBlockedArray { - constructor(numCoordinatePerPoint: number, numExtraDataPerPoint: number, initialBlockCapacity: number); - addBlock(data: number[]): void; - addDirect(x0: number, x1: number, x2?: number, x3?: number, x4?: number): void; - addPoint2d(xy: Point2d, a?: number, b?: number, c?: number): void; - addPoint3d(xyz: Point3d, a?: number, b?: number, c?: number): void; - // (undocumented) - static clusterGrowablePoint3dArray(source: GrowableXYZArray, tolerance?: number): PackedPointsWithIndex; - clusterIndicesLexical(clusterTolerance?: number): Uint32Array; - // (undocumented) - static clusterPoint3dArray(data: Point3d[], tolerance?: number): PackedPointsWithIndex; - countClusters(clusteredBlocks: Uint32Array): number; - // (undocumented) - createIndexBlockToClusterIndex(clusteredBlocks: Uint32Array): Uint32Array; - // (undocumented) - createIndexBlockToClusterStart(clusteredBlocks: Uint32Array): Uint32Array; - createIndexClusterToClusterStart(clusteredBlocks: Uint32Array): Uint32Array; - getData(blockIndex: number, i: number): number; - getExtraData(blockIndex: number, i: number): number; - // (undocumented) - getPoint2d(blockIndex: number, result?: Point2d): Point2d; - // (undocumented) - getPoint3d(blockIndex: number, result?: Point3d): Point3d; - // (undocumented) - static isClusterTerminator(x: number): boolean; - setExtraData(blockIndex: number, i: number, value: number): void; - setupPrimaryClusterSort(): void; - sortSubsetsBySingleKey(blockedIndices: Uint32Array, dataIndex: number): void; - // (undocumented) - static sortVectorComponent(index: number): number; - // (undocumented) - toJSON(): any[]; -} - -// @public -export function compareRange1dLexicalLowHigh(a: Range1d, b: Range1d): number; - -// @public (undocumented) -class Complex implements BeJSONFunctions { - constructor(x?: number, y?: number); - // (undocumented) - angle(): Angle; - // (undocumented) - clone(): Complex; - // (undocumented) - static create(x?: number, y?: number, result?: Complex): Complex; - // (undocumented) - distance(other: Complex): number; - // (undocumented) - divide(other: Complex, result?: Complex): Complex | undefined; - // (undocumented) - static fromJSON(json?: any): Complex; - // (undocumented) - isAlmostEqual(other: Complex): boolean; - // (undocumented) - magnitude(): number; - // (undocumented) - magnitudeSquared(): number; - // (undocumented) - minus(other: Complex, result?: Complex): Complex; - // (undocumented) - plus(other: Complex, result?: Complex): Complex; - // (undocumented) - set(x?: number, y?: number): void; - // (undocumented) - setFrom(other: Complex): void; - // (undocumented) - setFromJSON(json?: any): void; - // (undocumented) - sqrt(result?: Complex): Complex; - // (undocumented) - times(other: Complex, result?: Complex): Complex; - timesXY(x: number, y: number, result?: Complex): Complex; - toJSON(): any; - // (undocumented) - x: any; - // (undocumented) - y: any; -} - -// @public -class Cone extends SolidPrimitive, implements UVSurface, UVSurfaceIsoParametricDistance { - protected constructor(map: Transform, radiusA: number, radiusB: number, capped: boolean); - // (undocumented) - clone(): Cone; - // (undocumented) - cloneTransformed(transform: Transform): Cone | undefined; - // (undocumented) - constantVSection(vFraction: number): CurveCollection | undefined; - static createAxisPoints(centerA: Point3d, centerB: Point3d, radiusA: number, radiusB: number, capped: boolean): Cone | undefined; - static createBaseAndTarget(centerA: Point3d, centerB: Point3d, vectorX: Vector3d, vectorY: Vector3d, radiusA: number, radiusB: number, capped: boolean): Cone; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - // (undocumented) - getCenterA(): Point3d; - // (undocumented) - getCenterB(): Point3d; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - getMaxRadius(): number; - // (undocumented) - getRadiusA(): number; - // (undocumented) - getRadiusB(): number; - // (undocumented) - getVectorX(): Vector3d; - // (undocumented) - getVectorY(): Vector3d; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - maxIsoParametricDistance(): Vector2d; - strokeConstantVSection(v: number, fixedStrokeCount: number | undefined, options: StrokeOptions | undefined): LineString3d; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; - // (undocumented) - uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d; - // (undocumented) - uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - vFractionToRadius(v: number): number; -} - -// @public -class Constant { - // (undocumented) - static readonly circumferenceOfEarth: number; - // (undocumented) - static readonly diameterOfEarth: number; - // (undocumented) - static readonly oneCentimeter: number; - // (undocumented) - static readonly oneKilometer: number; - // (undocumented) - static readonly oneMeter: number; - // (undocumented) - static readonly oneMillimeter: number; -} - -// @public -class ConstructCurveBetweenCurves extends NullGeometryHandler { - handleArc3d(arc0: Arc3d): any; - handleLineSegment3d(segment0: LineSegment3d): any; - handleLineString3d(ls0: LineString3d): any; - static interpolateBetween(geometry0: GeometryQuery, fraction: number, geometry1: GeometryQuery): GeometryQuery | undefined; -} - -// WARNING: hugeVal has incomplete type information -// @public -class ConvexClipPlaneSet implements Clipper { - // (undocumented) - addPlaneToConvexSet(plane: ClipPlane | undefined): void; - // (undocumented) - addZClipPlanes(invisible: boolean, zLow?: number, zHigh?: number): void; - // (undocumented) - announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; - classifyPointContainment(points: Point3d[], onIsOutside: boolean): ClipPlaneContainment; - // (undocumented) - clipPointsOnOrInside(points: Point3d[], inOrOn: Point3d[], out: Point3d[]): void; - clipUnboundedSegment(pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; - // (undocumented) - clone(result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - // (undocumented) - static createEmpty(result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - // (undocumented) - static createPlanes(planes: ClipPlane[], result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - static createRange3dPlanes(range: Range3d, lowX?: boolean, highX?: boolean, lowY?: boolean, highY?: boolean, lowZ?: boolean, highZ?: boolean): ConvexClipPlaneSet; - static createSweptPolyline(points: Point3d[], upVector: Vector3d, tiltAngle: Angle): ConvexClipPlaneSet | undefined; - // (undocumented) - static createXYBox(x0: number, y0: number, x1: number, y1: number, result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - // (undocumented) - static createXYPolyLine(points: Point3d[], interior: boolean[], leftIsInside: boolean, result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - static createXYPolyLineInsideLeft(points: Point3d[], result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - // (undocumented) - static fromJSON(json: any, result?: ConvexClipPlaneSet): ConvexClipPlaneSet; - getRangeOfAlignedPlanes(transform?: Transform, result?: Range3d): Range3d | undefined; - // (undocumented) - isAlmostEqual(other: ConvexClipPlaneSet): boolean; - // (undocumented) - isPointInside(point: Point3d): boolean; - // (undocumented) - isPointOnOrInside(point: Point3d, tolerance: number): boolean; - // (undocumented) - isSphereInside(point: Point3d, radius: number): boolean; - // (undocumented) - multiplyPlanesByMatrix(matrix: Matrix4d): void; - negateAllPlanes(): void; - // (undocumented) - readonly planes: ClipPlane[]; - // (undocumented) - polygonClip(input: Point3d[], output: Point3d[], work: Point3d[]): void; - reloadSweptPolygon(points: Point3d[], sweepDirection: Vector3d, sideSelect: number): number; - // (undocumented) - setInvisible(invisible: boolean): void; - // (undocumented) - static testRayIntersections(tNear: Float64Array, origin: Point3d, direction: Vector3d, planes: ConvexClipPlaneSet): boolean; - // (undocumented) - toJSON(): any; - // (undocumented) - transformInPlace(transform: Transform): void; -} - -// @public (undocumented) -class ConvexPolygon2d { - constructor(points: Point2d[]); - clipRay(ray: Ray2d): Range1d; - static computeConvexHull(points: Point2d[]): Point2d[]; - containsPoint(point: Point2d): boolean; - static createHull(points: Point2d[]): ConvexPolygon2d; - static createHullIsValidCheck(points: Point2d[]): ConvexPolygon2d; - distanceOutside(xy: Point2d): number; - static isValidConvexHull(points: Point2d[]): boolean; - offsetInPlace(distance: number): boolean; - readonly points: Point2d[]; - rangeAlongRay(ray: Ray2d): Range1d; - rangePerpendicularToRay(ray: Ray2d): Range1d; -} - -// @public -class CoordinateXYZ extends GeometryQuery { - clone(): GeometryQuery | undefined; - cloneTransformed(transform: Transform): GeometryQuery | undefined; - // (undocumented) - static create(point: Point3d): CoordinateXYZ; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - isAlmostEqual(other: GeometryQuery): boolean; - isSameGeometryClass(other: GeometryQuery): boolean; - // (undocumented) - readonly point: Point3d; - range(): Range3d; - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class CurveChain extends CurveCollection { - protected constructor(); - // (undocumented) - protected _curves: CurvePrimitive[]; - // (undocumented) - readonly children: CurvePrimitive[]; - // (undocumented) - cloneStroked(options?: StrokeOptions): AnyCurve; - abstract cyclicCurvePrimitive(index: number): CurvePrimitive | undefined; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - // (undocumented) - getChild(i: number): CurvePrimitive | undefined; - // (undocumented) - getPackedStrokes(options?: StrokeOptions): GrowableXYZArray | undefined; - reverseChildrenInPlace(): void; - // (undocumented) - tryAddChild(child: AnyCurve): boolean; -} - -// @public -class CurveChainWithDistanceIndex extends CurvePrimitive { - chainDistanceToChainFraction(distance: number): number; - // WARNING: The type "PathFragment" needs to be exported by the package (e.g. added to index.ts) - protected chainDistanceToFragment(distance: number, allowExtrapolation?: boolean): PathFragment | undefined; - // (undocumented) - clone(): CurvePrimitive | undefined; - cloneTransformed(transform: Transform): CurvePrimitive | undefined; - closestPoint(spacePoint: Point3d, _extend: boolean): CurveLocationDetail | undefined; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; - computeStrokeCountForOptions(options?: StrokeOptions): number; - // (undocumented) - static createCapture(path: CurveChain, options?: StrokeOptions): CurveChainWithDistanceIndex; - // WARNING: The type "PathFragment" needs to be exported by the package (e.g. added to index.ts) - protected curveAndChildFractionToFragment(curve: CurvePrimitive, fraction: number): PathFragment | undefined; - // (undocumented) - curveLength(): number; - curveLengthBetweenFractions(fraction0: number, fraction1: number): number; - dispatchToGeometryHandler(handler: GeometryHandler): any; - emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void; - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(result?: Point3d): Point3d; - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - // (undocumented) - fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Ray3d; - isAlmostEqual(other: GeometryQuery): boolean; - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail; - // (undocumented) - quickLength(): number; - reverseInPlace(): void; - startPoint(result?: Point3d): Point3d; - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class CurveCollection extends GeometryQuery { - abstract announceToCurveProcessor(processor: RecursiveCurveProcessor): void; - checkForNonLinearPrimitives(): boolean; - // (undocumented) - clone(): CurveCollection | undefined; - abstract cloneEmptyPeer(): CurveCollection; - abstract cloneStroked(options?: StrokeOptions): AnyCurve; - // (undocumented) - cloneTransformed(transform: Transform): CurveCollection | undefined; - // (undocumented) - abstract dgnBoundaryType(): number; - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - // (undocumented) - abstract getChild(i: number): AnyCurve | undefined; - readonly isAnyRegionType: boolean; - readonly isClosedPath: boolean; - // (undocumented) - isInner: boolean; - readonly isOpenPath: boolean; - maxGap(): number; - sumLengths(): number; - abstract tryAddChild(child: AnyCurve): boolean; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public (undocumented) -class CurveCurve { - static intersectionProjectedXY(worldToLocal: Matrix4d, geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair; - static intersectionXY(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair; -} - -// @public -enum CurveIntervalRole { - intervalEnd = 12, - intervalInterior = 11, - intervalStart = 10, - isolated = 0, - isolatedAtVertex = 1 -} - -// @public -class CurveLocationDetail { - constructor(); - a: number; - childDetail?: CurveLocationDetail; - clone(result?: CurveLocationDetail): CurveLocationDetail; - static create(curve: CurvePrimitive, result?: CurveLocationDetail): CurveLocationDetail; - static createConditionalMoveSignedDistance(allowExtension: boolean, curve: CurvePrimitive, startFraction: number, endFraction: number, requestedSignedDistance: number, result?: CurveLocationDetail): CurveLocationDetail; - static createCurveEvaluatedFraction(curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail): CurveLocationDetail; - static createCurveFractionPoint(curve: CurvePrimitive, fraction: number, point: Point3d, result?: CurveLocationDetail): CurveLocationDetail; - static createCurveFractionPointDistance(curve: CurvePrimitive, fraction: number, point: Point3d, a: number, result?: CurveLocationDetail): CurveLocationDetail; - static createCurveFractionPointDistanceCurveSearchStatus(curve: CurvePrimitive, fraction: number, point: Point3d, distance: number, status: CurveSearchStatus, result?: CurveLocationDetail): CurveLocationDetail; - curve?: CurvePrimitive; - curveSearchStatus?: CurveSearchStatus; - fraction: number; - intervalRole?: CurveIntervalRole; - readonly isIsolated: boolean; - point: Point3d; - pointQ: Point3d; - setCurve(curve: CurvePrimitive): void; - setDistanceTo(point: Point3d): void; - setFP(fraction: number, point: Point3d, vector?: Vector3d, a?: number): void; - setFR(fraction: number, ray: Ray3d, a?: number): void; - setIntervalRole(value: CurveIntervalRole): void; - updateIfCloserCurveFractionPointDistance(curve: CurvePrimitive, fraction: number, point: Point3d, a: number): boolean; - vectorInCurveLocationDetail?: Vector3d; -} - -// @public -class CurveLocationDetailArrayPair { - constructor(); - // (undocumented) - dataA: CurveLocationDetail[]; - // (undocumented) - dataB: CurveLocationDetail[]; -} - -// @public -class CurveLocationDetailPair { - constructor(); - clone(result?: CurveLocationDetailPair): CurveLocationDetailPair; - static createDetailRef(detailA: CurveLocationDetail, detailB: CurveLocationDetail, result?: CurveLocationDetailPair): CurveLocationDetailPair; - // (undocumented) - detailA: CurveLocationDetail; - // (undocumented) - detailB: CurveLocationDetail; -} - -// @public -class CurvePrimitive extends GeometryQuery { - protected constructor(); - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - addMappedStrokesToLineString3D(map: StrokeCountMap, linestring: LineString3d): number; - announceClipIntervals(_clipper: Clipper, _announce?: AnnounceNumberNumberCurvePrimitive): boolean; - appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; - clonePartialCurve(_fractionA: number, _fractionB: number): CurvePrimitive | undefined; - closestPoint(spacePoint: Point3d, extend: boolean): CurveLocationDetail | undefined; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentMap?: StrokeCountMap): void; - abstract computeStrokeCountForOptions(options?: StrokeOptions): number; - curveLength(): number; - curveLengthBetweenFractions(fraction0: number, fraction1: number): number; - curveLengthWithFixedIntervalCountQuadrature(fraction0: number, fraction1: number, numInterval: number, numGauss?: number): number; - abstract emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void; - abstract emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(result?: Point3d): Point3d; - fractionToFrenetFrame(fraction: number, result?: Transform): Transform | undefined; - abstract fractionToPoint(fraction: number, result?: Point3d): Point3d; - abstract fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; - abstract fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - // (undocumented) - fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Ray3d; - getFractionToDistanceScale(): number | undefined; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - static installStrokeCountMap(curve: CurvePrimitive, curveMap: StrokeCountMap, parentMap?: StrokeCountMap): void; - readonly isExtensibleFractionSpace: boolean; - abstract isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail; - protected moveSignedDistanceFromFractionGeneric(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail; - abstract quickLength(): number; - abstract reverseInPlace(): void; - startPoint(result?: Point3d): Point3d; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - strokeData?: StrokeCountMap; -} - -// @public -enum CurveSearchStatus { - error = 0, - stoppedAtBoundary = 2, - success = 1 -} - -// @public -class DeepCompare { - constructor(numberRelTol?: number); - // (undocumented) - compare(a: any, b: any, tolerance?: number): boolean; - // (undocumented) - compareNumber(_a: number, _b: number): boolean; - // (undocumented) - errorTracker: any[]; - // (undocumented) - numberRelTol: number; - // (undocumented) - propertyCounts: { - [key: string]: any; - } - // (undocumented) - typeCounts: { - arrays: number; - booleans: number; - functions: number; - numbers: number; - objects: number; - strings: number; - undefined: number; - } -} - -// @public (undocumented) -class Degree2PowerPolynomial { - constructor(c0?: number, c1?: number, c2?: number); - // (undocumented) - addConstant(a: number): void; - // (undocumented) - addSquaredLinearTerm(a: number, b: number, s?: number): void; - // (undocumented) - coffs: number[]; - evaluate(x: number): number; - evaluateDerivative(x: number): number; - // (undocumented) - static fromRootsAndC2(root0: number, root1: number, c2?: number): Degree2PowerPolynomial; - // (undocumented) - realRoots(): number[] | undefined; - static solveQuadratic(a: number, b: number, c: number): number[] | undefined; - // (undocumented) - tryGetVertexFactorization(): { - x0: number; - y0: number; - c: number; - } | undefined; -} - -// @public (undocumented) -class Degree3PowerPolynomial { - constructor(c0?: number, c1?: number, c2?: number, c3?: number); - // (undocumented) - addConstant(a: number): void; - // (undocumented) - addSquaredLinearTerm(a: number, b: number, s?: number): void; - // (undocumented) - coffs: number[]; - evaluate(x: number): number; - evaluateDerivative(x: number): number; - // (undocumented) - static fromRootsAndC3(root0: number, root1: number, root2: number, c3?: number): Degree3PowerPolynomial; -} - -// @public (undocumented) -class Degree4PowerPolynomial { - constructor(c0?: number, c1?: number, c2?: number, c3?: number, c4?: number); - // (undocumented) - addConstant(a: number): void; - // (undocumented) - coffs: number[]; - evaluate(x: number): number; - evaluateDerivative(x: number): number; - // (undocumented) - static fromRootsAndC4(root0: number, root1: number, root2: number, root3: number, c4?: number): Degree4PowerPolynomial; -} - -// @public -class FacetFaceData { - clone(result?: FacetFaceData): FacetFaceData; - convertParamToDistance(param: Point2d, result?: Point2d): Point2d; - convertParamToNormalized(param: Point2d, result?: Point2d): Point2d; - static createNull(): FacetFaceData; - // (undocumented) - readonly paramDistanceRange: Range2d; - // (undocumented) - readonly paramRange: Range2d; - scaleDistances(distanceScale: number): void; - setNull(): void; - setParamDistanceRangeFromNewFaceData(polyface: IndexedPolyface, facetStart: number, facetEnd: number): boolean; -} - -// @public -class FrameBuilder { - constructor(); - announce(data: any): void; - announcePoint(point: Point3d): number; - // (undocumented) - announceVector(vector: Vector3d): number; - // (undocumented) - applyDefaultUpVector(vector?: Vector3d): void; - // (undocumented) - clear(): void; - static createFrameToDistantPoints(points: Point3d[]): Transform | undefined; - static createLocalToWorldTransformInRange(range: Range3d, scaleSelect?: AxisScaleSelect, fractionX?: number, fractionY?: number, fractionZ?: number, defaultAxisLength?: number): Transform; - static createRightHandedFrame(defaultUpVector: Vector3d | undefined, ...params: any[]): Transform | undefined; - static createRightHandedLocalToWorld(...params: any[]): Transform | undefined; - getValidatedFrame(allowLeftHanded?: boolean): Transform | undefined; - // (undocumented) - readonly hasOrigin: boolean; - savedVectorCount(): number; -} - -// WARNING: smallMetricDistance has incomplete type information -// WARNING: smallMetricDistanceSquared has incomplete type information -// WARNING: smallAngleRadians has incomplete type information -// WARNING: smallAngleRadiansSquared has incomplete type information -// WARNING: largeFractionResult has incomplete type information -// @public (undocumented) -class Geometry { - static axisIndexToRightHandedAxisOrder(axisIndex: AxisIndex): AxisOrder; - static axisOrderToAxis(order: AxisOrder, index: number): number; - static clamp(value: number, min: number, max: number): number; - static clampToStartEnd(x: number, a: number, b: number): number; - static conditionalDivideFraction(numerator: number, denominator: number): number | undefined; - static correctSmallMetricDistance(distance: number, replacement?: number): number; - static crossProductMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; - static crossProductXYXY(ux: number, uy: number, vx: number, vy: number): number; - static crossProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d; - // (undocumented) - static curvatureMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; - // (undocumented) - static cyclic3dAxis(axis: number): number; - static defined01(value: any): number; - static distanceXYXY(x0: number, y0: number, x1: number, y1: number): number; - static distanceXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): number; - static dotProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; - // (undocumented) - static readonly fullCircleRadiansMinusSmallAngle: number; - // (undocumented) - static hypotenuseSquaredXY(x: number, y: number): number; - // (undocumented) - static hypotenuseSquaredXYZ(x: number, y: number, z: number): number; - // (undocumented) - static hypotenuseSquaredXYZW(x: number, y: number, z: number, w: number): number; - // (undocumented) - static hypotenuseXY(x: number, y: number): number; - // (undocumented) - static hypotenuseXYZ(x: number, y: number, z: number): number; - // (undocumented) - static hypotenuseXYZW(x: number, y: number, z: number, w: number): number; - static interpolate(a: number, f: number, b: number): number; - static inverseInterpolate(x0: number, f0: number, x1: number, f1: number, targetF?: number, defaultResult?: number): number | undefined; - static inverseInterpolate01(f0: number, f1: number, targetF?: number): number | undefined; - // (undocumented) - static inverseMetricDistance(a: number): number | undefined; - // (undocumented) - static inverseMetricDistanceSquared(a: number): number | undefined; - // (undocumented) - static isAlmostEqualNumber(a: number, b: number): boolean; - static isArrayOfNumberArray(json: any, numNumberArray: number, minEntries?: number): boolean; - // (undocumented) - static isDistanceWithinTol(distance: number, tol: number): boolean; - static isIn01(x: number, apply01?: boolean): boolean; - static isIn01WithTolerance(x: number, tolerance: number): boolean; - static isNumberArray(json: any, minEntries?: number): boolean; - // (undocumented) - static isSameCoordinate(x: number, y: number, tol?: number): boolean; - // (undocumented) - static isSameCoordinateSquared(x: number, y: number): boolean; - // (undocumented) - static isSamePoint2d(dataA: Point2d, dataB: Point2d): boolean; - // (undocumented) - static isSamePoint3d(dataA: Point3d, dataB: Point3d): boolean; - // (undocumented) - static isSamePoint3dXY(dataA: Point3d, dataB: Point3d): boolean; - // (undocumented) - static isSameVector2d(dataA: Vector2d, dataB: Vector2d): boolean; - // (undocumented) - static isSameVector3d(dataA: Vector3d, dataB: Vector3d): boolean; - // (undocumented) - static isSameXYZ(dataA: XYZ, dataB: XYZ): boolean; - // (undocumented) - static isSmallAngleRadians(value: number): boolean; - // (undocumented) - static isSmallMetricDistance(distance: number): boolean; - // (undocumented) - static isSmallMetricDistanceSquared(distanceSquared: number): boolean; - // (undocumented) - static isSmallRelative(value: number): boolean; - static lexicalXYLessThan(a: XY | XYZ, b: XY | XYZ): 1 | 0 | -1; - // (undocumented) - static lexicalXYZLessThan(a: XYZ, b: XYZ): 1 | 0 | -1; - static lexicalYXLessThan(a: XY | XYZ, b: XY | XYZ): 1 | 0 | -1; - // (undocumented) - static maxAbsDiff(a: number, b0: number, b1: number): number; - // (undocumented) - static maxAbsXY(x: number, y: number): number; - // (undocumented) - static maxAbsXYZ(x: number, y: number, z: number): number; - // (undocumented) - static maxXY(a: number, b: number): number; - // (undocumented) - static maxXYZ(a: number, b: number, c: number): number; - static modulo(a: number, period: number): number; - // (undocumented) - static resolveNumber(value: number | undefined, defaultValue?: number): number; - static restrictToInterval(x: number, a: number, b: number): number; - static safeDivideFraction(numerator: number, denominator: number, defaultResult: number): number; - static solveTrigForm(constCoff: number, cosCoff: number, sinCoff: number): Vector2d[] | undefined; - // (undocumented) - static square(x: number): number; - static stepCount(stepSize: number, total: number, minCount?: number, maxCount?: number): number; - // (undocumented) - static tripleProduct(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, wx: number, wy: number, wz: number): number; - static tripleProductPoint4dXYW(columnA: Point4d, columnB: Point4d, columnC: Point4d): number; - static tripleProductXYW(columnA: XAndY, weightA: number, columnB: XAndY, weightB: number, columnC: XAndY, weightC: number): number; -} - -// @public (undocumented) -class GeometryHandler { - // (undocumented) - abstract handleArc3d(g: Arc3d): any; - // (undocumented) - handleBagOfCurves(g: BagOfCurves): any; - // (undocumented) - abstract handleBezierCurve3d(g: BezierCurve3d): any; - // (undocumented) - abstract handleBezierCurve3dH(g: BezierCurve3dH): any; - // (undocumented) - abstract handleBox(g: Box): any; - // (undocumented) - abstract handleBSplineCurve3d(g: BSplineCurve3d): any; - // (undocumented) - abstract handleBSplineCurve3dH(g: BSplineCurve3dH): any; - // (undocumented) - abstract handleBSplineSurface3d(g: BSplineSurface3d): any; - // (undocumented) - abstract handleBSplineSurface3dH(g: BSplineSurface3dH): any; - // (undocumented) - abstract handleCone(g: Cone): any; - // (undocumented) - abstract handleCoordinateXYZ(g: CoordinateXYZ): any; - // (undocumented) - handleCurveCollection(_g: CurveCollection): any; - // (undocumented) - abstract handleIndexedPolyface(g: IndexedPolyface): any; - // (undocumented) - abstract handleLinearSweep(g: LinearSweep): any; - // (undocumented) - abstract handleLineSegment3d(g: LineSegment3d): any; - // (undocumented) - abstract handleLineString3d(g: LineString3d): any; - // (undocumented) - handleLoop(g: Loop): any; - // (undocumented) - handleParityRegion(g: ParityRegion): any; - // (undocumented) - handlePath(g: Path): any; - // (undocumented) - abstract handlePointString3d(g: PointString3d): any; - // (undocumented) - abstract handleRotationalSweep(g: RotationalSweep): any; - // (undocumented) - abstract handleRuledSweep(g: RuledSweep): any; - // (undocumented) - abstract handleSphere(g: Sphere): any; - // (undocumented) - abstract handleTorusPipe(g: TorusPipe): any; - // (undocumented) - abstract handleTransitionSpiral(g: TransitionSpiral3d): any; - // (undocumented) - handleUnionRegion(g: UnionRegion): any; -} - -// @public -class GeometryQuery { - readonly children: GeometryQuery[] | undefined; - abstract clone(): GeometryQuery | undefined; - abstract cloneTransformed(transform: Transform): GeometryQuery | undefined; - // (undocumented) - abstract dispatchToGeometryHandler(handler: GeometryHandler): any; - abstract extendRange(rangeToExtend: Range3d, transform?: Transform): void; - isAlmostEqual(other: GeometryQuery): boolean; - abstract isSameGeometryClass(other: GeometryQuery): boolean; - range(transform?: Transform, result?: Range3d): Range3d; - abstract tryTransformInPlace(transform: Transform): boolean; - tryTranslateInPlace(dx: number, dy?: number, dz?: number): boolean; -} - -// @public -class GrowableBlockedArray { - constructor(blockSize: number, initialBlocks?: number); - // (undocumented) - protected _blockSize: number; - // (undocumented) - protected _data: Float64Array; - // (undocumented) - protected _inUse: number; - addBlock(newData: number[]): void; - blockCapacity(): number; - protected blockIndexToDoubleIndex(blockIndex: number): number; - checkedComponent(blockIndex: number, componentIndex: number): number | undefined; - clear(): void; - static compareLexicalBlock(data: Float64Array, blockSize: number, ia: number, ib: number): number; - component(blockIndex: number, componentIndex: number): number; - // (undocumented) - distanceBetweenBlocks(blockIndexA: number, blockIndexB: number): number; - // (undocumented) - distanceBetweenSubBlocks(blockIndexA: number, blockIndexB: number, iBegin: number, iEnd: number): number; - ensureBlockCapacity(blockCapacity: number): void; - getWithinBlock(blockIndex: number, indexWithinBlock: number): number; - protected newBlockIndex(): number; - readonly numBlocks: number; - readonly numPerBlock: number; - popBlock(): void; - sortIndicesLexical(compareBlocks?: BlockComparisonFunction): Uint32Array; -} - -// @public -class GrowableFloat64Array { - constructor(initialCapacity?: number); - // (undocumented) - at(index: number): number; - // (undocumented) - back(): number; - // (undocumented) - capacity(): number; - clear(): void; - clone(maintainExcessCapacity?: boolean): GrowableFloat64Array; - // (undocumented) - static compare(a: any, b: any): number; - compressAdjcentDuplicates(tolerance?: number): void; - static create(contents: Float64Array | number[]): GrowableFloat64Array; - ensureCapacity(newCapacity: number): void; - // (undocumented) - front(): number; - // (undocumented) - readonly length: number; - move(i: number, j: number): void; - pop(): void; - push(toPush: number): void; - pushBlockCopy(copyFromIndex: number, numToCopy: number): void; - // (undocumented) - reassign(index: number, value: number): void; - resize(newLength: number, padValue?: number): void; - restrictToInterval(a: number, b: number): void; - setAt(index: number, value: number): void; - sort(compareMethod?: (a: any, b: any) => number): void; - swap(i: number, j: number): void; -} - -// @public -class GrowableXYArray extends IndexedXYCollection { - constructor(numPoints?: number); - areaXY(): number; - atPoint2dIndex(pointIndex: number, result?: Point2d): Point2d | undefined; - atVector2dIndex(vectorIndex: number, result?: Vector2d): Vector2d | undefined; - // (undocumented) - back(result?: Point2d): Point2d | undefined; - clear(): void; - clone(): GrowableXYArray; - compareLexicalBlock(ia: number, ib: number): number; - component(pointIndex: number, componentIndex: number): number; - // (undocumented) - static create(data: XAndY[] | GrowableXYZArray): GrowableXYArray; - static createFromGrowableXYZArray(source: GrowableXYZArray, transform?: Transform, dest?: GrowableXYArray): GrowableXYArray; - crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number): number | undefined; - crossProductXAndYIndexIndex(origin: XAndY, targetAIndex: number, targetBIndex: number): number | undefined; - distance(i: number, j: number): number | undefined; - distanceIndexToPoint(i: number, spacePoint: Point2d): number | undefined; - ensureCapacity(pointCapacity: number): void; - // (undocumented) - extendRange(rangeToExtend: Range2d, transform?: Transform): void; - float64Data(): Float64Array; - // (undocumented) - readonly float64Length: number; - // (undocumented) - front(result?: Point2d): Point2d | undefined; - getPoint2dArray(): Point2d[]; - getPoint2dAt(pointIndex: number, result?: Point2d): Point2d; - // (undocumented) - getPoint3dArray(z?: number): Point3d[]; - interpolate(i: number, fraction: number, j: number, result?: Point2d): Point2d | undefined; - // (undocumented) - static isAlmostEqual(dataA: GrowableXYArray | undefined, dataB: GrowableXYArray | undefined): boolean; - isIndexValid(index: number): boolean; - // (undocumented) - readonly length: number; - multiplyMatrix3dInPlace(matrix: Matrix3d): void; - multiplyTransformInPlace(transform: Transform): void; - pop(): void; - push(toPush: XAndY): void; - pushAll(points: XAndY[]): void; - pushAllXYAndZ(points: XYAndZ[] | GrowableXYZArray): void; - pushFromGrowableXYArray(source: GrowableXYArray, sourceIndex: number): boolean; - pushWrap(numWrap: number): void; - // (undocumented) - pushXY(x: number, y: number): void; - resize(pointCount: number): void; - scaleInPlace(factor: number): void; - setAt(pointIndex: number, value: XAndY): boolean; - setCoordinates(pointIndex: number, x: number, y: number): boolean; - sortIndicesLexical(): Uint32Array; - // (undocumented) - sumLengths(): number; - transferFromGrowableXYArray(destIndex: number, source: GrowableXYArray, sourceIndex: number): boolean; - tryTransformInverseInPlace(transform: Transform): boolean; - vectorIndexIndex(i: number, j: number, result?: Vector2d): Vector2d | undefined; - vectorXAndYIndex(origin: XAndY, j: number, result?: Vector2d): Vector2d | undefined; -} - -// @public -class GrowableXYZArray extends IndexedXYZCollection { - constructor(numPoints?: number); - accumulateCrossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result: Vector3d): void; - addSteppedPoints(other: GrowableXYZArray, pointIndex0: number, step: number, numAdd: number): void; - areaXY(): number; - atPoint2dIndex(pointIndex: number, result?: Point2d): Point2d | undefined; - atPoint3dIndex(pointIndex: number, result?: Point3d): Point3d | undefined; - atVector3dIndex(vectorIndex: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - back(result?: Point3d): Point3d | undefined; - clear(): void; - clone(result?: GrowableXYZArray): GrowableXYZArray; - compareLexicalBlock(ia: number, ib: number): number; - component(pointIndex: number, componentIndex: number): number; - // (undocumented) - static create(data: XYAndZ[]): GrowableXYZArray; - crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined; - crossProductXYAndZIndexIndex(origin: XYAndZ, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined; - distance(i: number, j: number): number | undefined; - static distanceBetweenPointsIn2Arrays(arrayA: GrowableXYZArray, i: number, arrayB: GrowableXYZArray, j: number): number | undefined; - distanceIndexToPoint(i: number, spacePoint: XYAndZ): number | undefined; - static distanceRangeBetweenCorrespondingPoints(arrayA: GrowableXYZArray, arrayB: GrowableXYZArray): Range1d; - ensureCapacity(pointCapacity: number): void; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - float64Data(): Float64Array; - // (undocumented) - readonly float64Length: number; - // (undocumented) - front(result?: Point3d): Point3d | undefined; - getPoint2dAt(pointIndex: number, result?: Point2d): Point2d; - // (undocumented) - getPoint3dArray(): Point3d[]; - getPoint3dAt(pointIndex: number, result?: Point3d): Point3d; - interpolate(i: number, fraction: number, j: number, result?: Point3d): Point3d | undefined; - // (undocumented) - static isAlmostEqual(dataA: GrowableXYZArray | undefined, dataB: GrowableXYZArray | undefined): boolean; - // (undocumented) - isCloseToPlane(plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean; - isIndexValid(index: number): boolean; - // (undocumented) - readonly length: number; - multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(matrix: Matrix3d): void; - multiplyMatrix3dInPlace(matrix: Matrix3d): void; - multiplyTransformInPlace(transform: Transform): void; - pop(): void; - push(toPush: XYAndZ): void; - pushAll(points: Point3d[]): void; - pushFromGrowableXYZArray(source: GrowableXYZArray, sourceIndex: number): boolean; - pushWrap(numWrap: number): void; - // (undocumented) - pushXYZ(x: number, y: number, z: number): void; - resize(pointCount: number): void; - scaleInPlace(factor: number): void; - setAt(pointIndex: number, value: XYAndZ): boolean; - setCoordinates(pointIndex: number, x: number, y: number, z: number): boolean; - sortIndicesLexical(): Uint32Array; - // (undocumented) - sumLengths(): number; - transferFromGrowableXYZArray(destIndex: number, source: GrowableXYZArray, sourceIndex: number): boolean; - tryTransformInverseInPlace(transform: Transform): boolean; - vectorIndexIndex(i: number, j: number, result?: Vector3d): Vector3d | undefined; - vectorXYAndZIndex(origin: XYAndZ, j: number, result?: Vector3d): Vector3d | undefined; -} - -// @public -class HalfEdge { - constructor(x?: number, y?: number, z?: number, i?: number); - clearMask(mask: HalfEdgeMask): void; - clearMaskAroundFace(mask: HalfEdgeMask): void; - clearMaskAroundVertex(mask: HalfEdgeMask): void; - collectAroundFace(f?: NodeFunction): any[]; - collectAroundVertex(f?: NodeFunction): any[]; - // (undocumented) - countEdgesAroundFace(): number; - // (undocumented) - countEdgesAroundVertex(): number; - // (undocumented) - countMaskAroundFace(mask: HalfEdgeMask, value?: boolean): number; - // (undocumented) - countMaskAroundVertex(mask: HalfEdgeMask, value?: boolean): number; - // (undocumented) - static createEdgeXYXY(id0: any, x0: number, y0: number, id1: any, x1: number, y1: number): HalfEdge; - static createHalfEdgePair(heArray: HalfEdge[] | undefined): HalfEdge; - static createHalfEdgePairWithCoordinates(xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, xB: number | undefined, yB: number | undefined, zB: number | undefined, iB: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge; - decomission(): void; - distanceXY(other: HalfEdge): number; - readonly edgeMate: HalfEdge; - readonly facePredecessor: HalfEdge; - readonly faceSuccessor: HalfEdge; - static filterIsMaskOff(node: HalfEdge, mask: HalfEdgeMask): boolean; - static filterIsMaskOn(node: HalfEdge, mask: HalfEdgeMask): boolean; - getMask(mask: HalfEdgeMask): number; - // (undocumented) - i: number; - // (undocumented) - readonly id: any; - isEqualXY(other: HalfEdge): boolean; - isMaskSet(mask: HalfEdgeMask): boolean; - // (undocumented) - maskBits: number; - // (undocumented) - nextZ: HalfEdge; - // (undocumented) - static nodeToId(node: HalfEdge): any; - // (undocumented) - static nodeToIdMaskXY: { - id: any; - mask: any; - xy: number[]; - } - // (undocumented) - static nodeToIdString(node: HalfEdge): any; - // (undocumented) - static nodeToIdXYString(node: HalfEdge): string; - // (undocumented) - static nodeToMaskString(node: HalfEdge): string; - // (undocumented) - static nodeToSelf(node: HalfEdge): any; - // (undocumented) - static nodeToXY(node: HalfEdge): number[]; - static pinch(nodeA: HalfEdge, nodeB: HalfEdge): void; - // (undocumented) - prevZ: HalfEdge; - setMask(mask: HalfEdgeMask): void; - // (undocumented) - setMaskAroundFace(mask: HalfEdgeMask): void; - // (undocumented) - setMaskAroundVertex(mask: HalfEdgeMask): void; - signedFaceArea(): number; - static splitEdge(base: undefined | HalfEdge, xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge; - // (undocumented) - steiner: boolean; - sumAroundFace(f: NodeToNumberFunction): number; - sumAroundVertex(f: NodeToNumberFunction): number; - // (undocumented) - testAndSetMask(mask: HalfEdgeMask): number; - // (undocumented) - static testNodeMaskNotExterior(node: HalfEdge): boolean; - // (undocumented) - vectorToFaceSuccessor(result?: Vector3d): Vector3d; - // (undocumented) - vectorToFaceSuccessorXY(result?: Vector2d): Vector2d; - // (undocumented) - readonly vertexPredecessor: HalfEdge; - // (undocumented) - readonly vertexSuccessor: HalfEdge; - // (undocumented) - x: number; - // (undocumented) - y: number; - // (undocumented) - z: number; - // (undocumented) - zOrder: number; -} - -// @public -class HalfEdgeGraph { - constructor(); - addEdgeXY(x0: number, y0: number, x1: number, y1: number): HalfEdge; - // (undocumented) - allHalfEdges: HalfEdge[]; - announceFaceLoops(announceFace: GraphNodeFunction): void; - announceVertexLoops(announceVertex: GraphNodeFunction): void; - clearMask(mask: HalfEdgeMask): void; - // (undocumented) - collectFaceLoops(): HalfEdge[]; - collectSegments(): LineSegment3d[]; - // (undocumented) - collectVertexLoops(): HalfEdge[]; - // (undocumented) - countFaceLoops(): number; - // (undocumented) - countFaceLoopsWithMaskFilter(filter: HalfEdgeAndMaskToBooleanFunction, mask: HalfEdgeMask): number; - // (undocumented) - countMask(mask: HalfEdgeMask): number; - // (undocumented) - countNodes(): number; - countVertexLoops(): number; - createEdgeXYZXYZ(xA?: number, yA?: number, zA?: number, iA?: number, xB?: number, yB?: number, zB?: number, iB?: number): HalfEdge; - decommission(): void; - reverseMask(mask: HalfEdgeMask): void; - setMask(mask: HalfEdgeMask): void; - splitEdge(base: undefined | HalfEdge, xA?: number, yA?: number, zA?: number, iA?: number): HalfEdge; -} - -// @public (undocumented) -enum HalfEdgeMask { - // (undocumented) - ALL_MASK = 4294967295, - // (undocumented) - BOUNDARY = 2, - // (undocumented) - BOUNDARY_VERTEX_MASK = 64, - // (undocumented) - CONSTU_MASK = 4, - // (undocumented) - CONSTV_MASK = 8, - // (undocumented) - DIRECTED_EDGE_MASK = 256, - // (undocumented) - EXTERIOR = 1, - // (undocumented) - HULL_MASK = 1024, - // (undocumented) - NULL_MASK = 0, - // (undocumented) - POLAR_LOOP_MASK = 4096, - // (undocumented) - PRIMARY_EDGE = 512, - // (undocumented) - PRIMARY_VERTEX_MASK = 128, - // (undocumented) - SECTION_EDGE_MASK = 2048, - // (undocumented) - TRIANGULATED_NODE_MASK = 16384, - // (undocumented) - USEAM_MASK = 16, - // (undocumented) - VISITED = 8192, - // (undocumented) - VSEAM_MASK = 32 -} - -// @public (undocumented) -module IModelJson { - interface ArcByVectorProps { - // (undocumented) - center: XYZProps; - // (undocumented) - sweepStartEnd: AngleSweepProps; - // (undocumented) - vectorX: XYZProps; - // (undocumented) - vectorY: XYZProps; - } - - interface AxesProps { - xyVectors?: [XYZProps, XYZProps]; - yawPitchRollAngles?: YawPitchRollProps; - zxVectors?: [XYZProps, XYZProps]; - } - - interface BcurveProps { - // (undocumented) - knot: [number]; - order: number; - point: [XYZProps]; - } - - interface BoxProps extends AxesProps { - baseX: number; - baseY: number; - capped?: boolean; - height?: number; - origin: XYZProps; - topOrigin?: XYZProps; - topX?: number; - topY?: number; - } - - interface BSplineSurfaceProps { - // (undocumented) - orderU: number; - // (undocumented) - orderV: number; - // (undocumented) - points: [[[number]]]; - // (undocumented) - uKnots: [number]; - // (undocumented) - vKnots: [number]; - } - - interface ConeProps extends AxesProps { - capped?: boolean; - // (undocumented) - end: XYZProps; - endRadius?: number; - // (undocumented) - start: XYZProps; - startRadius: number; - vectorX?: XYZProps; - // (undocumented) - vectorY?: XYZProps; - } - - interface CurveCollectionProps extends PlanarRegionProps { - bagofCurves?: [CurveCollectionProps]; - path?: [CurvePrimitiveProps]; - } - - // (undocumented) - interface CurvePrimitiveProps { - // (undocumented) - arc?: ArcByVectorProps | [XYZProps, XYZProps, XYZProps]; - // (undocumented) - bcurve?: BcurveProps; - // (undocumented) - lineSegment?: [XYZProps, XYZProps]; - // (undocumented) - lineString?: XYZProps[]; - // (undocumented) - transitionSpiral?: TransitionSpiralProps; - } - - interface CylinderProps { - capped?: boolean; - end: XYZProps; - // (undocumented) - radius: number; - start: XYZProps; - } - - // (undocumented) - interface GeometryProps extends CurvePrimitiveProps, SolidPrimitiveProps, CurveCollectionProps { - // (undocumented) - bsurf?: BSplineSurfaceProps; - // (undocumented) - indexedMesh?: IndexedMeshProps; - // (undocumented) - point?: XYZProps; - } - - interface IndexedMeshProps { - color?: [number]; - colorIndex?: [number]; - normal?: [XYZProps]; - normalIndex?: [number]; - param?: [XYProps]; - paramIndex?: [number]; - point: [XYZProps]; - pointIndex: [number]; - } - - interface LinearSweepProps { - capped?: boolean; - contour: CurveCollectionProps; - vector: XYZProps; - } - - interface PlanarRegionProps { - loop?: [CurvePrimitiveProps]; - parityRegion?: [{ - loop: [CurvePrimitiveProps]; - }]; - // (undocumented) - unionRegion?: [PlanarRegionProps]; - } - - // (undocumented) - interface PointProps { - // (undocumented) - point?: XYZProps; - } - - class Reader { - constructor(); - // (undocumented) - static parse(json?: any): any; - // (undocumented) - static parseArray(data?: any): any[] | undefined; - // (undocumented) - static parseBcurve(data?: any): BSplineCurve3d | BSplineCurve3dH | undefined; - // (undocumented) - static parseBox(json?: any): any; - // (undocumented) - static parseBsurf(data?: any): BSplineSurface3d | BSplineSurface3dH | undefined; - // WARNING: The type "ConeProps" needs to be exported by the package (e.g. added to index.ts) - static parseConeProps(json?: ConeProps): any; - // (undocumented) - static parseCoordinate(data?: any): CoordinateXYZ | undefined; - // (undocumented) - static parseCurveCollectionMembers(result: CurveCollection, data?: any): CurveCollection | undefined; - // WARNING: The type "CylinderProps" needs to be exported by the package (e.g. added to index.ts) - static parseCylinderProps(json?: CylinderProps): any; - // (undocumented) - static parseIndexedMesh(data?: any): any | undefined; - // (undocumented) - static parseLinearSweep(json?: any): any; - // (undocumented) - static parsePointArray(json?: any): Point3d[]; - // (undocumented) - static parsePolyfaceAuxData(data?: any): PolyfaceAuxData | undefined; - // (undocumented) - static parseRotationalSweep(json?: any): any; - // (undocumented) - static parseRuledSweep(json?: any): any; - // WARNING: The type "SphereProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static parseSphere(json?: SphereProps): any; - // (undocumented) - static parseTorusPipe(json?: any): any; - // (undocumented) - static parseTransitionSpiral(data?: any): TransitionSpiral3d | undefined; - } - - interface RotationalSweepProps { - axis: XYZProps; - capped?: boolean; - center: XYZProps; - contour: CurveCollectionProps; - sweepAngle: AngleProps; - } - - interface RuledSweepProps { - capped?: boolean; - // (undocumented) - countour: [CurveCollectionProps]; - } - - interface SolidPrimitiveProps { - // (undocumented) - box?: BoxProps; - // (undocumented) - cone?: ConeProps; - // (undocumented) - cylinder?: CylinderProps; - // (undocumented) - linearSweep?: LinearSweepProps; - // (undocumented) - rotationalSweep?: RotationalSweepProps; - // (undocumented) - ruledSweep?: RuledSweepProps; - // (undocumented) - sphere?: SphereProps; - // (undocumented) - torusPipe?: TorusPipeProps; - } - - interface SphereProps extends AxesProps { - capped?: boolean; - center: XYZProps; - latitudeStartEnd?: AngleSweepProps; - radius?: number; - radiusX?: number; - radiusY?: number; - radiusZ?: number; - } - - interface TorusPipeProps extends AxesProps { - capped?: boolean; - center: XYZProps; - majorRadius: number; - minorRadius?: number; - sweepAngle?: AngleProps; - } - - interface TransitionSpiralProps extends AxesProps { - // (undocumented) - curveLength?: number; - // (undocumented) - endBearing?: AngleProps; - // (undocumented) - endRadius?: number; - // (undocumented) - fractionInterval?: number[]; - intervalFractions?: [number, number]; - origin: XYZProps; - startBearing?: AngleProps; - // (undocumented) - startRadius?: number; - type?: string; - } - - // (undocumented) - class Writer extends GeometryHandler { - // (undocumented) - emit(data: any): any; - // (undocumented) - emitArray(data: object[]): any; - // (undocumented) - handleArc3d(data: Arc3d): any; - // (undocumented) - handleBagOfCurves(data: BagOfCurves): any; - // (undocumented) - handleBezierCurve3d(curve: BezierCurve3d): any; - // (undocumented) - handleBezierCurve3dH(curve: BezierCurve3dH): any; - // (undocumented) - handleBox(box: Box): any; - // (undocumented) - handleBSplineCurve3d(curve: BSplineCurve3d): any; - // (undocumented) - handleBSplineCurve3dH(curve: BSplineCurve3dH): any; - // (undocumented) - handleBSplineSurface3d(surface: BSplineSurface3d): any; - // (undocumented) - handleBSplineSurface3dH(surface: BSplineSurface3dH): any; - // (undocumented) - handleCone(data: Cone): any; - // (undocumented) - handleCoordinateXYZ(data: CoordinateXYZ): any; - // (undocumented) - handleIndexedPolyface(pf: IndexedPolyface): any; - // (undocumented) - handleLinearSweep(data: LinearSweep): any; - // (undocumented) - handleLineSegment3d(data: LineSegment3d): any; - // (undocumented) - handleLineString3d(data: LineString3d): any; - // (undocumented) - handleLoop(data: Loop): any; - // (undocumented) - handleParityRegion(data: ParityRegion): any; - // (undocumented) - handlePath(data: Path): any; - // (undocumented) - handlePointString3d(data: PointString3d): any; - // (undocumented) - handleRotationalSweep(data: RotationalSweep): any; - // (undocumented) - handleRuledSweep(data: RuledSweep): any; - // (undocumented) - handleSphere(data: Sphere): any; - // (undocumented) - handleTorusPipe(data: TorusPipe): any; - // (undocumented) - handleTransitionSpiral(data: TransitionSpiral3d): any; - // (undocumented) - handleUnionRegion(data: UnionRegion): any; - static toIModelJson(data: any): any; - } - -} - -// @public (undocumented) -class IndexedPolyface extends Polyface { - protected constructor(data: PolyfaceData, facetStart?: number[], facetToFaceData?: number[]); - // (undocumented) - protected _facetStart: number[]; - // (undocumented) - protected _facetToFaceData: number[]; - // (undocumented) - addColor(color: number): number; - // (undocumented) - addColorIndex(index: number): void; - addIndexedPolyface(source: IndexedPolyface, reversed: boolean, transform: Transform | undefined): void; - // (undocumented) - addNormal(normal: Vector3d, priorIndexA?: number, priorIndexB?: number): number; - // (undocumented) - addNormalIndex(index: number): void; - // (undocumented) - addNormalXYZ(x: number, y: number, z: number): number; - // (undocumented) - addParam(param: Point2d): number; - // (undocumented) - addParamIndex(index: number): void; - // (undocumented) - addParamUV(u: number, v: number, priorIndexA?: number, priorIndexB?: number): number; - // (undocumented) - addParamXY(x: number, y: number): number; - addPoint(point: Point3d, priorIndex?: number): number; - // (undocumented) - addPointIndex(index: number, visible?: boolean): void; - addPointXYZ(x: number, y: number, z: number): number; - cleanupOpenFacet(): void; - // (undocumented) - clone(): IndexedPolyface; - // (undocumented) - cloneTransformed(transform: Transform): IndexedPolyface; - readonly colorCount: number; - // (undocumented) - static create(needNormals?: boolean, needParams?: boolean, needColors?: boolean): IndexedPolyface; - createVisitor(numWrap?: number): PolyfaceVisitor; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - readonly faceCount: number; - readonly facetCount: number; - facetIndex0(index: number): number; - facetIndex1(index: number): number; - getFaceDataByFacetIndex(facetIndex: number): FacetFaceData; - isAlmostEqual(other: any): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - isValidFacetIndex(index: number): boolean; - readonly normalCount: number; - // (undocumented) - numEdgeInFacet(facetIndex: number): number; - readonly paramCount: number; - readonly pointCount: number; - // (undocumented) - range(transform?: Transform, result?: Range3d): Range3d; - // (undocumented) - reverseIndices(): void; - // (undocumented) - reverseNormals(): void; - setNewFaceData(endFacetIndex?: number): boolean; - terminateFacet(validateAllIndices?: boolean): any; - tryGetFaceData(i: number): FacetFaceData | undefined; - tryTransformInPlace(transform: Transform): boolean; - // (undocumented) - readonly zeroTerminatedIndexCount: number; -} - -// @public (undocumented) -class IndexedPolyfaceVisitor extends PolyfaceData, implements PolyfaceVisitor { - // (undocumented) - clientAuxIndex(i: number): number; - // (undocumented) - clientColorIndex(i: number): number; - // (undocumented) - clientNormalIndex(i: number): number; - // (undocumented) - clientParamIndex(i: number): number; - // (undocumented) - clientPointIndex(i: number): number; - // (undocumented) - static create(polyface: IndexedPolyface, numWrap: number): IndexedPolyfaceVisitor; - // (undocumented) - currentReadIndex(): number; - // (undocumented) - moveToNextFacet(): boolean; - // (undocumented) - moveToReadIndex(facetIndex: number): boolean; - // (undocumented) - readonly numEdgesThisFacet: number; - // (undocumented) - reset(): void; - tryGetDistanceParameter(index: number, result?: Point2d): Point2d | undefined; - tryGetNormalizedParameter(index: number, result?: Point2d): Point2d | undefined; -} - -// @public -class IndexedXYCollection { - // (undocumented) - abstract atPoint2dIndex(index: number, result?: Point2d): Point2d | undefined; - // (undocumented) - abstract atVector2dIndex(index: number, result?: Vector2d): Vector2d | undefined; - // (undocumented) - abstract crossProductIndexIndexIndex(origin: number, indexA: number, indexB: number): number | undefined; - // (undocumented) - abstract crossProductXAndYIndexIndex(origin: XAndY, indexA: number, indexB: number): number | undefined; - readonly length: number; - // (undocumented) - abstract vectorIndexIndex(indexA: number, indexB: number, result?: Vector2d): Vector2d | undefined; - // (undocumented) - abstract vectorXAndYIndex(origin: XAndY, indexB: number, result?: Vector2d): Vector2d | undefined; -} - -// @public -class IndexedXYZCollection { - // (undocumented) - abstract accumulateCrossProductIndexIndexIndex(origin: number, indexA: number, indexB: number, result: Vector3d): void; - // (undocumented) - abstract atPoint3dIndex(index: number, result?: Point3d): Point3d | undefined; - // (undocumented) - abstract atVector3dIndex(index: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - abstract crossProductIndexIndexIndex(origin: number, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - abstract crossProductXYAndZIndexIndex(origin: XYAndZ, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; - readonly length: number; - // (undocumented) - abstract vectorIndexIndex(indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - abstract vectorXYAndZIndex(origin: XYAndZ, indexB: number, result?: Vector3d): Vector3d | undefined; -} - -// @public -enum InverseMatrixState { - // (undocumented) - inverseStored = 1, - // (undocumented) - singular = 2, - // (undocumented) - unknown = 0 -} - -// @public (undocumented) -interface IsNullCheck { - // (undocumented) - isNull(): boolean; -} - -// @public -interface IStrokeHandler { - announceBezierCurve?(bezier: BezierCurveBase, numStrokes: number, parent: CurvePrimitive, spandex: number, fraction0: number, fraction1: number): void; - announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void; - // (undocumented) - announcePointTangent(xyz: Point3d, fraction: number, tangent: Vector3d): void; - announceSegmentInterval(cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, fraction0: number, fraction1: number): void; - // (undocumented) - endCurvePrimitive(cp: CurvePrimitive): void; - // (undocumented) - endParentCurvePrimitive(cp: CurvePrimitive): void; - // (undocumented) - startCurvePrimitive(cp: CurvePrimitive): void; - startParentCurvePrimitive(cp: CurvePrimitive): void; -} - -// WARNING: knotTolerance has incomplete type information -// @public -class KnotVector { - // (undocumented) - baseKnotFractionToKnot(knotIndex0: number, localFraction: number): number; - clone(): KnotVector; - copyKnots(includeExtraEndKnot: boolean): number[]; - static create(knotArray: number[] | Float64Array, degree: number, skipFirstAndLast?: boolean): KnotVector; - createBasisArray(): Float64Array; - static createUniformClamped(numPoles: number, degree: number, a0: number, a1: number): KnotVector; - static createUniformWrapped(numInterval: number, degree: number, a0: number, a1: number): KnotVector; - // (undocumented) - degree: number; - evaluateBasisFunctions(knotIndex0: number, u: number, f: Float64Array): void; - evaluateBasisFunctions1(knotIndex0: number, u: number, f: Float64Array, df: Float64Array, ddf?: Float64Array): void; - // (undocumented) - fractionToKnot(fraction: number): number; - grevilleKnot(spanIndex: number): number; - // (undocumented) - isAlmostEqual(other: KnotVector): boolean; - isIndexOfRealSpan(spanIndex: number): boolean; - // (undocumented) - readonly knotLength01: number; - // (undocumented) - knots: Float64Array; - // (undocumented) - knotToLeftKnotIndex(u: number): number; - // (undocumented) - readonly leftKnot: number; - // (undocumented) - readonly leftKnotIndex: number; - // (undocumented) - readonly numSpans: number; - // (undocumented) - reflectKnots(): void; - // (undocumented) - readonly rightKnot: number; - // (undocumented) - readonly rightKnotIndex: number; - // (undocumented) - setKnots(knots: number[] | Float64Array, skipFirstAndLast?: boolean): void; - // (undocumented) - spanFractionToFraction(spanIndex: number, localFraction: number): number; - // (undocumented) - spanFractionToKnot(spanIndex: number, localFraction: number): number; - spanIndexToLeftKnotIndex(spanIndex: number): number; - // (undocumented) - spanIndexToSpanLength(spanIndex: number): number; - // (undocumented) - testClosable(mode?: BSplineWrapMode): boolean; - wrappable: BSplineWrapMode; -} - -// @public -class LinearSweep extends SolidPrimitive { - // (undocumented) - clone(): LinearSweep; - // (undocumented) - cloneSweepVector(): Vector3d; - // (undocumented) - cloneTransformed(transform: Transform): LinearSweep; - // (undocumented) - constantVSection(vFraction: number): CurveCollection | undefined; - // (undocumented) - static create(contour: CurveCollection, direction: Vector3d, capped: boolean): LinearSweep | undefined; - static createZSweep(xyPoints: XAndY[], z: number, zSweep: number, capped: boolean): LinearSweep | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - getCurvesRef(): CurveCollection; - // (undocumented) - getSweepContourRef(): SweepContour; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class LineSegment3d extends CurvePrimitive, implements BeJSONFunctions { - announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - // (undocumented) - appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; - clone(): LineSegment3d; - clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined; - cloneTransformed(transform: Transform): CurvePrimitive; - // (undocumented) - closestPoint(spacePoint: Point3d, extend: boolean, result?: CurveLocationDetail): CurveLocationDetail; - computeStrokeCountForOptions(options?: StrokeOptions): number; - static create(point0: Point3d, point1: Point3d, result?: LineSegment3d): LineSegment3d; - static createXYXY(x0: number, y0: number, x1: number, y1: number, z?: number, result?: LineSegment3d): LineSegment3d; - static createXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, result?: LineSegment3d): LineSegment3d; - // (undocumented) - curveLength(): number; - // (undocumented) - curveLengthBetweenFractions(fraction0: number, fraction1: number): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(result?: Point3d): Point3d; - extendRange(range: Range3d, transform?: Transform): void; - // (undocumented) - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - // (undocumented) - static fromJSON(json?: any): LineSegment3d; - getFractionToDistanceScale(): number | undefined; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isExtensibleFractionSpace: boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - // (undocumented) - readonly point0Ref: Point3d; - // (undocumented) - readonly point1Ref: Point3d; - // (undocumented) - quickLength(): number; - reverseInPlace(): void; - set(point0: Point3d, point1: Point3d): void; - setFrom(other: LineSegment3d): void; - setFromJSON(json?: any): void; - setRefs(point0: Point3d, point1: Point3d): void; - // (undocumented) - startPoint(result?: Point3d): Point3d; - toJSON(): any; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class LineString3d extends CurvePrimitive, implements BeJSONFunctions { - addClosurePoint(): void; - addDerivative(vector: Vector3d): void; - addFraction(fraction: number): void; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - addMappedStrokesToLineString3D(map: StrokeCountMap, destLinestring: LineString3d): number; - addPoint(point: Point3d): void; - // (undocumented) - addPoints(...points: any[]): void; - addPointXYZ(x: number, y: number, z?: number): void; - // (undocumented) - addSteppedPoints(source: GrowableXYZArray, pointIndex0: number, step: number, numAdd: number): void; - addSurfaceNormal(vector: Vector3d): void; - addUVParam(uvParam: XAndY): void; - addUVParamAsUV(u: number, v: number): void; - announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - appendFractionalStrokePoints(curve: CurvePrimitive, numStrokes: number, fraction0?: number, fraction1?: number, include01?: boolean): void; - appendFractionToPoint(curve: CurvePrimitive, fraction: number): void; - // (undocumented) - appendInterpolatedStrokePoints(numStrokes: number, point0: Point3d, point1: Point3d, include01: boolean): void; - appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; - appendStrokePoint(point: Point3d, fraction?: number): void; - clear(): void; - // (undocumented) - clone(): LineString3d; - clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined; - // (undocumented) - cloneTransformed(transform: Transform): CurvePrimitive; - // (undocumented) - closestPoint(spacePoint: Point3d, extend: boolean, result?: CurveLocationDetail): CurveLocationDetail; - // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) - computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; - computeStrokeCountForOptions(options?: StrokeOptions): number; - computeUVFromXYZTransform(transform: Transform): void; - // (undocumented) - static create(...points: any[]): LineString3d; - static createFloat64Array(xyzData: Float64Array): LineString3d; - static createForStrokes(capacity: number | undefined, options: StrokeOptions | undefined): LineString3d; - // (undocumented) - static createPoints(points: Point3d[]): LineString3d; - // (undocumented) - static createRectangleXY(point0: Point3d, ax: number, ay: number, closed?: boolean): LineString3d; - static createRegularPolygonXY(center: Point3d, edgeCount: number, radius: number, radiusToVertices?: boolean): LineString3d; - // (undocumented) - static createXY(points: XAndY[], z: number, enforceClosure?: boolean): LineString3d; - // (undocumented) - curveLength(): number; - // (undocumented) - curveLengthBetweenFractions(fraction0: number, fraction1: number): number; - derivativeAt(i: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(): Point3d; - ensureEmptyNormalIndices(): GrowableFloat64Array; - ensureEmptyPointIndices(): GrowableFloat64Array; - ensureEmptySurfaceNormals(): GrowableXYZArray; - ensureEmptyUVIndices(): GrowableFloat64Array; - ensureEmptyUVParams(): GrowableXYArray; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - readonly fractions: GrowableFloat64Array | undefined; - fractionToFrenetFrame(fraction: number, result?: Transform): Transform; - // (undocumented) - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - // (undocumented) - static fromJSON(json?: any): LineString3d; - getIndexedSegment(index: number): LineSegment3d | undefined; - initializeDerivativeArray(retainArrayContentsIfAlreadyPresent?: boolean): void; - initializeFractionArray(retainArrayContentsIfAlreadyPresent?: boolean): void; - initializeUVParamsArray(retainArrayContentsIfAlreadyPresent?: boolean): void; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isExtensibleFractionSpace: boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - readonly isPhysicallyClosed: boolean; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: false, result?: CurveLocationDetail): CurveLocationDetail; - // (undocumented) - readonly normalIndices: GrowableFloat64Array | undefined; - // (undocumented) - numPoints(): number; - // (undocumented) - readonly packedDerivatives: GrowableXYZArray | undefined; - readonly packedPoints: GrowableXYZArray; - // (undocumented) - readonly packedSurfaceNormals: GrowableXYZArray | undefined; - // (undocumented) - readonly packedUVParams: GrowableXYArray | undefined; - // (undocumented) - readonly paramIndices: GrowableFloat64Array | undefined; - pointAt(i: number, result?: Point3d): Point3d | undefined; - // (undocumented) - readonly pointIndices: GrowableFloat64Array | undefined; - readonly points: Point3d[]; - popPoint(): void; - // (undocumented) - quickLength(): number; - quickUnitNormal(result?: Vector3d): Vector3d | undefined; - // (undocumented) - reverseInPlace(): void; - segmentIndexAndLocalFractionToGlobalFraction(index: number, localFraction: number): number; - // (undocumented) - setFrom(other: LineString3d): void; - // (undocumented) - setFromJSON(json?: any): void; - // (undocumented) - startPoint(): Point3d; - surfaceNormalAt(i: number, result?: Vector3d): Vector3d | undefined; - toJSON(): any; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; - vectorBetween(i: number, j: number, result?: Vector3d): Vector3d | undefined; -} - -// @public -class Loop extends CurveChain { - constructor(); - // (undocumented) - announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; - // (undocumented) - cloneEmptyPeer(): Loop; - // (undocumented) - cloneStroked(options?: StrokeOptions): AnyCurve; - static create(...curves: CurvePrimitive[]): Loop; - static createArray(curves: CurvePrimitive[]): Loop; - // (undocumented) - static createPolygon(points: Point3d[]): Loop; - // (undocumented) - cyclicCurvePrimitive(index: number): CurvePrimitive | undefined; - // (undocumented) - dgnBoundaryType(): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - isInner: boolean; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; -} - -// @public -class Map4d implements BeJSONFunctions { - // (undocumented) - clone(): Map4d; - static createBoxMap(lowA: Point3d, highA: Point3d, lowB: Point3d, highB: Point3d, result?: Map4d): Map4d | undefined; - static createIdentity(): Map4d; - static createRefs(matrix0: Matrix4d, matrix1: Matrix4d): Map4d; - static createTransform(transform0: Transform, transform1?: Transform): Map4d | undefined; - static createVectorFrustum(origin: Point3d, uVector: Vector3d, vVector: Vector3d, wVector: Vector3d, fraction: number): Map4d | undefined; - static fromJSON(json?: any): Map4d; - // (undocumented) - isAlmostEqual(other: Map4d): boolean; - // (undocumented) - multiplyMapMap(other: Map4d): Map4d; - // (undocumented) - reverseInPlace(): void; - sandwich0This1(other: Map4d): Map4d; - sandwich1This0(other: Map4d): Map4d; - setFrom(other: Map4d): void; - setFromJSON(json: any): void; - setIdentity(): void; - // (undocumented) - toJSON(): any; - // (undocumented) - readonly transform0: Matrix4d; - // (undocumented) - readonly transform1: Matrix4d; -} - -// @public -class Matrix3d implements BeJSONFunctions { - constructor(coffs?: Float64Array); - addScaledInPlace(other: Matrix3d, scale: number): void; - applyGivensColumnOp(i: number, j: number, c: number, s: number): void; - at(row: number, column: number): number; - axisOrderCrossProductsInPlace(axisOrder: AxisOrder): void; - // (undocumented) - clone(result?: Matrix3d): Matrix3d; - // (undocumented) - coffs: Float64Array; - // (undocumented) - columnX(result?: Vector3d): Vector3d; - // (undocumented) - columnXDotColumnY(): number; - // (undocumented) - columnXMagnitude(): number; - // (undocumented) - columnXMagnitudeSquared(): number; - // (undocumented) - columnXYCrossProductMagnitude(): number; - // (undocumented) - columnY(result?: Vector3d): Vector3d; - // (undocumented) - columnYMagnitude(): number; - // (undocumented) - columnYMagnitudeSquared(): number; - // (undocumented) - columnZ(result?: Vector3d): Vector3d; - // (undocumented) - columnZCrossVector(vector: XYZ, result?: Vector3d): Vector3d; - // (undocumented) - columnZMagnitude(): number; - // (undocumented) - columnZMagnitudeSquared(): number; - computeCachedInverse(useCacheIfAvailable: boolean): boolean; - conditionNumber(): number; - static create90DegreeRotationAroundAxis(axisIndex: number): Matrix3d; - static createCapture(coffs: Float64Array, inverseCoffs?: Float64Array): Matrix3d; - static createColumns(vectorU: Vector3d, vectorV: Vector3d, vectorW: Vector3d, result?: Matrix3d): Matrix3d; - // (undocumented) - static createColumnsInAxisOrder(axisOrder: AxisOrder, columnA: Vector3d, columnB: Vector3d, columnC: Vector3d | undefined, result?: Matrix3d): Matrix3d; - static createColumnsXYW(vectorU: XAndY, uz: number, vectorV: XAndY, vz: number, vectorW: XAndY, wz: number, result?: Matrix3d): Matrix3d; - static createDirectionalScale(direction: Vector3d, scale: number, result?: Matrix3d): Matrix3d; - // (undocumented) - static createFromQuaternion(quat: Point4d): Matrix3d; - // (undocumented) - static createIdentity(result?: Matrix3d): Matrix3d; - static createPartialRotationVectorToVector(vectorA: Vector3d, fraction: number, vectorB: Vector3d, result?: Matrix3d): Matrix3d | undefined; - static createPerpendicularVectorFavorPlaneContainingZ(vector: Vector3d, result?: Vector3d): Vector3d; - static createPerpendicularVectorFavorXYPlane(vector: Vector3d, result?: Vector3d): Vector3d; - static createRigidFromColumns(vectorA: Vector3d, vectorB: Vector3d, axisOrder: AxisOrder, result?: Matrix3d): Matrix3d | undefined; - static createRigidFromMatrix3d(source: Matrix3d, axisOrder?: AxisOrder, result?: Matrix3d): Matrix3d | undefined; - static createRigidHeadsUp(vectorA: Vector3d, axisOrder?: AxisOrder, result?: Matrix3d): Matrix3d; - static createRigidViewAxesZTowardsEye(x: number, y: number, z: number, result?: Matrix3d): Matrix3d; - // (undocumented) - static createRotationAroundAxisIndex(axisIndex: AxisIndex, angle: Angle, result?: Matrix3d): Matrix3d; - // (undocumented) - static createRotationAroundVector(axis: Vector3d, angle: Angle, result?: Matrix3d): Matrix3d | undefined; - // (undocumented) - static createRotationVectorToVector(vectorA: Vector3d, vectorB: Vector3d, result?: Matrix3d): Matrix3d | undefined; - static createRows(vectorU: Vector3d, vectorV: Vector3d, vectorW: Vector3d, result?: Matrix3d): Matrix3d; - // (undocumented) - static createRowValues(axx: number, axy: number, axz: number, ayx: number, ayy: number, ayz: number, azx: number, azy: number, azz: number, result?: Matrix3d): Matrix3d; - static createScale(scaleFactorX: number, scaleFactorY: number, scaleFactorZ: number, result?: Matrix3d): Matrix3d; - static createShuffledColumns(vectorU: Vector3d, vectorV: Vector3d, vectorW: Vector3d, axisOrder: AxisOrder, result?: Matrix3d): Matrix3d; - static createStandardWorldToView(index: StandardViewIndex, invert?: boolean, result?: Matrix3d): Matrix3d; - static createUniformScale(scaleFactor: number): Matrix3d; - static createViewedAxes(rightVector: Vector3d, upVector: Vector3d, leftNoneRight?: number, topNoneBottom?: number): Matrix3d | undefined; - // (undocumented) - static createZero(): Matrix3d; - determinant(): number; - // (undocumented) - dotColumnX(vector: XYZ): number; - // (undocumented) - dotColumnY(vector: XYZ): number; - // (undocumented) - dotColumnZ(vector: XYZ): number; - // (undocumented) - dotRowX(vector: XYZ): number; - // (undocumented) - dotRowXXYZ(x: number, y: number, z: number): number; - // (undocumented) - dotRowY(vector: XYZ): number; - // (undocumented) - dotRowYXYZ(x: number, y: number, z: number): number; - // (undocumented) - dotRowZ(vector: XYZ): number; - // (undocumented) - dotRowZXYZ(x: number, y: number, z: number): number; - factorPerpendicularColumns(matrixC: Matrix3d, matrixU: Matrix3d): boolean; - factorRigidWithSignedScale(): { - rigidAxes: Matrix3d; - scale: number; - } | undefined; - fastSymmetricEigenvalues(leftEigenvectors: Matrix3d, lambda: Vector3d): boolean; - // (undocumented) - static flatIndexOf(row: number, column: number): number; - freeze(): void; - // (undocumented) - static fromJSON(json?: Matrix3dProps): Matrix3d; - getAxisAndAngleOfRotation: { - angle: Angle; - axis: Vector3d; - ok: boolean; - } - getColumn(columnIndex: number, result?: Vector3d): Vector3d; - getRow(columnIndex: number, result?: Vector3d): Vector3d; - static readonly identity: Matrix3d; - indexedColumnWithWeight(index: number, weight: number, result?: Point4d): Point4d; - inverse(result?: Matrix3d): Matrix3d | undefined; - // (undocumented) - inverseCoffs: Float64Array | undefined; - // (undocumented) - inverseState: InverseMatrixState; - isAlmostEqual(other: Matrix3d, tol?: number): boolean; - readonly isDiagonal: boolean; - isExactEqual(other: Matrix3d): boolean; - readonly isIdentity: boolean; - isRigid(allowMirror?: boolean): boolean; - readonly isSignedPermutation: boolean; - // (undocumented) - isSingular(): boolean; - readonly isUpperTriangular: boolean; - readonly isXY: boolean; - maxAbs(): number; - maxDiff(other: Matrix3d): number; - multiplyInverse(vector: Vector3d, result?: Vector3d): Vector3d | undefined; - multiplyInverseTranspose(vector: Vector3d, result?: Vector3d): Vector3d | undefined; - multiplyInverseXYZAsPoint3d(x: number, y: number, z: number, result?: Point3d): Point3d | undefined; - multiplyInverseXYZAsVector3d(x: number, y: number, z: number, result?: Vector3d): Vector3d | undefined; - multiplyMatrixMatrix(other: Matrix3d, result?: Matrix3d): Matrix3d; - multiplyMatrixMatrixTranspose(other: Matrix3d, result?: Matrix3d): Matrix3d; - multiplyMatrixTransform(other: Transform, result?: Transform): Transform; - multiplyMatrixTransposeMatrix(other: Matrix3d, result?: Matrix3d): Matrix3d; - // (undocumented) - multiplyTransposeVector(vector: Vector3d, result?: Vector3d): Vector3d; - multiplyTransposeVectorInPlace(xyzData: XYZ): void; - multiplyTransposeXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; - multiplyVector(vector: Vector3d, result?: Vector3d): Vector3d; - multiplyVectorArrayInPlace(data: XYZ[]): void; - multiplyVectorInPlace(xyzData: XYZ): void; - multiplyXY(x: number, y: number, result?: Vector3d): Vector3d; - multiplyXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; - multiplyXYZtoXYZ(xyz: XYZ, result: XYZ): XYZ; - normalizeColumnsInPlace(originalMagnitudes?: Vector3d): boolean; - normalizeRowsInPlace(originalMagnitudes?: Vector3d): boolean; - // (undocumented) - static numComputeCache: number; - // (undocumented) - static numUseCache: number; - // (undocumented) - originPlusMatrixTimesXY(origin: XYZ, x: number, y: number, result?: Point3d): Point3d; - rowX(result?: Vector3d): Vector3d; - // (undocumented) - rowXMagnitude(): number; - rowY(result?: Vector3d): Vector3d; - // (undocumented) - rowYMagnitude(): number; - rowZ(result?: Vector3d): Vector3d; - // (undocumented) - rowZMagnitude(): number; - sameDiagonalScale(): number | undefined; - scale(scale: number, result?: Matrix3d): Matrix3d; - scaleColumns(scaleX: number, scaleY: number, scaleZ: number, result?: Matrix3d): Matrix3d; - scaleColumnsInPlace(scaleX: number, scaleY: number, scaleZ: number): void; - scaleRows(scaleX: number, scaleY: number, scaleZ: number, result?: Matrix3d): Matrix3d; - setAt(row: number, column: number, value: number): void; - setColumn(columnIndex: number, value: Vector3d | undefined): void; - setColumns(vectorX: Vector3d | undefined, vectorY: Vector3d | undefined, vectorZ?: Vector3d | undefined): void; - setColumnsPoint4dXYZ(vectorU: Point4d, vectorV: Point4d, vectorW: Point4d): void; - // (undocumented) - setFrom(other: Matrix3d): void; - // (undocumented) - setFromJSON(json?: Matrix3dProps): void; - // (undocumented) - setIdentity(): void; - // (undocumented) - setRow(columnIndex: number, value: Vector3d): void; - setRowValues(axx: number, axy: number, axz: number, ayx: number, ayy: number, ayz: number, azx: number, azy: number, azz: number): void; - // (undocumented) - setZero(): void; - sumDiagonal(): number; - sumDiagonalSquares(): number; - sumSkewSquares(): number; - sumSquares(): number; - symmetricEigenvalues(leftEigenvectors: Matrix3d, lambda: Vector3d): boolean; - testPerpendicularUnitRowsAndColumns(): boolean; - toJSON(): Matrix3dProps; - // (undocumented) - toQuaternion(): Point4d; - transpose(result?: Matrix3d): Matrix3d; - transposeInPlace(): void; - // (undocumented) - static useCachedInverse: boolean; - // (undocumented) - static xyPlusMatrixTimesXY(origin: XAndY, matrix: Matrix3d, vector: XAndY, result?: Point2d): Point2d; - // (undocumented) - static xyzMinusMatrixTimesXYZ(origin: XYZ, matrix: Matrix3d, vector: XYZ, result?: Point3d): Point3d; - // (undocumented) - static xyzPlusMatrixTimesCoordinates(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, result?: Point3d): Point3d; - static xyzPlusMatrixTimesCoordinatesToFloat64Array(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, result?: Float64Array): Float64Array; - static xyzPlusMatrixTimesWeightedCoordinates(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, w: number, result?: Point4d): Point4d; - static xyzPlusMatrixTimesWeightedCoordinatesToFloat64Array(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, w: number, result?: Float64Array): Float64Array; - // (undocumented) - static xyzPlusMatrixTimesXYZ(origin: XYZ, matrix: Matrix3d, vector: XYAndZ, result?: Point3d): Point3d; -} - -// @public -class Matrix4d implements BeJSONFunctions { - addMomentsInPlace(x: number, y: number, z: number, w: number): void; - addScaledInPlace(other: Matrix4d, scale?: number): void; - readonly asTransform: Transform | undefined; - // (undocumented) - atIJ(rowIndex: number, columnIndex: number): number; - // (undocumented) - clone(): Matrix4d; - cloneTransposed(result?: Matrix4d): Matrix4d; - // (undocumented) - columnDotColumn(columnIndexThis: number, other: Matrix4d, columnIndexOther: number): number; - // (undocumented) - columnDotRow(columnIndexThis: number, other: Matrix4d, rowIndexOther: number): number; - // (undocumented) - columnW(): Point4d; - // (undocumented) - columnX(): Point4d; - // (undocumented) - columnY(): Point4d; - // (undocumented) - columnZ(): Point4d; - static createBoxToBox(lowA: Point3d, highA: Point3d, lowB: Point3d, highB: Point3d, result?: Matrix4d): Matrix4d | undefined; - static createIdentity(result?: Matrix4d): Matrix4d; - createInverse(): Matrix4d | undefined; - static createRowValues(cxx: number, cxy: number, cxz: number, cxw: number, cyx: number, cyy: number, cyz: number, cyw: number, czx: number, czy: number, czz: number, czw: number, cwx: number, cwy: number, cwz: number, cww: number, result?: Matrix4d): Matrix4d; - static createTransform(source: Transform, result?: Matrix4d): Matrix4d; - static createTranslationAndScaleXYZ(tx: number, ty: number, tz: number, scaleX: number, scaleY: number, scaleZ: number, result?: Matrix4d): Matrix4d; - static createTranslationXYZ(x: number, y: number, z: number, result?: Matrix4d): Matrix4d; - static createZero(result?: Matrix4d): Matrix4d; - diagonal(): Point4d; - // (undocumented) - static fromJSON(json?: Matrix4dProps): Matrix4d; - getSteppedPoint(i0: number, step: number, result?: Point4d): Point4d; - // (undocumented) - readonly hasPerspective: boolean; - // (undocumented) - isAlmostEqual(other: Matrix4d): boolean; - isIdentity(tol?: number): boolean; - matrixPart(): Matrix3d; - maxAbs(): number; - maxDiff(other: Matrix4d): number; - multiplyBlockedFloat64ArrayInPlace(data: Float64Array): void; - multiplyMatrixMatrix(other: Matrix4d, result?: Matrix4d): Matrix4d; - multiplyMatrixMatrixTranspose(other: Matrix4d, result?: Matrix4d): Matrix4d; - multiplyMatrixTransposeMatrix(other: Matrix4d, result?: Matrix4d): Matrix4d; - multiplyPoint3d(pt: XYAndZ, w: number, result?: Point4d): Point4d; - multiplyPoint3dArray(pts: XYAndZ[], results: Point4d[], w?: number): void; - multiplyPoint3dArrayQuietNormalize(points: Point3d[]): void; - multiplyPoint3dQuietNormalize(point: XYAndZ, result?: Point3d): Point3d; - multiplyPoint4d(point: Point4d, result?: Point4d): Point4d; - multiplyPoint4dArrayQuietRenormalize(pts: Point4d[], results: Point3d[]): void; - multiplyTransposePoint4d(point: Point4d, result?: Point4d): Point4d; - multiplyTransposeXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; - multiplyXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; - multiplyXYZWQuietRenormalize(x: number, y: number, z: number, w: number, result?: Point3d): Point3d; - // (undocumented) - rowArrays(f?: (value: number) => any): any; - // (undocumented) - rowDotColumn(rowIndex: number, other: Matrix4d, columnIndex: number): number; - // (undocumented) - rowDotRow(rowIndexThis: number, other: Matrix4d, rowIndexOther: number): number; - rowOperation(rowIndexA: number, rowIndexB: number, firstColumnIndex: number, scale: number): void; - // (undocumented) - rowW(): Point4d; - // (undocumented) - rowX(): Point4d; - // (undocumented) - rowY(): Point4d; - // (undocumented) - rowZ(): Point4d; - scaleRowsInPlace(ax: number, ay: number, az: number, aw: number): void; - // (undocumented) - setFrom(other: Matrix4d): void; - // (undocumented) - setFromJSON(json?: Matrix4dProps): void; - setIdentity(): void; - setOriginAndVectors(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d): void; - setZero(): void; - toJSON(): Matrix4dProps; - weight(): number; -} - -// @public -class MomentData { - // (undocumented) - accumulatePointMomentsFromOrigin(points: Point3d[]): void; - // (undocumented) - clearSums(origin?: Point3d): void; - static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined; - localToWorldMap: Transform; - // (undocumented) - static momentTensorFromInertiaProducts(products: Matrix3d): Matrix3d; - // (undocumented) - origin: Point3d; - // (undocumented) - static pointsToPrincipalAxes(points: Point3d[]): MomentData; - radiusOfGyration: Vector3d; - // (undocumented) - shiftSumsToCentroid(): boolean; - // (undocumented) - static sortColumnsForIncreasingMoments(axes: Matrix3d, moments: Vector3d): void; - // (undocumented) - sums: Matrix4d; -} - -// @public (undocumented) -class Newton1dUnbounded extends AbstractNewtonIterator { - constructor(func: NewtonEvaluatorRtoRD); - // (undocumented) - applyCurrentStep(): boolean; - computeStep(): boolean; - // (undocumented) - currentStepSize(): number; - // (undocumented) - getX(): number; - // (undocumented) - setTarget(y: number): void; - // (undocumented) - setX(x: number): boolean; -} - -// @public -class Newton1dUnboundedApproximateDerivative extends AbstractNewtonIterator { - constructor(func: NewtonEvaluatorRtoR); - // (undocumented) - applyCurrentStep(): boolean; - computeStep(): boolean; - // (undocumented) - currentStepSize(): number; - // (undocumented) - derivativeH: number; - // (undocumented) - getX(): number; - // (undocumented) - setX(x: number): boolean; -} - -// @public -class Newton2dUnboundedWithDerivative extends AbstractNewtonIterator { - constructor(func: NewtonEvaluatorRRtoRRD); - // (undocumented) - applyCurrentStep(): boolean; - computeStep(): boolean; - // (undocumented) - currentStepSize(): number; - // (undocumented) - getU(): number; - // (undocumented) - getV(): number; - // (undocumented) - setUV(x: number, y: number): boolean; -} - -// @public -class NewtonEvaluatorRRtoRRD { - constructor(); - currentF: Plane3dByOriginAndVectors; - abstract evaluate(x: number, y: number): boolean; -} - -// @public -class NewtonEvaluatorRtoR { - // (undocumented) - currentF: number; - // (undocumented) - abstract evaluate(x: number): boolean; -} - -// @public -class NewtonEvaluatorRtoRD { - // (undocumented) - currentdFdX: number; - // (undocumented) - currentF: number; - // (undocumented) - abstract evaluate(x: number): boolean; -} - -// @public -class NullGeometryHandler extends GeometryHandler { - // (undocumented) - handleArc3d(_g: Arc3d): any; - // (undocumented) - handleBagOfCurves(_g: BagOfCurves): any; - // (undocumented) - handleBezierCurve3d(_g: BezierCurve3d): any; - // (undocumented) - handleBezierCurve3dH(_g: BezierCurve3dH): any; - // (undocumented) - handleBox(_g: Box): any; - // (undocumented) - handleBSplineCurve3d(_g: BSplineCurve3d): any; - // (undocumented) - handleBSplineCurve3dH(_g: BSplineCurve3dH): any; - // (undocumented) - handleBSplineSurface3d(_g: BSplineSurface3d): any; - // (undocumented) - handleBSplineSurface3dH(_g: BSplineSurface3dH): any; - // (undocumented) - handleCone(_g: Cone): any; - // (undocumented) - handleCoordinateXYZ(_g: CoordinateXYZ): any; - // (undocumented) - handleCurveCollection(_g: CurveCollection): any; - // (undocumented) - handleIndexedPolyface(_g: IndexedPolyface): any; - // (undocumented) - handleLinearSweep(_g: LinearSweep): any; - // (undocumented) - handleLineSegment3d(_g: LineSegment3d): any; - // (undocumented) - handleLineString3d(_g: LineString3d): any; - // (undocumented) - handleLoop(_g: Loop): any; - // (undocumented) - handleParityRegion(_g: ParityRegion): any; - // (undocumented) - handlePath(_g: Path): any; - // (undocumented) - handlePointString3d(_g: PointString3d): any; - // (undocumented) - handleRotationalSweep(_g: RotationalSweep): any; - // (undocumented) - handleRuledSweep(_g: RuledSweep): any; - // (undocumented) - handleSphere(_g: Sphere): any; - // (undocumented) - handleTorusPipe(_g: TorusPipe): any; - // (undocumented) - handleTransitionSpiral(_g: TransitionSpiral3d): any; - // (undocumented) - handleUnionRegion(_g: UnionRegion): any; -} - -// @public (undocumented) -class NumberArray { - static isAlmostEqual(dataA: number[] | Float64Array | undefined, dataB: number[] | Float64Array | undefined, tolerance: number): boolean; - // (undocumented) - static isCoordinateInArray(x: number, data: number[] | undefined): boolean; - static isExactEqual(dataA: any[] | Float64Array | undefined, dataB: any[] | Float64Array | undefined): boolean; - // (undocumented) - static maxAbsArray(values: number[]): number; - // (undocumented) - static maxAbsDiff(dataA: number[], dataB: number[]): number; - // (undocumented) - static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number; - // (undocumented) - static maxAbsTwo(a1: number, a2: number): number; - static preciseSum(data: number[]): number; - static sum(data: number[] | Float64Array): number; -} - -// @public -class Order2Bezier extends BezierCoffs { - constructor(f0?: number, f1?: number); - basisFunctions(u: number, result?: Float64Array): Float64Array; - clone(): Order2Bezier; - evaluate(u: number): number; - roots(targetValue: number, restrictTo01: boolean): number[] | undefined; - // (undocumented) - solve(rightHandSide: number): number | undefined; - static solveCoffs(a0: number, a1: number): number | undefined; - sumBasisFunctionDerivatives(_u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; - sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; -} - -// @public -class Order3Bezier extends BezierCoffs { - constructor(f0?: number, f1?: number, f2?: number); - addSquareLinear(f0: number, f1: number, a: number): void; - basisFunctions(u: number, result?: Float64Array): Float64Array; - // (undocumented) - clone(): Order3Bezier; - evaluate(u: number): number; - // (undocumented) - roots(targetValue: number, restrictTo01: boolean): number[] | undefined; - sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; - sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; -} - -// @public -class Order4Bezier extends BezierCoffs { - constructor(f0?: number, f1?: number, f2?: number, f3?: number); - basisFunctions(u: number, result?: Float64Array): Float64Array; - // (undocumented) - clone(): Order4Bezier; - static createFromDegree3PowerPolynomial(source: Degree3PowerPolynomial): Order4Bezier; - // (undocumented) - static createProductOrder3Order2(factorA: Order3Bezier, factorB: Order2Bezier): Order4Bezier; - evaluate(u: number): number; - // (undocumented) - realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): undefined; - sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; - sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; -} - -// @public -class Order5Bezier extends BezierCoffs { - constructor(f0?: number, f1?: number, f2?: number, f3?: number, f4?: number); - // (undocumented) - addConstant(a: number): void; - // (undocumented) - addProduct(f: Order3Bezier, g: Order3Bezier, a: number): void; - basisFunctions(u: number, result?: Float64Array): Float64Array; - // (undocumented) - clone(): Order5Bezier; - static createFromDegree4PowerPolynomial(source: Degree4PowerPolynomial): Order5Bezier; - evaluate(u: number): number; - // (undocumented) - realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): void; - sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; - sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; -} - -// @public -class OrderedRotationAngles { - static createAngles(xRotation: Angle, yRotation: Angle, zRotation: Angle, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; - static createDegrees(xDegrees: number, yDegrees: number, zDegrees: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; - static createFromMatrix3d(matrix: Matrix3d, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; - static createRadians(xRadians: number, yRadians: number, zRadians: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; - // (undocumented) - readonly order: AxisOrder; - toMatrix3d(result?: Matrix3d): Matrix3d; - // (undocumented) - static treatVectorsAsColumns: boolean; - // (undocumented) - readonly xAngle: Angle; - // (undocumented) - readonly xDegrees: number; - // (undocumented) - readonly xRadians: number; - // (undocumented) - readonly yAngle: Angle; - // (undocumented) - readonly yDegrees: number; - // (undocumented) - readonly yRadians: number; - // (undocumented) - readonly zAngle: Angle; - // (undocumented) - readonly zDegrees: number; - // (undocumented) - readonly zRadians: number; -} - -// @public -interface PackedPointGrid { - numCartesianDimensions: number; - points: number[][][]; - weightStyle?: WeightStyle; -} - -// @public -class PackedPointsWithIndex { - constructor(numOldIndexEntry: number); - // (undocumented) - growablePackedPoints: GrowableXYZArray | undefined; - // (undocumented) - static invalidIndex: number; - // (undocumented) - oldToNew: Uint32Array; - // (undocumented) - packedPoints: Point3d[]; - updateIndices(indices: number[]): boolean; -} - -// @public -class ParityRegion extends CurveCollection { - constructor(); - // (undocumented) - protected _children: Loop[]; - // (undocumented) - announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; - // (undocumented) - readonly children: Loop[]; - // (undocumented) - clone(): ParityRegion; - // (undocumented) - cloneEmptyPeer(): ParityRegion; - // (undocumented) - cloneStroked(options?: StrokeOptions): ParityRegion; - // (undocumented) - static create(...data: Loop[]): ParityRegion; - // (undocumented) - dgnBoundaryType(): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - getChild(i: number): Loop | undefined; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - // (undocumented) - tryAddChild(child: AnyCurve): boolean; -} - -// @public -class PascalCoefficients { - static getBezierBasisDerivatives(order: number, u: number, result?: Float64Array): Float64Array; - static getBezierBasisValues(order: number, u: number, result?: Float64Array): Float64Array; - static getRow(row: number): Float64Array; -} - -// @public -class Path extends CurveChain { - constructor(); - // (undocumented) - announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; - // (undocumented) - cloneEmptyPeer(): Path; - // (undocumented) - cloneStroked(options?: StrokeOptions): AnyCurve; - static create(...curves: Array): Path; - static createArray(curves: CurvePrimitive[]): Path; - cyclicCurvePrimitive(index: number): CurvePrimitive | undefined; - // (undocumented) - dgnBoundaryType(): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; -} - -// @public -class Plane3dByOriginAndUnitNormal implements BeJSONFunctions { - // (undocumented) - altitude(spacePoint: Point3d): number; - // (undocumented) - altitudeToPoint(altitude: number, result?: Point3d): Point3d; - // (undocumented) - altitudeXYZ(x: number, y: number, z: number): number; - // (undocumented) - altitudeXYZW(x: number, y: number, z: number, w: number): number; - // (undocumented) - clone(result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal; - cloneTransformed(transform: Transform): Plane3dByOriginAndUnitNormal | undefined; - // (undocumented) - static create(origin: Point3d, normal: Vector3d, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined; - static createPointPointVectorInPlane(pointA: Point3d, pointB: Point3d, vector: Vector3d): Plane3dByOriginAndUnitNormal | undefined; - static createXYPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal; - static createYZPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal; - static createZXPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal; - // (undocumented) - static fromJSON(json?: any): Plane3dByOriginAndUnitNormal; - // (undocumented) - getNormalRef(): Vector3d; - // (undocumented) - getOriginRef(): Point3d; - // (undocumented) - isAlmostEqual(other: Plane3dByOriginAndUnitNormal): boolean; - isPointInPlane(spacePoint: Point3d): boolean; - // (undocumented) - projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d; - set(origin: Point3d, normal: Vector3d): void; - setFrom(source: Plane3dByOriginAndUnitNormal): void; - // (undocumented) - setFromJSON(json?: any): void; - toJSON(): any; - // (undocumented) - velocity(spaceVector: Vector3d): number; - // (undocumented) - velocityXYZ(x: number, y: number, z: number): number; - // (undocumented) - weightedAltitude(spacePoint: Point4d): number; -} - -// @public -class Plane3dByOriginAndVectors implements BeJSONFunctions { - static createCapture(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - static createFromTransformColumnsXYAndLengths(transform: Transform, xLength: number | undefined, yLength: number | undefined, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - static createOriginAndTargets(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - static createOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - static createOriginAndVectorsArrays(origin: Float64Array, vectorU: Float64Array, vectorV: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - static createOriginAndVectorsWeightedArrays(originw: Float64Array, vectorUw: Float64Array, vectorVw: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - // (undocumented) - static createOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - static createXYPlane(result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - fractionToPoint(u: number, v: number, result?: Point3d): Point3d; - // (undocumented) - fractionToVector(u: number, v: number, result?: Vector3d): Vector3d; - // (undocumented) - static fromJSON(json?: any): Plane3dByOriginAndVectors; - // (undocumented) - isAlmostEqual(other: Plane3dByOriginAndVectors): boolean; - // (undocumented) - origin: Point3d; - // (undocumented) - setFromJSON(json?: any): void; - // (undocumented) - setOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d): Plane3dByOriginAndVectors; - // (undocumented) - setOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): Plane3dByOriginAndVectors; - toJSON(): any; - // (undocumented) - vectorU: Vector3d; - // (undocumented) - vectorV: Vector3d; -} - -// @public -interface PlaneAltitudeEvaluator { - altitude(point: Point3d): number; - velocity(vector: Vector3d): number; - velocityXYZ(x: number, y: number, z: number): number; - weightedAltitude(point: Point4d): number; -} - -// @public -class PlaneByOriginAndVectors4d { - // (undocumented) - clone(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; - // (undocumented) - static createOriginAndTargets3d(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; - static createOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; - static createOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; - // (undocumented) - static createXYPlane(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; - // (undocumented) - fractionToPoint(u: number, v: number, result?: Point4d): Point4d; - // (undocumented) - isAlmostEqual(other: PlaneByOriginAndVectors4d): boolean; - // (undocumented) - origin: Point4d; - setFrom(other: PlaneByOriginAndVectors4d): void; - setOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d): PlaneByOriginAndVectors4d; - setOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number): PlaneByOriginAndVectors4d; - // (undocumented) - vectorU: Point4d; - // (undocumented) - vectorV: Point4d; -} - -// @public -class PlaneSetParamsCache { - constructor(zLow: number, zHigh: number, localOrigin?: Point3d, isMask?: boolean, isInvisible?: boolean, focalLength?: number); - // (undocumented) - clipPlaneSet: UnionOfConvexClipPlaneSets; - // (undocumented) - focalLength: number; - // (undocumented) - invisible: boolean; - // (undocumented) - isMask: boolean; - // (undocumented) - limitValue: number; - // (undocumented) - localOrigin: Point3d; - // (undocumented) - zHigh: number; - // (undocumented) - zLow: number; -} - -// @public (undocumented) -class Point2d extends XY, implements BeJSONFunctions { - constructor(x?: number, y?: number); - // (undocumented) - addForwardLeft(tangentFraction: number, leftFraction: number, vector: Vector2d): Point2d; - // (undocumented) - clone(): Point2d; - static create(x?: number, y?: number, result?: Point2d): Point2d; - // (undocumented) - static createFrom(xy: XAndY | undefined, result?: Point2d): Point2d; - // (undocumented) - static createZero(result?: Point2d): Point2d; - crossProductToPoints(target1: XAndY, target2: XAndY): number; - // (undocumented) - dotVectorsToTargets(targetA: XAndY, targetB: XAndY): number; - // (undocumented) - forwardLeftInterpolate(tangentFraction: number, leftFraction: number, point: XAndY): Point2d; - // (undocumented) - fractionOfProjectionToLine(startPoint: Point2d, endPoint: Point2d, defaultFraction?: number): number; - // (undocumented) - static fromJSON(json?: XYProps): Point2d; - interpolate(fraction: number, other: XAndY, result?: Point2d): Point2d; - interpolateXY(fractionX: number, fractionY: number, other: XAndY, result?: Point2d): Point2d; - minus(vector: XAndY, result?: Point2d): Point2d; - plus(vector: XAndY, result?: Point2d): Point2d; - plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Point2d): Point2d; - plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, vectorC: XAndY, scalarC: number, result?: Point2d): Point2d; - plusScaled(vector: XAndY, scaleFactor: number, result?: Point2d): Point2d; - plusXY(dx?: number, dy?: number, result?: Point2d): Point2d; -} - -// @public (undocumented) -class Point2dArray { - // (undocumented) - static clonePoint2dArray(data: Point2d[]): Point2d[]; - // (undocumented) - static isAlmostEqual(dataA: undefined | Point2d[], dataB: undefined | Point2d[]): boolean; - static pointCountExcludingTrailingWraparound(data: XAndY[]): number; -} - -// @public -class Point2dArrayCarrier extends IndexedXYCollection { - constructor(data: Point2d[]); - // (undocumented) - atPoint2dIndex(index: number, result?: Point2d): Point2d | undefined; - // (undocumented) - atVector2dIndex(index: number, result?: Vector2d): Vector2d | undefined; - // (undocumented) - crossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number): number | undefined; - // (undocumented) - crossProductXAndYIndexIndex(origin: XAndY, indexA: number, indexB: number): number | undefined; - // (undocumented) - data: Point2d[]; - // (undocumented) - isValidIndex(index: number): boolean; - readonly length: number; - // (undocumented) - vectorIndexIndex(indexA: number, indexB: number, result?: Vector2d): Vector2d | undefined; - // (undocumented) - vectorXAndYIndex(origin: XAndY, indexB: number, result?: Vector2d): Vector2d | undefined; -} - -// @public -class Point3d extends XYZ { - constructor(x?: number, y?: number, z?: number); - clone(result?: Point3d): Point3d; - static create(x?: number, y?: number, z?: number, result?: Point3d): Point3d; - static createAdd2Scaled(pointA: XYAndZ, scaleA: number, pointB: XYAndZ, scaleB: number, result?: Point3d): Point3d; - static createAdd3Scaled(pointA: XYAndZ, scaleA: number, pointB: XYAndZ, scaleB: number, pointC: XYAndZ, scaleC: number, result?: Point3d): Point3d; - static createFrom(data: XYAndZ | XAndY | Float64Array, result?: Point3d): Point3d; - static createFromPacked(xyzData: Float64Array, pointIndex: number, result?: Point3d): Point3d | undefined; - static createFromPackedXYZW(xyzData: Float64Array, pointIndex: number, result?: Point3d): Point3d | undefined; - static createScale(source: XYAndZ, scale: number, result?: Point3d): Point3d; - static createZero(result?: Point3d): Point3d; - crossProductToPoints(pointA: Point3d, pointB: Point3d, result?: Vector3d): Vector3d; - crossProductToPointsXY(pointA: Point3d, pointB: Point3d): number; - dotVectorsToTargets(targetA: Point3d, targetB: Point3d): number; - fractionOfProjectionToLine(startPoint: Point3d, endPoint: Point3d, defaultFraction?: number): number; - // (undocumented) - static fromJSON(json?: XYZProps): Point3d; - interpolate(fraction: number, other: Point3d, result?: Point3d): Point3d; - interpolatePerpendicularXY(fraction: number, pointB: Point3d, fractionXYPerp: number, result?: Point3d): Point3d; - interpolatePointAndTangent(fraction: number, other: Point3d, tangentScale: number, result?: Ray3d): Ray3d; - interpolateXYZ(fractionX: number, fractionY: number, fractionZ: number, other: Point3d, result?: Point3d): Point3d; - minus(vector: XYAndZ, result?: Point3d): Point3d; - plus(vector: XYAndZ, result?: Point3d): Point3d; - plus2Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYZ, scalarB: number, result?: Point3d): Point3d; - plus3Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYAndZ, scalarB: number, vectorC: XYAndZ, scalarC: number, result?: Point3d): Point3d; - plusScaled(vector: XYAndZ, scaleFactor: number, result?: Point3d): Point3d; - plusXYZ(dx?: number, dy?: number, dz?: number, result?: Point3d): Point3d; - tripleProductToPoints(pointA: Point3d, pointB: Point3d, pointC: Point3d): number; -} - -// @public (undocumented) -class Point3dArray { - static centroid(points: IndexedXYZCollection, result?: Point3d): Point3d; - // (undocumented) - static clonePoint2dArray(data: XYAndZ[]): Point2d[]; - // (undocumented) - static clonePoint3dArray(data: XYAndZ[]): Point3d[]; - static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number; - static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined; - static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined; - // (undocumented) - static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined): boolean; - static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean; - // (undocumented) - static multiplyInPlace(transform: Transform, xyz: Float64Array): void; - // (undocumented) - static packToFloat64Array(data: Point3d[]): Float64Array; - static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge?: boolean): number; - static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[]; - static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[]; - // (undocumented) - static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[]; -} - -// @public -class Point3dArrayCarrier extends IndexedXYZCollection { - constructor(data: Point3d[]); - // (undocumented) - accumulateCrossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number, result: Vector3d): void; - // (undocumented) - atPoint3dIndex(index: number, result?: Point3d): Point3d | undefined; - // (undocumented) - atVector3dIndex(index: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - crossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - crossProductXYAndZIndexIndex(origin: XYAndZ, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - data: Point3d[]; - // (undocumented) - isValidIndex(index: number): boolean; - readonly length: number; - // (undocumented) - vectorIndexIndex(indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; - // (undocumented) - vectorXYAndZIndex(origin: XYAndZ, indexB: number, result?: Vector3d): Vector3d | undefined; -} - -// @public -class Point4d implements BeJSONFunctions { - protected constructor(x?: number, y?: number, z?: number, w?: number); - altitude(point: Point3d): number; - // (undocumented) - clone(result?: Point4d): Point4d; - // (undocumented) - static create(x?: number, y?: number, z?: number, w?: number, result?: Point4d): Point4d; - static createAdd2Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, result?: Point4d): Point4d; - static createAdd3Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, vectorC: Point4d, scalarC: number, result?: Point4d): Point4d; - static createFromPackedXYZW(data: Float64Array, xIndex?: number, result?: Point4d): Point4d; - // (undocumented) - static createFromPointAndWeight(xyz: XYAndZ, w: number): Point4d; - static createPlanePointPointZ(pointA: Point4d, pointB: Point4d, result?: Point4d): Point4d; - static createRealDerivativePlane3dByOriginAndVectorsDefault000(x: number, y: number, z: number, w: number, dx: number, dy: number, dz: number, dw: number, ddx: number, ddy: number, ddz: number, ddw: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - static createRealDerivativeRay3dDefault000(x: number, y: number, z: number, w: number, dx: number, dy: number, dz: number, dw: number, result?: Ray3d): Ray3d; - static createRealPoint3dDefault000(x: number, y: number, z: number, w: number, result?: Point3d): Point3d; - // (undocumented) - static createZero(): Point4d; - // (undocumented) - crossWeightedMinus(other: Point4d, result?: Vector3d): Vector3d; - static determinantIndexed3X3(pointA: Point4d, pointB: Point4d, pointC: Point4d, i: number, j: number, k: number): number; - distanceSquaredXYZW(other: Point4d): number; - distanceXYZW(other: Point4d): number; - dotProduct(other: Point4d): number; - dotProductXYZW(x: number, y: number, z: number, w: number): number; - dotVectorsToTargets(targetA: Point4d, targetB: Point4d): number; - // (undocumented) - static fromJSON(json?: Point4dProps): Point4d; - interpolate(fraction: number, pointB: Point4d, result?: Point4d): Point4d; - // (undocumented) - static interpolateQuaternions(quaternion0: Point4d, fractionParameter: number, quaternion1: Point4d, result?: Point4d): Point4d; - // (undocumented) - isAlmostEqual(other: Point4d): boolean; - isAlmostEqualXYZW(x: number, y: number, z: number, w: number): boolean; - // (undocumented) - readonly isAlmostZero: boolean; - // (undocumented) - magnitudeSquaredXYZ(): number; - // (undocumented) - magnitudeXYZW(): number; - // (undocumented) - maxAbs(): number; - maxDiff(other: Point4d): number; - // (undocumented) - minus(other: Point4d, result?: Point4d): Point4d; - negate(result?: Point4d): Point4d; - // (undocumented) - normalizeQuaternion(): number; - normalizeWeight(result?: Point4d): Point4d | undefined; - normalizeXYZW(result?: Point4d): Point4d | undefined; - static perpendicularPoint4dPlane(pointA: Point4d, pointB: Point4d, pointC: Point4d): Point4d; - // (undocumented) - plus(other: Point4d, result?: Point4d): Point4d; - plus2Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, result?: Point4d): Point4d; - plus3Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, vectorC: Point4d, scalarC: number, result?: Point4d): Point4d; - plusScaled(vector: Point4d, scaleFactor: number, result?: Point4d): Point4d; - // (undocumented) - radiansToPoint4dXYZW(other: Point4d): number | undefined; - realDistanceXY(other: Point4d): number | undefined; - realPoint(result?: Point3d): Point3d | undefined; - realPointDefault000(result?: Point3d): Point3d; - // (undocumented) - safeDivideOrNull(denominator: number, result?: Point4d): Point4d | undefined; - scale(scale: number, result?: Point4d): Point4d; - set(x?: number, y?: number, z?: number, w?: number): Point4d; - // (undocumented) - setFrom(other: Point4d): Point4d; - // (undocumented) - setFromJSON(json?: Point4dProps): void; - toJSON(): Point4dProps; - // (undocumented) - toPlane3dByOriginAndUnitNormal(result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined; - static unitW(): Point4d; - static unitX(): Point4d; - static unitY(): Point4d; - static unitZ(): Point4d; - velocity(vector: Vector3d): number; - velocityXYZ(x: number, y: number, z: number): number; - // (undocumented) - w: number; - weightedAltitude(point: Point4d): number; - // (undocumented) - x: number; - // (undocumented) - xyzw: Float64Array; - // (undocumented) - y: number; - // (undocumented) - z: number; -} - -// @public (undocumented) -class Point4dArray { - // (undocumented) - static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined): boolean; - static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean; - static multiplyInPlace(transform: Transform, xyzw: Float64Array): void; - static packPointsAndWeightsToFloat64Array(points: Point3d[], weights: number[], result?: Float64Array): Float64Array; - // (undocumented) - static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array; - static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[], pointFormatter?: (x: number, y: number, z: number) => any): void; - static unpackToPoint4dArray(data: Float64Array): Point4d[]; -} - -// @public -class PointString3d extends GeometryQuery, implements BeJSONFunctions { - addPoint(point: Point3d): void; - addPoints(...points: any[]): void; - clear(): void; - // (undocumented) - clone(): PointString3d; - // (undocumented) - cloneTransformed(transform: Transform): PointString3d; - closestPoint: { - index: number; - xyz: Point3d; - } - static create(...points: any[]): PointString3d; - static createFloat64Array(xyzData: Float64Array): PointString3d; - static createPoints(points: Point3d[]): PointString3d; - dispatchToGeometryHandler(handler: GeometryHandler): any; - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - // (undocumented) - static fromJSON(json?: any): PointString3d; - isAlmostEqual(other: GeometryQuery): boolean; - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - numPoints(): number; - pointAt(i: number, result?: Point3d): Point3d | undefined; - readonly points: Point3d[]; - popPoint(): void; - reverseInPlace(): void; - // (undocumented) - setFrom(other: PointString3d): void; - // (undocumented) - setFromJSON(json?: any): void; - toJSON(): any; - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class Polyface extends GeometryQuery { - protected constructor(data: PolyfaceData); - static areIndicesValid(indices: number[] | undefined, indexPositionA: number, indexPositionB: number, data: any | undefined, dataLength: number): boolean; - abstract createVisitor(_numWrap: number): PolyfaceVisitor; - // (undocumented) - data: PolyfaceData; - // (undocumented) - twoSided: boolean; -} - -// @public -class PolyfaceAuxData { - constructor(channels: AuxChannel[], indices: number[]); - // (undocumented) - channels: AuxChannel[]; - // (undocumented) - clone(): PolyfaceAuxData; - // (undocumented) - createForVisitor(): PolyfaceAuxData; - // (undocumented) - indices: number[]; - // (undocumented) - isAlmostEqual(other: PolyfaceAuxData, tol?: number): boolean; -} - -// @public -class PolyfaceBuilder extends NullGeometryHandler { - addBetweenLineStringsWithRuleEdgeNormals(lineStringA: LineString3d, vA: number, lineStringB: LineString3d, vB: number, addClosure?: boolean): void; - addBetweenLineStringsWithStoredIndices(lineStringA: LineString3d, lineStringB: LineString3d): void; - addBetweenTransformedLineStrings(curves: AnyCurve, transformA: Transform, transformB: Transform, addClosure?: boolean): void; - // (undocumented) - addBox(box: Box): void; - // (undocumented) - addCone(cone: Cone): void; - addCoordinateFacets(pointArray: Point3d[][], paramArray?: Point2d[][], normalArray?: Vector3d[][], endFace?: boolean): void; - // (undocumented) - addGeometryQuery(g: GeometryQuery): void; - addGraph(graph: HalfEdgeGraph, needParams: boolean, acceptFaceFunction?: HalfEdgeToBooleanFunction): void; - addIndexedPolyface(source: IndexedPolyface, reversed: boolean, transform?: Transform): void; - // (undocumented) - addLinearSweep(surface: LinearSweep): void; - // (undocumented) - addLinearSweepLineStringsXYZOnly(contour: AnyCurve, vector: Vector3d): void; - addPolygon(points: Point3d[], numPointsToUse?: number): void; - addQuadFacet(points: Point3d[], params?: Point2d[], normals?: Vector3d[]): void; - // (undocumented) - addRotationalSweep(surface: RotationalSweep): void; - // (undocumented) - addRuledSweep(surface: RuledSweep): boolean; - // (undocumented) - addSphere(sphere: Sphere, strokeCount?: number): void; - // (undocumented) - addTorusPipe(surface: TorusPipe, phiStrokeCount?: number, thetaStrokeCount?: number): void; - addTransformedUnitBox(transform: Transform): void; - addTriangleFacet(points: Point3d[], params?: Point2d[], normals?: Vector3d[]): void; - addTriangleFan(conePoint: Point3d, ls: LineString3d, toggle: boolean): void; - addTrianglesInUncheckedConvexPolygon(ls: LineString3d, toggle: boolean): void; - addUVGridBody(surface: UVSurface, numU: number, numV: number, uMap?: Segment1d, vMap?: Segment1d): void; - applyStrokeCountsToCurvePrimitives(data: AnyCurve | GeometryQuery): void; - claimPolyface(compress?: boolean): IndexedPolyface; - // (undocumented) - static create(options?: StrokeOptions): PolyfaceBuilder; - endFace(): boolean; - findOrAddNormalnLineString(ls: LineString3d, index: number, transform?: Transform, priorIndexA?: number, priorIndexB?: number): number | undefined; - findOrAddParamInGrowableXYArray(data: GrowableXYArray, index: number): number | undefined; - findOrAddParamInLineString(ls: LineString3d, index: number, v: number, priorIndexA?: number, priorIndexB?: number): number | undefined; - findOrAddParamXY(x: number, y: number): number; - findOrAddPoint(xyz: Point3d): number; - findOrAddPointInLineString(ls: LineString3d, index: number, transform?: Transform, priorIndex?: number): number | undefined; - findOrAddPointXYZ(x: number, y: number, z: number): number; - // (undocumented) - static graphToPolyface(graph: HalfEdgeGraph, options?: StrokeOptions, acceptFaceFunction?: HalfEdgeToBooleanFunction): IndexedPolyface; - // (undocumented) - handleBox(g: Box): any; - // (undocumented) - handleCone(g: Cone): any; - // (undocumented) - handleLinearSweep(g: LinearSweep): any; - // (undocumented) - handleRotationalSweep(g: RotationalSweep): any; - // (undocumented) - handleRuledSweep(g: RuledSweep): any; - // (undocumented) - handleSphere(g: Sphere): any; - // (undocumented) - handleTorusPipe(g: TorusPipe): any; - // (undocumented) - readonly options: StrokeOptions; - // (undocumented) - toggleReversedFacetFlag(): void; -} - -// WARNING: planarityLocalRelTol has incomplete type information -// @public -class PolyfaceData { - constructor(needNormals?: boolean, needParams?: boolean, needColors?: boolean); - // (undocumented) - auxData: PolyfaceAuxData | undefined; - // (undocumented) - clone(): PolyfaceData; - // (undocumented) - color: number[] | undefined; - // (undocumented) - readonly colorCount: number; - // (undocumented) - colorIndex: number[] | undefined; - // (undocumented) - compress(): void; - copyNormalTo(i: number, dest: Vector3d): void; - copyParamTo(i: number, dest: Point2d): void; - copyPointTo(i: number, dest: Point3d): void; - // (undocumented) - edgeVisible: boolean[]; - face: FacetFaceData[]; - readonly faceCount: number; - gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void; - getColor(i: number): number; - getEdgeVisible(i: number): boolean; - getNormal(i: number): Vector3d | undefined; - getParam(i: number): Point2d; - getPoint(i: number): Point3d | undefined; - // (undocumented) - readonly indexCount: number; - // (undocumented) - isAlmostEqual(other: PolyfaceData): boolean; - isAlmostEqualParamIndexUV(index: number, u: number, v: number): boolean; - static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean; - // (undocumented) - normal: GrowableXYZArray | undefined; - // (undocumented) - readonly normalCount: number; - // (undocumented) - normalIndex: number[] | undefined; - // (undocumented) - param: Point2d[] | undefined; - // (undocumented) - readonly paramCount: number; - // (undocumented) - paramIndex: number[] | undefined; - // (undocumented) - point: GrowableXYZArray; - // (undocumented) - readonly pointCount: number; - // (undocumented) - pointIndex: number[]; - // (undocumented) - range(result?: Range3d, transform?: Transform): Range3d; - // (undocumented) - readonly requireNormals: boolean; - // (undocumented) - resizeAllDataArrays(length: number): void; - reverseIndices(facetStartIndex?: number[]): void; - // (undocumented) - reverseNormals(): void; - // (undocumented) - trimAllIndexArrays(length: number): void; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class PolyfaceQuery { - static computePrincipalAreaMoments(source: Polyface): MomentData | undefined; - static indexedPolyfaceToLoops(polyface: Polyface): BagOfCurves; - static isPolyfaceClosedByEdgePairing(source: Polyface): boolean; - // (undocumented) - static sumFacetAreas(source: Polyface | PolyfaceVisitor): number; - static sumFacetSecondAreaMomentProducts(source: Polyface | PolyfaceVisitor, origin: Point3d): Matrix4d; - static sumTetrahedralVolumes(source: Polyface | PolyfaceVisitor, origin?: Point3d): number; - static visitorToLoop(visitor: PolyfaceVisitor): Loop; -} - -// @public -interface PolyfaceVisitor extends PolyfaceData { - // (undocumented) - clientAuxIndex(i: number): number; - // (undocumented) - clientColorIndex(i: number): number; - // (undocumented) - clientNormalIndex(i: number): number; - // (undocumented) - clientParamIndex(i: number): number; - // (undocumented) - clientPointIndex(i: number): number; - // (undocumented) - currentReadIndex(): number; - // (undocumented) - moveToNextFacet(): boolean; - // (undocumented) - moveToReadIndex(index: number): boolean; - // (undocumented) - reset(): void; -} - -// @public -class PolygonOps { - static addSecondMomentAreaProducts(points: IndexedXYZCollection, origin: Point3d, moments: Matrix4d): void; - static area(points: Point3d[]): number; - // (undocumented) - static areaNormal(points: Point3d[], result?: Vector3d): Vector3d; - static areaNormalGo(points: IndexedXYZCollection, result?: Vector3d): Vector3d | undefined; - static areaXY(points: Point3d[]): number; - // (undocumented) - static centroidAndAreaXY(points: Point2d[], centroid: Point2d): number | undefined; - // (undocumented) - static centroidAreaNormal(points: Point3d[]): Ray3d | undefined; - static parity(pPoint: Point2d, pPointArray: Point2d[] | Point3d[], tol?: number): number; - static parityVectorTest(pPoint: Point2d, theta: number, pPointArray: Point2d[] | Point3d[], tol: number): number | undefined; - static parityXTest(pPoint: Point2d, pPointArray: Point2d[] | Point3d[], tol: number): number | undefined; - static parityYTest(pPoint: Point2d, pPointArray: Point2d[] | Point3d[], tol: number): number | undefined; - static sumTriangleAreas(points: Point3d[]): number; - static sumTriangleAreasXY(points: Point3d[]): number; - static testXYPolygonTurningDirections(pPointArray: Point2d[] | Point3d[]): number; - // (undocumented) - static unitNormal(points: IndexedXYZCollection, result: Vector3d): boolean; -} - -// @public (undocumented) -class PowerPolynomial { - // (undocumented) - static accumulate(coffP: Float64Array, coffQ: Float64Array, scaleQ: number): number; - // (undocumented) - static degreeKnownEvaluate(coff: Float64Array, degree: number, x: number): number; - // (undocumented) - static evaluate(coff: Float64Array, x: number): number; - // (undocumented) - static zero(coff: Float64Array): void; -} - -// @public -class Quadrature { - // (undocumented) - static readonly gaussW1Interval01: Float64Array; - // (undocumented) - static readonly gaussW2Interval01: Float64Array; - // (undocumented) - static readonly gaussW3Interval01: Float64Array; - // (undocumented) - static readonly gaussW4Interval01: Float64Array; - // (undocumented) - static readonly gaussW5Interval01: Float64Array; - // (undocumented) - static readonly gaussX1Interval01: Float64Array; - // (undocumented) - static readonly gaussX2Interval01: Float64Array; - // (undocumented) - static readonly gaussX3Interval01: Float64Array; - // (undocumented) - static readonly gaussX4Interval01: Float64Array; - // (undocumented) - static readonly gaussX5Interval01: Float64Array; - static mapWeights(xA: number, h: number, xRef: Float64Array, wRef: Float64Array, xMapped: Float64Array, wMapped: Float64Array): number; - // (undocumented) - static setupGauss1(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; - // (undocumented) - static setupGauss2(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; - // (undocumented) - static setupGauss3(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; - // (undocumented) - static setupGauss4(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; - static setupGauss5(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; - static sum1(xx: Float64Array, ww: Float64Array, n: number, f: (x: number) => number): number; -} - -// @public (undocumented) -export function quotientDerivative2(ddg: number, dh: number, ddh: number, f: number, df: number, divh: number): number; - -// @public (undocumented) -class Range1d extends RangeBase { - clone(result?: this): this; - containsRange(other: Range1d): boolean; - containsX(x: number): boolean; - static createArray(values: Float64Array | number[], result?: T): T; - static createFrom(other: T, result?: T): T; - static createNull(result?: T): T; - static createX(x: number, result?: T): T; - static createXX(xA: number, xB: number, result?: T): T; - static createXXOrCorrectToNull(xA: number, xB: number, result?: T): T; - distanceToRange(other: Range1d): number; - distanceToX(x: number): number; - expandInPlace(delta: number): void; - extendArray(values: Float64Array | number[]): void; - extendArraySubset(values: Float64Array | number[], beginIndex: number, numValue: number): void; - extendRange(other: Range1d): void; - extendX(x: number): void; - fractionToPoint(fraction: number): number; - // (undocumented) - static fromJSON(json?: Range1dProps): T; - // (undocumented) - high: number; - intersect(other: Range1d, result?: Range1d): Range1d; - intersectsRange(other: Range1d): boolean; - isAlmostEqual(other: Range1d): boolean; - readonly isAlmostZeroLength: boolean; - readonly isNull: boolean; - readonly isSinglePoint: boolean; - length(): number; - // (undocumented) - low: number; - maxAbs(): number; - scaleAboutCenterInPlace(scaleFactor: number): void; - setFrom(other: Range1d): void; - setFromJSON(json: Range1dProps): void; - // (undocumented) - setNull(): void; - setX(x: number): void; - toJSON(): Range1dProps; - union(other: Range1d, result?: Range1d): Range1d; -} - -// @public -class Range1dArray { - static countContainingRanges(data: Range1d[], value: number): number; - static differenceSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; - static getBreaks(data: Range1d[], result?: GrowableFloat64Array, sort?: boolean, compress?: boolean): GrowableFloat64Array; - // (undocumented) - static intersectSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; - static isSorted(data: Range1d[], strict?: boolean): boolean; - // (undocumented) - static paritySorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; - // (undocumented) - static simplifySortParity(data: Range1d[], removeZeroLengthRanges?: boolean): void; - static simplifySortUnion(data: Range1d[], removeZeroLengthRanges?: boolean): void; - static sort(data: Range1d[]): void; - static sumLengths(data: Range1d[]): number; - static testParity(data: Range1d[], value: number): boolean; - static testUnion(data: Range1d[], value: number): boolean; - // (undocumented) - static unionSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; -} - -// @public (undocumented) -class Range2d extends RangeBase, implements LowAndHighXY { - constructor(lowx?: number, lowy?: number, highx?: number, highy?: number); - // (undocumented) - readonly bottom: number; - // (undocumented) - readonly center: Point2d; - clone(result?: this): this; - containsPoint(point: XAndY): boolean; - containsRange(other: LowAndHighXY): boolean; - containsXY(x: number, y: number): boolean; - static createArray(points: Point2d[], result?: T): T; - // (undocumented) - static createFrom(other: LowAndHighXY, result?: T): T; - static createNull(result?: T): T; - static createXY(x: number, y: number, result?: T): T; - static createXYXY(xA: number, yA: number, xB: number, yB: number, result?: T): T; - static createXYXYOrCorrectToNull(xA: number, yA: number, xB: number, yB: number, result?: T): T; - diagonal(result?: Vector2d): Vector2d; - diagonalFractionToPoint(fraction: number, result?: Point2d): Point2d; - distanceToPoint(point: XAndY): number; - distanceToRange(other: LowAndHighXY): number; - expandInPlace(delta: number): void; - extendPoint(point: XAndY): void; - extendRange(other: LowAndHighXY): void; - extendTransformedXY(transform: Transform, x: number, y: number): void; - extendXY(x: number, y: number): void; - fractionToPoint(fractionX: number, fractionY: number, result?: Point2d): Point2d; - // (undocumented) - freeze(): void; - static fromArrayBuffer(buffer: ArrayBuffer): T; - static fromFloat64Array(f64: Float64Array): T; - // (undocumented) - static fromJSON(json?: Range2dProps): T; - // (undocumented) - readonly height: number; - // (undocumented) - high: Point2d; - intersect(other: LowAndHighXY, result?: Range2d): Range2d; - intersectsRange(other: LowAndHighXY): boolean; - // (undocumented) - isAlmostEqual(other: Range2d): boolean; - readonly isAlmostZeroX: boolean; - readonly isAlmostZeroY: boolean; - readonly isNull: boolean; - readonly isSinglePoint: boolean; - // (undocumented) - readonly left: number; - // (undocumented) - low: Point2d; - maxAbs(): number; - // (undocumented) - readonly right: number; - scaleAboutCenterInPlace(scaleFactor: number): void; - // (undocumented) - setFrom(other: LowAndHighXY): void; - setFromJSON(json: Range2dProps): void; - // (undocumented) - setNull(): void; - setXY(x: number, y: number): void; - // (undocumented) - static toFloat64Array(val: LowAndHighXY): Float64Array; - // (undocumented) - toJSON(): Range2dProps; - // (undocumented) - readonly top: number; - union(other: LowAndHighXY, result?: Range2d): Range2d; - // (undocumented) - readonly width: number; - xLength(): number; - yLength(): number; -} - -// @public (undocumented) -class Range3d extends RangeBase, implements LowAndHighXYZ, BeJSONFunctions { - constructor(lowx?: number, lowy?: number, lowz?: number, highx?: number, highy?: number, highz?: number); - // (undocumented) - readonly back: number; - // (undocumented) - readonly bottom: number; - readonly center: Point3d; - // (undocumented) - clone(result?: this): this; - containsPoint(point: Point3d): boolean; - containsPointXY(point: Point3d): boolean; - containsRange(other: Range3d): boolean; - containsXYZ(x: number, y: number, z: number): boolean; - corners(): Point3d[]; - static create(...point: Point3d[]): Range3d; - static createArray(points: Point3d[], result?: T): T; - // (undocumented) - static createFrom(other: Range3d, result?: T): T; - static createInverseTransformedArray(transform: Transform, points: Point3d[]): T; - static createNull(result?: T): T; - static createRange2d(range: Range2d, z?: number, result?: T): T; - static createTransformed(transform: Transform, ...point: Point3d[]): T; - static createTransformedArray(transform: Transform, points: Point3d[]): T; - static createXYZ(x: number, y: number, z: number, result?: T): T; - static createXYZXYZ(xA: number, yA: number, zA: number, xB: number, yB: number, zB: number, result?: T): T; - static createXYZXYZOrCorrectToNull(xA: number, yA: number, zA: number, xB: number, yB: number, zB: number, result?: T): T; - // (undocumented) - readonly depth: number; - diagonal(result?: Vector3d): Vector3d; - diagonalFractionToPoint(fraction: number, result?: Point3d): Point3d; - distanceToPoint(point: XYAndZ): number; - distanceToRange(other: Range3d): number; - ensureMinLengths(min?: number): void; - expandInPlace(delta: number): void; - extend(...point: Point3d[]): void; - extendArray(points: Point3d[] | GrowableXYZArray, transform?: Transform): void; - extendInverseTransformedArray(points: Point3d[] | GrowableXYZArray, transform: Transform): void; - extendInverseTransformedXYZ(transform: Transform, x: number, y: number, z: number): boolean; - extendPoint(point: Point3d): void; - extendRange(other: LowAndHighXYZ): void; - extendTransformedPoint(transform: Transform, point: Point3d): void; - extendTransformedXYZ(transform: Transform, x: number, y: number, z: number): void; - extendTransformedXYZW(transform: Transform, x: number, y: number, z: number, w: number): void; - extendTransformTransformedXYZ(transformA: Transform, transformB: Transform, x: number, y: number, z: number): void; - extendXYZ(x: number, y: number, z: number): void; - extendXYZW(x: number, y: number, z: number, w: number): void; - fractionToPoint(fractionX: number, fractionY: number, fractionZ: number, result?: Point3d): Point3d; - // (undocumented) - freeze(): void; - static fromArrayBuffer(buffer: ArrayBuffer): T; - static fromFloat64Array(f64: Float64Array): T; - // (undocumented) - static fromJSON(json?: Range3dProps): T; - // (undocumented) - readonly front: number; - getLocalToWorldTransform(result?: Transform): Transform; - getNpcToWorldRangeTransform(result?: Transform): Transform; - // (undocumented) - readonly height: number; - // (undocumented) - high: Point3d; - intersect(other: Range3d, result?: Range3d): Range3d; - intersectsRange(other: Range3d): boolean; - intersectsRangeXY(other: Range3d): boolean; - isAlmostEqual(other: Range3d): boolean; - readonly isAlmostZeroX: boolean; - readonly isAlmostZeroY: boolean; - readonly isAlmostZeroZ: boolean; - readonly isNull: boolean; - readonly isSinglePoint: boolean; - // (undocumented) - readonly left: number; - localToWorld(xyz: XYAndZ, result?: Point3d): Point3d | undefined; - localToWorldArrayInPlace(points: Point3d[]): boolean; - localXYZToWorld(fractionX: number, fractionY: number, fractionZ: number, result?: Point3d): Point3d | undefined; - // (undocumented) - low: Point3d; - maxAbs(): number; - maxLength(): number; - // (undocumented) - readonly right: number; - scaleAboutCenterInPlace(scaleFactor: number): void; - setFrom(other: Range3d): void; - // (undocumented) - setFromJSON(json?: Range3dProps): void; - setNull(): void; - setXYZ(x: number, y: number, z: number): void; - // (undocumented) - static toFloat64Array(val: LowAndHighXYZ): Float64Array; - toJSON(): Range3dProps; - // (undocumented) - readonly top: number; - union(other: Range3d, result?: Range3d): Range3d; - // (undocumented) - readonly width: number; - worldToLocal(point: Point3d, result?: Point3d): Point3d | undefined; - worldToLocalArrayInPlace(point: Point3d[]): boolean; - xLength(): number; - yLength(): number; - zLength(): number; -} - -// @public (undocumented) -class RangeBase { - // (undocumented) - protected static readonly _EXTREME_NEGATIVE: number; - // (undocumented) - protected static readonly _EXTREME_POSITIVE: number; - // (undocumented) - static coordinateToRangeAbsoluteDistance(x: number, low: number, high: number): number; - // (undocumented) - static isExtremePoint2d(xy: Point2d): boolean; - // (undocumented) - static isExtremePoint3d(xyz: Point3d): boolean; - // (undocumented) - static isExtremeValue(x: number): boolean; - protected static npcScaleFactor(low: number, high: number): number; - static rangeToRangeAbsoluteDistance(lowA: number, highA: number, lowB: number, highB: number): number; -} - -// @public (undocumented) -class Ray2d { - // (undocumented) - ccwPerpendicularRay(): Ray2d; - // (undocumented) - static createOriginAndDirection(origin: Point2d, direction: Vector2d): Ray2d; - // (undocumented) - static createOriginAndDirectionCapture(origin: Point2d, direction: Vector2d): Ray2d; - // (undocumented) - static createOriginAndTarget(origin: Point2d, target: Point2d): Ray2d; - // (undocumented) - cwPerpendicularRay(): Ray2d; - // (undocumented) - readonly direction: Vector2d; - fractionToPoint(f: number): Point2d; - intersectUnboundedLine(linePointA: Point2d, linePointB: Point2d, fraction: number[], dhds: number[]): boolean; - // (undocumented) - normalizeDirectionInPlace(): boolean; - // (undocumented) - readonly origin: Point2d; - parallelRay(leftFraction: number): Ray2d; - perpendicularProjectionFraction(point: Point2d): number; - projectionFraction(point: Point2d): number; -} - -// @public -class Ray3d implements BeJSONFunctions { - // (undocumented) - a?: number; - clone(result?: Ray3d): Ray3d; - cloneTransformed(transform: Transform): Ray3d; - // (undocumented) - static create(origin: Point3d, direction: Vector3d, result?: Ray3d): Ray3d; - static createCapture(origin: Point3d, direction: Vector3d): Ray3d; - static createPointVectorNumber(origin: Point3d, direction: Vector3d, a: number, result?: Ray3d): Ray3d; - static createStartEnd(origin: Point3d, target: Point3d, result?: Ray3d): Ray3d; - static createWeightedDerivative(weightedPoint: Float64Array, weightedDerivative: Float64Array, result?: Ray3d): Ray3d | undefined; - // (undocumented) - static createXAxis(): Ray3d; - static createXYZUVW(originX: number, originY: number, originZ: number, directionX: number, directionY: number, directionZ: number, result?: Ray3d): Ray3d; - // (undocumented) - static createYAxis(): Ray3d; - // (undocumented) - static createZAxis(): Ray3d; - // (undocumented) - static createZero(result?: Ray3d): Ray3d; - // (undocumented) - direction: Vector3d; - distance(spacePoint: Point3d): number; - // (undocumented) - dotProductToPoint(spacePoint: Point3d): number; - fractionToPoint(fraction: number): Point3d; - // (undocumented) - static fromJSON(json?: any): Ray3d; - // (undocumented) - getDirectionRef(): Vector3d; - // (undocumented) - getOriginRef(): Point3d; - intersectionWithPlane(plane: Plane3dByOriginAndUnitNormal, result?: Point3d): number | undefined; - // (undocumented) - isAlmostEqual(other: Ray3d): boolean; - // (undocumented) - origin: Point3d; - perpendicularPartOfVectorToTarget(targetPoint: XYAndZ, result?: Vector3d): Vector3d; - // (undocumented) - pointToFraction(spacePoint: Point3d): number; - // (undocumented) - projectPointToRay(spacePoint: Point3d): Point3d; - set(origin: Point3d, direction: Vector3d): void; - setFrom(source: Ray3d): void; - setFromJSON(json?: any): void; - toJSON(): any; - toRigidZFrame(): Transform | undefined; - transformInPlace(transform: Transform): void; - // (undocumented) - tryNormalizeInPlaceWithAreaWeight(a: number): boolean; - trySetDirectionMagnitudeInPlace(magnitude?: number): boolean; -} - -// @public -class RecurseToCurvesGeometryHandler extends GeometryHandler { - // (undocumented) - handleArc3d(_g: Arc3d): any; - // (undocumented) - handleBagOfCurves(g: BagOfCurves): any; - // (undocumented) - handleBezierCurve3d(_g: BezierCurve3d): any; - // (undocumented) - handleBezierCurve3dH(_g: BezierCurve3dH): any; - // (undocumented) - handleBox(_g: Box): any; - // (undocumented) - handleBSplineCurve3d(_g: BSplineCurve3d): any; - // (undocumented) - handleBSplineCurve3dH(_g: BSplineCurve3dH): any; - // (undocumented) - handleBSplineSurface3d(_g: BSplineSurface3d): any; - // (undocumented) - handleBSplineSurface3dH(_g: BSplineSurface3dH): any; - // (undocumented) - handleChildren(g: GeometryQuery): any; - // (undocumented) - handleCone(_g: Cone): any; - // (undocumented) - handleCoordinateXYZ(_g: CoordinateXYZ): any; - // (undocumented) - handleCurveCollection(_g: CurveCollection): any; - // (undocumented) - handleIndexedPolyface(_g: IndexedPolyface): any; - // (undocumented) - handleLinearSweep(_g: LinearSweep): any; - // (undocumented) - handleLineSegment3d(_g: LineSegment3d): any; - // (undocumented) - handleLineString3d(_g: LineString3d): any; - // (undocumented) - handleLoop(g: Loop): any; - // (undocumented) - handleParityRegion(g: ParityRegion): any; - // (undocumented) - handlePath(g: Path): any; - // (undocumented) - handlePointString3d(_g: PointString3d): any; - // (undocumented) - handleRotationalSweep(_g: RotationalSweep): any; - // (undocumented) - handleRuledSweep(_g: RuledSweep): any; - // (undocumented) - handleSphere(_g: Sphere): any; - // (undocumented) - handleTorusPipe(_g: TorusPipe): any; - // (undocumented) - handleTransitionSpiral(_g: TransitionSpiral3d): any; - // (undocumented) - handleUnionRegion(g: UnionRegion): any; -} - -// @public -class RecursiveCurveProcessor { - protected constructor(); - // (undocumented) - announceBagOfCurves(data: BagOfCurves, _indexInParent?: number): void; - announceCurvePrimitive(_data: CurvePrimitive, _indexInParent?: number): void; - announceLoop(data: Loop, _indexInParent?: number): void; - announceParityRegion(data: ParityRegion, _indexInParent?: number): void; - announcePath(data: Path, _indexInParent?: number): void; - announceUnexpected(_data: AnyCurve, _indexInParent: number): void; - announceUnionRegion(data: UnionRegion, _indexInParent?: number): void; -} - -// @public -class RecursiveCurveProcessorWithStack extends RecursiveCurveProcessor { - protected constructor(); - // (undocumented) - protected _stack: CurveCollection[]; - // (undocumented) - announceBagOfCurves(data: BagOfCurves, _indexInParent?: number): void; - announceCurvePrimitive(_data: CurvePrimitive, _indexInParent?: number): void; - announceLoop(data: Loop, indexInParent?: number): void; - announceParityRegion(data: ParityRegion, _indexInParent?: number): void; - announcePath(data: Path, indexInParent?: number): void; - announceUnexpected(_data: AnyCurve, _indexInParent: number): void; - announceUnionRegion(data: UnionRegion, indexInParent?: number): void; - // (undocumented) - enter(data: CurveCollection): void; - // (undocumented) - leave(): CurveCollection | undefined; -} - -// @public (undocumented) -class RotationalSweep extends SolidPrimitive { - // (undocumented) - clone(): RotationalSweep; - // (undocumented) - cloneAxisRay(): Ray3d; - // (undocumented) - cloneTransformed(transform: Transform): RotationalSweep; - // (undocumented) - constantVSection(vFraction: number): CurveCollection | undefined; - // (undocumented) - static create(contour: CurveCollection, axis: Ray3d, sweepAngle: Angle, capped: boolean): RotationalSweep | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - getCurves(): CurveCollection; - // (undocumented) - getFractionalRotationTransform(vFraction: number, result?: Transform): Transform; - // (undocumented) - getSweep(): Angle; - // (undocumented) - getSweepContourRef(): SweepContour; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public (undocumented) -class RuledSweep extends SolidPrimitive { - // (undocumented) - clone(): RuledSweep; - // (undocumented) - cloneContours(): CurveCollection[]; - // (undocumented) - cloneSweepContours(): SweepContour[]; - // (undocumented) - cloneTransformed(transform: Transform): RuledSweep; - // (undocumented) - constantVSection(vFraction: number): CurveCollection | undefined; - // (undocumented) - static create(contours: CurveCollection[], capped: boolean): RuledSweep | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - static mutatePartners(collectionA: CurveCollection, collectionB: CurveCollection, primitiveMutator: CurvePrimitiveMutator): CurveCollection | undefined; - // (undocumented) - sweepContoursRef(): SweepContour[]; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public -class Segment1d { - clone(): Segment1d; - static create(x0?: number, x1?: number, result?: Segment1d): Segment1d; - fractionToPoint(fraction: number): number; - isAlmostEqual(other: Segment1d): boolean; - readonly isExact01: boolean; - // (undocumented) - readonly isIn01: boolean; - reverseInPlace(): void; - set(x0: number, x1: number): void; - setFrom(other: Segment1d): void; - shift(dx: number): void; - // (undocumented) - x0: number; - // (undocumented) - x1: number; -} - -// @public (undocumented) -class SmallSystem { - // (undocumented) - static linearSystem2d(ux: number, vx: number, // first row of matrix - uy: number, vy: number, // second row of matrix - cx: number, cy: number, // right side - result: Vector2d): boolean; - static linearSystem3d(axx: number, axy: number, axz: number, // first row of matrix - ayx: number, ayy: number, ayz: number, // second row of matrix - azx: number, azy: number, azz: number, // second row of matrix - cx: number, cy: number, cz: number, // right side - result?: Vector3d): Vector3d | undefined; - static lineSegment2dXYTransverseIntersectionUnbounded(a0: Point2d, a1: Point2d, b0: Point2d, b1: Point2d, result: Vector2d): boolean; - static lineSegment3dClosestApproachUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, result: Vector2d): boolean; - static lineSegment3dHXYClosestPointUnbounded(hA0: Point4d, hA1: Point4d, spacePoint: Point4d): number | undefined; - static lineSegment3dHXYTransverseIntersectionUnbounded(hA0: Point4d, hA1: Point4d, hB0: Point4d, hB1: Point4d, result?: Vector2d): Vector2d | undefined; - static lineSegment3dXYClosestPointUnbounded(pointA0: Point3d, pointA1: Point3d, spacePoint: Point3d): number | undefined; - static lineSegment3dXYTransverseIntersectionUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, result: Vector2d): boolean; -} - -// @public -class SolidPrimitive extends GeometryQuery { - protected constructor(capped: boolean); - // (undocumented) - protected _capped: boolean; - capped: boolean; - abstract constantVSection(_vFraction: number): CurveCollection | undefined; - abstract getConstructiveFrame(): Transform | undefined; - readonly isClosedVolume: boolean; -} - -// @public -class Sphere extends SolidPrimitive, implements UVSurface { - // (undocumented) - clone(): Sphere; - cloneCenter(): Point3d; - cloneLatitudeSweep(): AngleSweep; - // (undocumented) - cloneLocalToWorld(): Transform; - // (undocumented) - cloneTransformed(transform: Transform): Sphere | undefined; - cloneVectorX(): Vector3d; - cloneVectorY(): Vector3d; - cloneVectorZ(): Vector3d; - // (undocumented) - constantVSection(vFraction: number): CurveCollection | undefined; - // (undocumented) - static createCenterRadius(center: Point3d, radius: number, latitudeSweep?: AngleSweep): Sphere; - static createDgnSphere(center: Point3d, vectorX: Vector3d, vectorZ: Vector3d, radiusXY: number, radiusZ: number, latitudeSweep: AngleSweep, capped: boolean): Sphere | undefined; - static createEllipsoid(localToWorld: Transform, latitudeSweep: AngleSweep, capped: boolean): Sphere | undefined; - static createFromAxesAndScales(center: Point3d, axes: undefined | Matrix3d, radiusX: number, radiusY: number, radiusZ: number, latitudeSweep: AngleSweep | undefined, capped: boolean): Sphere | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - readonly latitudeSweepFraction: number; - maxIsoParametricDistance(): Vector2d; - strokeConstantVSection(v: number, fixedStrokeCount: number | undefined, options?: StrokeOptions): LineString3d; - // (undocumented) - trueSphereRadius(): number | undefined; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; - uFractionToRadians(u: number): number; - uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d; - uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - vFractionToRadians(v: number): number; -} - -// @public -class SphereImplicit { - constructor(r: number); - // (undocumented) - evaluateDerivativesThetaPhi(theta: number, phi: number, dxdTheta: Vector3d, dxdPhi: Vector3d): void; - // (undocumented) - evaluateImplicitFunction(x: number, y: number, z: number): number; - // (undocumented) - evaluateImplicitFunctionXYZW(wx: number, wy: number, wz: number, w: number): number; - // (undocumented) - evaluateThetaPhi(thetaRadians: number, phiRadians: number): Point3d; - // (undocumented) - radius: number; - // (undocumented) - xyzToThetaPhiR: { - phi: number; - r: number; - theta: number; - valid: boolean; - } -} - -// @public (undocumented) -enum StandardViewIndex { - // (undocumented) - Back = 6, - // (undocumented) - Bottom = 2, - // (undocumented) - Front = 5, - // (undocumented) - Iso = 7, - // (undocumented) - Left = 3, - // (undocumented) - Right = 4, - // (undocumented) - RightIso = 8, - // (undocumented) - Top = 1 -} - -// @public -class StrokeOptions { - angleTol?: Angle; - // (undocumented) - applyAngleTol(minCount: number, sweepRadians: number, defaultStepRadians: number): number; - // (undocumented) - applyChordTol(minCount: number, radius: number, sweepRadians: number): number; - // (undocumented) - applyMaxEdgeLength(minCount: number, totalLength: number): number; - // (undocumented) - applyMinStrokesPerPrimitive(minCount: number): number; - // (undocumented) - applyTolerancesToArc(radius: number, sweepRadians?: number): number; - chordTol?: number; - // (undocumented) - static createForCurves(): StrokeOptions; - // (undocumented) - static createForFacets(): StrokeOptions; - // (undocumented) - defaultCircleStrokes: number; - // (undocumented) - readonly hasMaxEdgeLength: boolean; - maxEdgeLength?: number; - minStrokesPerPrimitive?: number; - // (undocumented) - needColors?: boolean; - needConvexFacets?: boolean; - // (undocumented) - needNormals: boolean; - // (undocumented) - needParams: boolean; - shouldTriangulate: boolean; -} - -// @public -class SweepContour { - // (undocumented) - axis: Ray3d | undefined; - buildFacets(_builder: PolyfaceBuilder, options: StrokeOptions | undefined): void; - // (undocumented) - clone(): SweepContour; - // (undocumented) - cloneTransformed(transform: Transform): SweepContour | undefined; - // (undocumented) - static createForLinearSweep(contour: CurveCollection, defaultNormal?: Vector3d): SweepContour | undefined; - // (undocumented) - static createForRotation(contour: CurveCollection, axis: Ray3d): SweepContour | undefined; - // (undocumented) - curves: CurveCollection; - emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform): void; - // (undocumented) - getCurves(): CurveCollection; - // (undocumented) - isAlmostEqual(other: any): boolean; - // (undocumented) - localToWorld: Transform; - purgeFacets(): void; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public (undocumented) -class TorusImplicit { - constructor(majorRadiusR: number, minorRadiusr: number); - // (undocumented) - boxSize(): number; - // (undocumented) - evaluateDerivativesThetaPhi(theta: number, phi: number, dxdTheta: Vector3d, dxdPhi: Vector3d): void; - // (undocumented) - evaluateImplicitFunctionPoint(xyz: Point3d): number; - // (undocumented) - evaluateImplicitFunctionXYZ(x: number, y: number, z: number): number; - // (undocumented) - evaluateImplicitFunctionXYZW(x: number, y: number, z: number, w: number): number; - // (undocumented) - evaluateThetaPhi(theta: number, phi: number): Point3d; - // (undocumented) - evaluateThetaPhiDistance(theta: number, phi: number, distance: number): Point3d; - // (undocumented) - implicitFunctionScale(): number; - // (undocumented) - majorRadius: number; - // (undocumented) - minorRadius: number; - xyzToThetaPhiDistance: { - distance: number; - phi: number; - rho: number; - safePhi: boolean; - theta: number; - } -} - -// @public -class TorusPipe extends SolidPrimitive, implements UVSurface, UVSurfaceIsoParametricDistance { - protected constructor(map: Transform, radiusA: number, radiusB: number, sweep: Angle, capped: boolean); - // (undocumented) - clone(): TorusPipe; - // (undocumented) - cloneCenter(): Point3d; - // (undocumented) - cloneTransformed(transform: Transform): TorusPipe | undefined; - // (undocumented) - cloneVectorX(): Vector3d; - // (undocumented) - cloneVectorY(): Vector3d; - // (undocumented) - constantUSection(uFraction: number): CurveCollection | undefined; - // (undocumented) - constantVSection(v: number): CurveCollection | undefined; - static createDgnTorusPipe(center: Point3d, vectorX: Vector3d, vectorY: Vector3d, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean): TorusPipe | undefined; - // (undocumented) - static createInFrame(frame: Transform, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean): TorusPipe | undefined; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - extendRange(range: Range3d, transform?: Transform): void; - getConstructiveFrame(): Transform | undefined; - // (undocumented) - getIsReversed(): boolean; - // (undocumented) - getMajorRadius(): number; - // (undocumented) - getMinorRadius(): number; - // (undocumented) - getSweepAngle(): Angle; - // (undocumented) - getThetaFraction(): number; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - readonly isClosedVolume: boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - maxIsoParametricDistance(): Vector2d; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; - uvFractionToPoint(u: number, v: number, result?: Point3d): Point3d; - uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; - vFractionToRadians(v: number): number; -} - -// @public -class Transform implements BeJSONFunctions { - clone(result?: Transform): Transform; - // (undocumented) - cloneRigid(axisOrder?: AxisOrder): Transform | undefined; - static createFixedPointAndMatrix(fixedPoint: Point3d, matrix: Matrix3d, result?: Transform): Transform; - static createIdentity(result?: Transform): Transform; - static createOriginAndMatrix(origin: XYZ | undefined, matrix: Matrix3d | undefined, result?: Transform): Transform; - static createOriginAndMatrixColumns(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d, result?: Transform): Transform; - static createRefs(origin: XYZ, matrix: Matrix3d, result?: Transform): Transform; - static createRowValues(qxx: number, qxy: number, qxz: number, ax: number, qyx: number, qyy: number, qyz: number, ay: number, qzx: number, qzy: number, qzz: number, az: number, result?: Transform): Transform; - static createScaleAboutPoint(fixedPoint: Point3d, scale: number, result?: Transform): Transform; - static createTranslation(translation: XYZ, result?: Transform): Transform; - static createTranslationXYZ(x?: number, y?: number, z?: number, result?: Transform): Transform; - static createZero(result?: Transform): Transform; - // (undocumented) - freeze(): void; - // (undocumented) - static fromJSON(json?: TransformProps): Transform; - getOrigin(): Point3d; - getTranslation(): Vector3d; - static readonly identity: Transform; - static initFromRange(min: Point3d, max: Point3d, npcToGlobal?: Transform, globalToNpc?: Transform): void; - // (undocumented) - inverse(): Transform | undefined; - isAlmostEqual(other: Transform): boolean; - readonly isIdentity: boolean; - // (undocumented) - static matchArrayLengths(source: any[], dest: any[], constructionFunction: () => any): number; - readonly matrix: Matrix3d; - multiplyComponentXYZ(componentIndex: number, x: number, y: number, z: number): number; - multiplyComponentXYZW(componentIndex: number, x: number, y: number, z: number, w: number): number; - // (undocumented) - multiplyInversePoint3d(point: XYAndZ, result?: Point3d): Point3d | undefined; - multiplyInversePoint3dArray(source: Point3d[], result?: Point3d[]): Point3d[] | undefined; - multiplyInversePoint3dArrayInPlace(source: Point3d[]): boolean; - multiplyPoint2d(source: XAndY, result?: Point2d): Point2d; - multiplyPoint2dArray(source: Point2d[], result?: Point2d[]): Point2d[]; - multiplyPoint3d(point: XYAndZ, result?: Point3d): Point3d; - multiplyPoint3dArray(source: Point3d[], result?: Point3d[]): Point3d[]; - multiplyPoint3dArrayInPlace(points: Point3d[]): void; - multiplyRange(range: Range3d, result?: Range3d): Range3d; - multiplyTransformMatrix3d(other: Matrix3d, result?: Transform): Transform; - multiplyTransformTransform(other: Transform, result?: Transform): Transform; - multiplyTransposeXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; - multiplyVector(vector: Vector3d, result?: Vector3d): Vector3d; - multiplyVectorXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; - multiplyXYZ(x: number, y: number, z: number, result?: Point3d): Point3d; - multiplyXYZToFloat64Array(x: number, y: number, z: number, result?: Float64Array): Float64Array; - multiplyXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; - multiplyXYZWToFloat64Array(x: number, y: number, z: number, w: number, result?: Float64Array): Float64Array; - readonly origin: XYZ; - // (undocumented) - setFrom(other: Transform): void; - // (undocumented) - setFromJSON(json?: TransformProps): void; - setIdentity(): void; - setMultiplyTransformTransform(transformA: Transform, transformB: Transform): void; - setOriginAndMatrixColumns(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d): void; - // (undocumented) - toJSON(): TransformProps; -} - -// @public -class TransitionConditionalProperties { - constructor(radius0: number | undefined, radius1: number | undefined, bearing0: Angle | undefined, bearing1: Angle | undefined, arcLength: number | undefined); - // (undocumented) - bearing0: Angle | undefined; - // (undocumented) - bearing1: Angle | undefined; - clone(): TransitionConditionalProperties; - // (undocumented) - curveLength: number | undefined; - isAlmostEqual(other: TransitionConditionalProperties): boolean; - numDefinedProperties(): number; - // (undocumented) - radius0: number | undefined; - // (undocumented) - radius1: number | undefined; - tryResolveAnySingleUnknown(): boolean; -} - -// WARNING: defaultSpiralType has incomplete type information -// @public (undocumented) -class TransitionSpiral3d extends CurvePrimitive { - constructor(spiralType: string | undefined, radius01: Segment1d, bearing01: AngleSweep, activeFractionInterval: Segment1d, localToWorld: Transform, arcLength: number, properties: TransitionConditionalProperties | undefined); - // (undocumented) - activeFractionInterval: Segment1d; - // (undocumented) - static averageCurvature(radiusLimits: Segment1d): number; - static averageCurvatureR0R1(r0: number, r1: number): number; - // (undocumented) - bearing01: AngleSweep; - // (undocumented) - clone(): TransitionSpiral3d; - // (undocumented) - cloneTransformed(transform: Transform): TransitionSpiral3d; - computeStrokeCountForOptions(options?: StrokeOptions): number; - static create(spiralType: string | undefined, radius0: number | undefined, radius1: number | undefined, bearing0: Angle | undefined, bearing1: Angle | undefined, arcLength: number | undefined, fractionInterval: undefined | Segment1d, localToWorld: Transform): TransitionSpiral3d | undefined; - static createRadiusRadiusBearingBearing(radius01: Segment1d, bearing01: AngleSweep, activeFractionInterval: Segment1d, localToWorld: Transform): TransitionSpiral3d; - // (undocumented) - static curvatureToRadius(curvature: number): number; - curveLength(): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void; - // (undocumented) - emitStrokes(dest: LineString3d, options?: StrokeOptions): void; - // (undocumented) - endPoint(): Point3d; - // (undocumented) - extendRange(rangeToExtend: Range3d, transform?: Transform): void; - fractionToBearingRadians(fraction: number): number; - fractionToCurvature(fraction: number): number; - fractionToFrenetFrame(fraction: number, result?: Transform): Transform; - // (undocumented) - fractionToPoint(fraction: number, result?: Point3d): Point3d; - fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; - // (undocumented) - fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; - getSpiralType(): string; - // (undocumented) - static initWorkSpace(): void; - // (undocumented) - isAlmostEqual(other: GeometryQuery): boolean; - // (undocumented) - isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; - // (undocumented) - isSameGeometryClass(other: any): boolean; - // (undocumented) - localToWorld: Transform; - readonly originalProperties: TransitionConditionalProperties | undefined; - quickLength(): number; - // (undocumented) - radius01: Segment1d; - // (undocumented) - static radius0LengthSweepRadiansToRadius1(radius0: number, arcLength: number, sweepRadians: number): number; - // (undocumented) - static radius1LengthSweepRadiansToRadius0(radius1: number, arcLength: number, sweepRadians: number): number; - // (undocumented) - static radiusRadiusLengthToSweepRadians(radius0: number, radius1: number, arcLength: number): number; - // (undocumented) - static radiusRadiusSweepRadiansToArcLength(radius0: number, radius1: number, sweepRadians: number): number; - // (undocumented) - static radiusToCurvature(radius: number): number; - // (undocumented) - refreshComputedProperties(): void; - // (undocumented) - reverseInPlace(): void; - // (undocumented) - setFrom(other: TransitionSpiral3d): TransitionSpiral3d; - // (undocumented) - startPoint(): Point3d; - // (undocumented) - tryTransformInPlace(transform: Transform): boolean; -} - -// @public (undocumented) -class Triangulator { - static cleanupTriangulation(graph: HalfEdgeGraph): void; - static createFaceLoopFromIndexedXYZCollection(data: GrowableXYZArray, returnPositiveAreaLoop: boolean, markExterior: boolean): HalfEdge | undefined; - static earcutOuterAndInnerLoops(loops: XAndY[][]): HalfEdgeGraph; - static earcutSingleLoop(data: XAndY[]): HalfEdgeGraph; - // (undocumented) - static triangulateStrokedLoops(strokedLoops: GrowableXYZArray[]): HalfEdgeGraph | undefined; -} - -// @public (undocumented) -class TriDiagonalSystem { - constructor(n: number); - // (undocumented) - addToB(row: number, bb: number): void; - // (undocumented) - addToRow(row: number, left: number, diag: number, right: number): void; - // (undocumented) - copy(): TriDiagonalSystem; - // (undocumented) - defactor(): boolean; - // (undocumented) - factor(): boolean; - // (undocumented) - factorAndBackSubstitute(): boolean; - // (undocumented) - factorAndBackSubstitutePointArrays(vectorB: Point3d[], vectorX: Point3d[]): boolean; - // (undocumented) - flatten(): any; - // (undocumented) - flattenWithPoints(xyzB: Point3d[]): any; - // (undocumented) - getB(row: number): number; - // (undocumented) - getX(row: number): number; - // (undocumented) - multiplyAX(): boolean; - // (undocumented) - multiplyAXPoints(pointX: Point3d[], pointB: Point3d[]): boolean; - // (undocumented) - order(): number; - // (undocumented) - reset(): void; - // (undocumented) - setB(row: number, bb: number): void; - // (undocumented) - setRow(row: number, left: number, diag: number, right: number): void; - // (undocumented) - setX(row: number, xx: number): void; -} - -// WARNING: coeffientRelTol has incomplete type information -// @public (undocumented) -class TrigPolynomial { - // (undocumented) - static readonly C: Float64Array; - // (undocumented) - static readonly CC: Float64Array; - // (undocumented) - static readonly CCminusSS: Float64Array; - // (undocumented) - static readonly CW: Float64Array; - // (undocumented) - static readonly S: Float64Array; - // (undocumented) - static readonly SC: Float64Array; - // (undocumented) - static readonly SmallAngle: number; - // (undocumented) - static solveAngles(coff: Float64Array, nominalDegree: number, referenceCoefficient: number, radians: number[]): boolean; - // (undocumented) - static solveUnitCircleEllipseIntersection(cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, ellipseRadians: number[], circleRadians: number[]): boolean; - // (undocumented) - static solveUnitCircleHomogeneousEllipseIntersection(cx: number, cy: number, cw: number, ux: number, uy: number, uw: number, vx: number, vy: number, vw: number, ellipseRadians: number[], circleRadians: number[]): boolean; - // (undocumented) - static solveUnitCircleImplicitQuadricIntersection(axx: number, axy: number, ayy: number, ax: number, ay: number, a1: number, radians: number[]): boolean; - // (undocumented) - static readonly SS: Float64Array; - // (undocumented) - static readonly SW: Float64Array; - // (undocumented) - static readonly W: Float64Array; - // (undocumented) - static readonly WW: Float64Array; -} - -// @public (undocumented) -interface TrigValues { - // (undocumented) - c: number; - // (undocumented) - radians: number; - // (undocumented) - s: number; -} - -// @public -class UnionOfConvexClipPlaneSets implements Clipper { - // (undocumented) - addConvexSet(toAdd: ConvexClipPlaneSet): void; - // (undocumented) - addOutsideZClipSets(invisible: boolean, zLow?: number, zHigh?: number): void; - // (undocumented) - announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; - announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; - appendIntervalsFromSegment(segment: LineSegment3d, intervals: Segment1d[]): void; - classifyPointContainment(points: Point3d[], onIsOutside: boolean): number; - // (undocumented) - clone(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; - // (undocumented) - readonly convexSets: ConvexClipPlaneSet[]; - // (undocumented) - static createConvexSets(convexSets: ConvexClipPlaneSet[], result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; - // (undocumented) - static createEmpty(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; - // (undocumented) - static fromJSON(json: any, result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; - getRangeOfAlignedPlanes(transform?: Transform, result?: Range3d): Range3d | undefined; - // (undocumented) - getRayIntersection(point: Point3d, direction: Vector3d): number | undefined; - // (undocumented) - isAlmostEqual(other: UnionOfConvexClipPlaneSets): boolean; - isAnyPointInOrOnFromSegment(segment: LineSegment3d): boolean; - // (undocumented) - isPointInside(point: Point3d): boolean; - // (undocumented) - isPointOnOrInside(point: Point3d, tolerance: number): boolean; - // (undocumented) - isSphereInside(point: Point3d, radius: number): boolean; - // (undocumented) - multiplyPlanesByMatrix(matrix: Matrix4d): void; - polygonClip(input: Point3d[], output: Point3d[][]): void; - // (undocumented) - setInvisible(invisible: boolean): void; - // (undocumented) - testRayIntersect(point: Point3d, direction: Vector3d): boolean; - // (undocumented) - toJSON(): any; - // (undocumented) - transformInPlace(transform: Transform): void; -} - -// @public -class UnionRegion extends CurveCollection { - constructor(); - // (undocumented) - protected _children: Array; - // (undocumented) - announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; - // (undocumented) - readonly children: Array; - // (undocumented) - cloneEmptyPeer(): UnionRegion; - // (undocumented) - cloneStroked(options?: StrokeOptions): UnionRegion; - // (undocumented) - static create(...data: Array): UnionRegion; - // (undocumented) - dgnBoundaryType(): number; - // (undocumented) - dispatchToGeometryHandler(handler: GeometryHandler): any; - // (undocumented) - getChild(i: number): Loop | ParityRegion | undefined; - // (undocumented) - isSameGeometryClass(other: GeometryQuery): boolean; - // (undocumented) - tryAddChild(child: AnyCurve): boolean; -} - -// @public -class UnivariateBezier extends BezierCoffs { - constructor(data: number | Float64Array | number[]); - addSquaredSquaredBezier(coffA: Float64Array, scale: number): boolean; - allocateOrder(order: number): void; - basisFunctions(u: number, result?: Float64Array): Float64Array; - clone(compressToMinimalAllocation?: boolean): UnivariateBezier; - static create(other: BezierCoffs): UnivariateBezier; - static createArraySubset(coffs: number[] | Float64Array, index0: number, order: number, result?: UnivariateBezier): UnivariateBezier; - static createCoffs(data: number | number[] | Float64Array): UnivariateBezier; - static createProduct(bezierA: BezierCoffs, bezierB: BezierCoffs): UnivariateBezier; - deflateLeft(): void; - deflateRight(): void; - deflateRoot(root: number): number; - // (undocumented) - static deflateRoots01(bezier: UnivariateBezier): number[] | undefined; - evaluate(u: number): number; - // (undocumented) - readonly order: number; - runNewton(startFraction: number, tolerance?: number): number | undefined; - sumBasisFunctionDerivatives(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array; - sumBasisFunctions(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array; -} - -// @public -enum UVSelect { - // (undocumented) - uDirection = 0, - // (undocumented) - VDirection = 1 -} - -// @public -interface UVSurface { - uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d; - uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; -} - -// @public -interface UVSurfaceIsoParametricDistance { - maxIsoParametricDistance(): Vector2d; -} - -// @public -class UVSurfaceOps { - static createLinestringOnUVLine(surface: UVSurface, u0: number, v0: number, u1: number, v1: number, numEdge: number, saveUV?: boolean, saveFraction?: boolean): LineString3d; -} - -// @public -class Vector2d extends XY, implements BeJSONFunctions { - constructor(x?: number, y?: number); - angleTo(vectorB: Vector2d): Angle; - // (undocumented) - clone(): Vector2d; - // (undocumented) - static create(x?: number, y?: number, result?: Vector2d): Vector2d; - static createFrom(data: XAndY | Float64Array, result?: Vector2d): Vector2d; - static createOffsetBisector(unitPerpA: Vector2d, unitPerpB: Vector2d, offset: number): Vector2d | undefined; - // (undocumented) - static createPolar(r: number, theta: Angle): Vector2d; - // (undocumented) - static createStartEnd(point0: XAndY, point1: XAndY, result?: Vector2d): Vector2d; - // (undocumented) - static createZero(result?: Vector2d): Vector2d; - crossProduct(vectorB: Vector2d): number; - dotProduct(vectorB: Vector2d): number; - dotProductStartEnd(pointA: XAndY, pointB: XAndY): number; - fractionOfProjectionToVector(target: Vector2d, defaultFraction?: number): number; - // (undocumented) - static fromJSON(json?: XYProps): Vector2d; - interpolate(fraction: number, right: Vector2d, result?: Vector2d): Vector2d; - // (undocumented) - isParallelTo(other: Vector2d, oppositeIsParallel?: boolean): boolean; - // (undocumented) - isPerpendicularTo(other: Vector2d): boolean; - minus(vector: XAndY, result?: Vector2d): Vector2d; - negate(result?: Vector2d): Vector2d; - // (undocumented) - normalize(result?: Vector2d): Vector2d | undefined; - plus(vector: XAndY, result?: Vector2d): Vector2d; - plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Vector2d): Vector2d; - plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, vectorC: XAndY, scalarC: number, result?: Vector2d): Vector2d; - plusScaled(vector: XAndY, scaleFactor: number, result?: Vector2d): Vector2d; - // (undocumented) - rotate90CCWXY(result?: Vector2d): Vector2d; - // (undocumented) - rotate90CWXY(result?: Vector2d): Vector2d; - // (undocumented) - rotateXY(angle: Angle, result?: Vector2d): Vector2d; - // (undocumented) - safeDivideOrNull(denominator: number, result?: Vector2d): Vector2d | undefined; - scale(scale: number, result?: Vector2d): Vector2d; - scaleToLength(length: number, result?: Vector2d): Vector2d; - // (undocumented) - unitPerpendicularXY(result?: Vector2d): Vector2d; - // (undocumented) - static unitX(scale?: number): Vector2d; - // (undocumented) - static unitY(scale?: number): Vector2d; -} - -// @public -class Vector3d extends XYZ { - constructor(x?: number, y?: number, z?: number); - addCrossProductToTargetsInPlace(ax: number, ay: number, az: number, bx: number, by: number, bz: number, cx: number, cy: number, cz: number): void; - // (undocumented) - angleTo(vectorB: Vector3d): Angle; - // (undocumented) - angleToXY(vectorB: Vector3d): Angle; - clone(result?: Vector3d): Vector3d; - static create(x?: number, y?: number, z?: number, result?: Vector3d): Vector3d; - static createAdd2Scaled(vectorA: XYAndZ, scaleA: number, vectorB: XYAndZ, scaleB: number, result?: Vector3d): Vector3d; - static createAdd2ScaledXYZ(ax: number, ay: number, az: number, scaleA: number, bx: number, by: number, bz: number, scaleB: number, result?: Vector3d): Vector3d; - // (undocumented) - static createAdd3Scaled(vectorA: XYAndZ, scaleA: number, vectorB: XYAndZ, scaleB: number, vectorC: XYAndZ, scaleC: number, result?: Vector3d): Vector3d; - static createCrossProduct(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d; - static createCrossProductToPoints(origin: XYAndZ, pointA: XYAndZ, pointB: XYAndZ, result?: Vector3d): Vector3d; - static createFrom(data: XYAndZ | XAndY | Float64Array, result?: Vector3d): Vector3d; - static createPolar(r: number, theta: Angle, z?: number): Vector3d; - static createRotateVectorAroundVector(vector: Vector3d, axis: Vector3d, angle?: Angle): Vector3d | undefined; - static createSpherical(r: number, theta: Angle, phi: Angle): Vector3d; - static createStartEnd(start: XYAndZ, end: XYAndZ, result?: Vector3d): Vector3d; - // (undocumented) - static createStartEndXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, result?: Vector3d): Vector3d; - static createZero(result?: Vector3d): Vector3d; - // (undocumented) - crossProduct(vectorB: Vector3d, result?: Vector3d): Vector3d; - crossProductMagnitude(vectorB: XYAndZ): number; - crossProductMagnitudeSquared(vectorB: XYAndZ): number; - crossProductStartEnd(pointA: Point3d, pointB: Point3d, result?: Vector3d): Vector3d; - crossProductStartEndXY(pointA: Point3d, pointB: Point3d): number; - crossProductXY(vectorB: Vector3d): number; - crossProductXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; - // (undocumented) - dotProduct(vectorB: XYAndZ): number; - dotProductStart3dEnd4d(pointA: Point3d, pointB: Point4d): number; - // (undocumented) - dotProductStartEnd(pointA: XYAndZ, pointB: XYAndZ): number; - dotProductStartEndXYZ(pointA: Point3d, x: number, y: number, z: number): number; - dotProductStartEndXYZW(pointA: Point3d, x: number, y: number, z: number, w: number): number; - dotProductXY(vectorB: Vector3d): number; - dotProductXYZ(x: number, y: number, z?: number): number; - fractionOfProjectionToVector(target: Vector3d, defaultFraction?: number): number; - // (undocumented) - static fromJSON(json?: XYZProps): Vector3d; - // (undocumented) - interpolate(fraction: number, right: Vector3d, result?: Vector3d): Vector3d; - isParallelTo(other: Vector3d, oppositeIsParallel?: boolean, returnValueIfAnInputIsZeroLength?: boolean): boolean; - isPerpendicularTo(other: Vector3d, returnValueIfAnInputIsZeroLength?: boolean): boolean; - // (undocumented) - minus(vector: XYAndZ, result?: Vector3d): Vector3d; - negate(result?: Vector3d): Vector3d; - normalize(result?: Vector3d): Vector3d | undefined; - normalizeInPlace(): boolean; - // (undocumented) - normalizeWithDefault(x: number, y: number, z: number, result?: Vector3d): Vector3d; - normalizeWithLength: { - mag: number; - v: Vector3d | undefined; - } - // (undocumented) - planarAngleTo(vector: Vector3d, planeNormal: Vector3d): Angle; - // (undocumented) - planarRadiansTo(vector: Vector3d, planeNormal: Vector3d): number; - // (undocumented) - plus(vector: XYAndZ, result?: Vector3d): Vector3d; - plus2Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYAndZ, scalarB: number, result?: Vector3d): Vector3d; - plus3Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYAndZ, scalarB: number, vectorC: XYAndZ, scalarC: number, result?: Vector3d): Vector3d; - plusScaled(vector: XYAndZ, scaleFactor: number, result?: Vector3d): Vector3d; - // (undocumented) - rotate90Around(axis: Vector3d, result?: Vector3d): Vector3d | undefined; - rotate90CCWXY(result?: Vector3d): Vector3d; - // (undocumented) - rotate90Towards(target: Vector3d, result?: Vector3d): Vector3d | undefined; - // (undocumented) - rotateXY(angle: Angle, result?: Vector3d): Vector3d; - safeDivideOrNull(denominator: number, result?: Vector3d): Vector3d | undefined; - scale(scale: number, result?: Vector3d): Vector3d; - // (undocumented) - scaleToLength(length: number, result?: Vector3d): Vector3d; - setStartEnd(point0: XYAndZ, point1: XYAndZ): void; - // (undocumented) - signedAngleTo(vector1: Vector3d, vectorW: Vector3d): Angle; - // (undocumented) - signedRadiansTo(vector1: Vector3d, vectorW: Vector3d): number; - // (undocumented) - sizedCrossProduct(vectorB: Vector3d, productLength: number, result?: Vector3d): Vector3d | undefined; - tripleProduct(vectorB: Vector3d, vectorC: Vector3d): number; - // (undocumented) - tryNormalizeInPlace(smallestMagnitude?: number): boolean; - // (undocumented) - unitCrossProduct(vectorB: Vector3d, result?: Vector3d): Vector3d | undefined; - // (undocumented) - unitCrossProductWithDefault(vectorB: Vector3d, x: number, y: number, z: number, result?: Vector3d): Vector3d; - // (undocumented) - unitPerpendicularXY(result?: Vector3d): Vector3d; - static unitX(scale?: number): Vector3d; - static unitY(scale?: number): Vector3d; - static unitZ(scale?: number): Vector3d; -} - -// @public (undocumented) -class Vector3dArray { - // (undocumented) - static cloneVector3dArray(data: XYAndZ[]): Vector3d[]; - // (undocumented) - static isAlmostEqual(dataA: undefined | Vector3d[], dataB: undefined | Vector3d[]): boolean; -} - -// @public (undocumented) -enum WeightStyle { - UnWeighted = 0, - WeightsAlreadyAppliedToCoordinates = 1, - WeightsSeparateFromCoordinates = 2 -} - -// @public (undocumented) -interface WritableLowAndHighXY { - // (undocumented) - high: WritableXAndY; - // (undocumented) - low: WritableXAndY; -} - -// @public (undocumented) -interface WritableLowAndHighXYZ { - // (undocumented) - high: WritableXYAndZ; - // (undocumented) - low: WritableXYAndZ; -} - -// @public (undocumented) -interface WritableXAndY { - // (undocumented) - x: number; - // (undocumented) - y: number; -} - -// @public (undocumented) -interface WritableXYAndZ extends XAndY, WriteableHasZ { -} - -// @public (undocumented) -interface WriteableHasZ { - // (undocumented) - z: number; -} - -// @public -class XY implements XAndY { - protected constructor(x?: number, y?: number); - static crossProductToPoints(origin: XAndY, targetA: XAndY, targetB: XAndY): number; - distance(other: XAndY): number; - distanceSquared(other: XAndY): number; - // (undocumented) - freeze(): void; - isAlmostEqual(other: XAndY, tol?: number): boolean; - // (undocumented) - isAlmostEqualMetric(other: XAndY): boolean; - isAlmostEqualXY(x: number, y: number, tol?: number): boolean; - // (undocumented) - readonly isAlmostZero: boolean; - // (undocumented) - isExactEqual(other: XAndY): boolean; - magnitude(): number; - magnitudeSquared(): number; - maxAbs(): number; - maxDiff(other: XAndY): number; - set(x?: number, y?: number): void; - setFrom(other?: XAndY): void; - setFromJSON(json?: XYProps): void; - setZero(): void; - toJSON(): XYProps; - // (undocumented) - toJSONXY(): XYProps; - unitVectorTo(target: XAndY, result?: Vector2d): Vector2d | undefined; - vectorTo(other: XAndY, result?: Vector2d): Vector2d; - x: number; - y: number; -} - -// @public -class XYZ implements XYAndZ { - protected constructor(x?: number, y?: number, z?: number); - addInPlace(other: XYAndZ): void; - addScaledInPlace(other: XYAndZ, scale: number): void; - at(index: number): number; - cloneAsPoint3d(): Point3d; - distance(other: XYAndZ): number; - distanceSquared(other: XYAndZ): number; - distanceSquaredXY(other: XAndY): number; - distanceXY(other: XAndY): number; - freeze(): void; - static hasZ(arg: any): arg is HasZ; - indexOfMaxAbs(): number; - isAlmostEqual(other: XYAndZ, tol?: number): boolean; - isAlmostEqualMetric(other: XYAndZ): boolean; - isAlmostEqualXY(other: XAndY, tol?: number): boolean; - isAlmostEqualXYZ(x: number, y: number, z: number, tol?: number): boolean; - readonly isAlmostZero: boolean; - isExactEqual(other: XYAndZ): boolean; - static isXAndY(arg: any): arg is XAndY; - static isXYAndZ(arg: any): arg is XYAndZ; - magnitude(): number; - magnitudeSquared(): number; - magnitudeSquaredXY(): number; - magnitudeXY(): number; - maxAbs(): number; - maxDiff(other: XYAndZ): number; - scaledVectorTo(other: XYAndZ, scale: number, result?: Vector3d): Vector3d; - scaleInPlace(scale: number): void; - set(x?: number, y?: number, z?: number): void; - setFrom(other: Float64Array | XAndY | XYAndZ): void; - setFromJSON(json?: XYZProps): void; - setFromPoint3d(other: Point3d): void; - setFromVector3d(other: Vector3d): void; - setZero(): void; - toFloat64Array(): Float64Array; - toJSON(): XYZProps; - // (undocumented) - toJSONXYZ(): XYZProps; - unitVectorTo(target: XYAndZ, result?: Vector3d): Vector3d | undefined; - vectorTo(other: XYAndZ, result?: Vector3d): Vector3d; - // (undocumented) - x: number; - // (undocumented) - y: number; - // (undocumented) - z: number; -} - -// @public -class YawPitchRollAngles { - constructor(yaw?: Angle, pitch?: Angle, roll?: Angle); - clone(): YawPitchRollAngles; - static createDegrees(yawDegrees: number, pitchDegrees: number, rollDegrees: number): YawPitchRollAngles; - static createFromMatrix3d(matrix: Matrix3d, result?: YawPitchRollAngles): YawPitchRollAngles | undefined; - static createRadians(yawRadians: number, pitchRadians: number, rollRadians: number): YawPitchRollAngles; - freeze(): void; - // (undocumented) - static fromJSON(json?: YawPitchRollProps): YawPitchRollAngles; - isAlmostEqual(other: YawPitchRollAngles): boolean; - // (undocumented) - isIdentity(allowPeriodShift?: boolean): boolean; - maxAbsDegrees(): number; - // (undocumented) - maxAbsRadians(): number; - maxDiffRadians(other: YawPitchRollAngles): number; - // (undocumented) - pitch: Angle; - // (undocumented) - roll: Angle; - setFrom(other: YawPitchRollAngles): void; - // (undocumented) - setFromJSON(json?: YawPitchRollProps): void; - sumSquaredDegrees(): number; - sumSquaredRadians(): number; - toJSON(): YawPitchRollProps; - toMatrix3d(result?: Matrix3d): Matrix3d; - static tryFromTransform: { - angles: YawPitchRollAngles | undefined; - origin: Point3d; - } - // (undocumented) - yaw: Angle; -} - -// @public -interface YawPitchRollProps { - // (undocumented) - pitch?: AngleProps; - // (undocumented) - roll?: AngleProps; - // (undocumented) - yaw?: AngleProps; -} - -// WARNING: Unsupported export: OptionalGrowableFloat64Array -// WARNING: Unsupported export: BlockComparisonFunction -// WARNING: Unsupported export: HasZ -// WARNING: Unsupported export: XAndY -// WARNING: Unsupported export: XYAndZ -// WARNING: Unsupported export: LowAndHighXY -// WARNING: Unsupported export: LowAndHighXYZ -// WARNING: Unsupported export: XYZProps -// WARNING: Unsupported export: XYProps -// WARNING: Unsupported export: Matrix3dProps -// WARNING: Unsupported export: TransformProps -// WARNING: Unsupported export: Range3dProps -// WARNING: Unsupported export: Range2dProps -// WARNING: Unsupported export: Range1dProps -// WARNING: Unsupported export: AngleProps -// WARNING: Unsupported export: AngleSweepProps -// WARNING: Unsupported export: Point4dProps -// WARNING: Unsupported export: Matrix4dProps -// WARNING: Unsupported export: AnyCurve -// WARNING: Unsupported export: AnyRegion -// WARNING: Unsupported export: AnnounceNumberNumberCurvePrimitive -// WARNING: Unsupported export: AnnounceNumberNumber -// WARNING: Unsupported export: AnnounceCurvePrimitive -// WARNING: Unsupported export: CurvePrimitiveMutator -// WARNING: Unsupported export: NodeFunction -// WARNING: Unsupported export: NodeToNumberFunction -// WARNING: Unsupported export: HalfEdgeToBooleanFunction -// WARNING: Unsupported export: HalfEdgeAndMaskToBooleanFunction -// WARNING: Unsupported export: GraphNodeFunction -// (No @packagedocumentation comment for this package) +// @public +class AbstractNewtonIterator { + protected constructor(stepSizeTolerance?: number, successiveConvergenceTarget?: number, maxIterations?: number); + // (undocumented) + protected _maxIterations: number; + // (undocumented) + protected _numAccepted: number; + // (undocumented) + protected _stepSizeTolerance: number; + // (undocumented) + protected _successiveConvergenceTarget: number; + // (undocumented) + abstract applyCurrentStep(isFinalStep: boolean): boolean; + abstract computeStep(): boolean; + abstract currentStepSize(): number; + // (undocumented) + numIterations: number; + // (undocumented) + runIterations(): boolean; + // (undocumented) + testConvergence(delta: number): boolean; +} + +// WARNING: EQN_EPS has incomplete type information +// WARNING: s_safeDivideFactor has incomplete type information +// WARNING: s_quadricRelTol has incomplete type information +// WARNING: sTestWindow has incomplete type information +// @public +class AnalyticRoots { + // (undocumented) + static appendCubicRoots(c: Float64Array | number[], results: GrowableFloat64Array): void; + // (undocumented) + static appendImplicitLineUnitCircleIntersections(alpha: number, beta: number, gamma: number, cosValues: OptionalGrowableFloat64Array, sinValues: OptionalGrowableFloat64Array, radiansValues: OptionalGrowableFloat64Array, reltol?: number): number; + static appendLinearRoot(c0: number, c1: number, values: GrowableFloat64Array): void; + static appendQuadraticRoots(c: Float64Array | number[], values: GrowableFloat64Array): void; + // (undocumented) + static appendQuarticRoots(c: Float64Array | number[], results: GrowableFloat64Array): void; + // (undocumented) + static cbrt(x: number): number; + static isSmallRatio(x: number, y: number, abstol?: number, reltol?: number): boolean; + static isZero(x: number): boolean; + // (undocumented) + static mostDistantFromMean(data: GrowableFloat64Array | undefined): number; + static safeDivide(values: Float64Array, numerator: number, denominator: number, defaultValue: number | undefined, offset: number): boolean; +} + +// WARNING: piOver4Radians has incomplete type information +// WARNING: piOver2Radians has incomplete type information +// WARNING: piRadians has incomplete type information +// WARNING: pi2Radians has incomplete type information +// WARNING: piOver12Radians has incomplete type information +// @public +class Angle implements BeJSONFunctions { + static adjustDegrees0To360(degrees: number): number; + static adjustDegreesSigned180(degrees: number): number; + static adjustRadians0To2Pi(radians: number): number; + static adjustRadiansMinusPiPlusPi(radians: number): number; + static cleanupTrigValue(value: number, tolerance?: number): number; + // (undocumented) + clone(): Angle; + cloneScaled(scale: number): Angle; + // (undocumented) + cos(): number; + static create360(): Angle; + static createAtan2(numerator: number, denominator: number): Angle; + static createDegrees(degrees: number): Angle; + static createDegreesAdjustPositive(degrees: number): Angle; + static createDegreesAdjustSigned180(degrees: number): Angle; + static createRadians(radians: number): Angle; + // (undocumented) + readonly degrees: number; + // (undocumented) + static readonly degreesPerRadian: number; + static degreesToRadians(degrees: number): number; + static dotProductsToHalfAngleTrigValues(dotUU: number, dotVV: number, dotUV: number, favorZero?: boolean): TrigValues; + // (undocumented) + freeze(): void; + static fromJSON(json?: AngleProps, defaultValRadians?: number): Angle; + isAlmostEqual(other: Angle): boolean; + isAlmostEqualAllowPeriodShift(other: Angle): boolean; + isAlmostEqualNoPeriodShift(other: Angle): boolean; + static isAlmostEqualRadiansAllowPeriodShift(radiansA: number, radiansB: number): boolean; + static isAlmostEqualRadiansNoPeriodShift(radiansA: number, radiansB: number): boolean; + // (undocumented) + readonly isAlmostZero: boolean; + // (undocumented) + readonly isExactZero: boolean; + readonly isFullCircle: boolean; + // (undocumented) + static isFullCircleRadians(radians: number): boolean; + readonly isHalfCircle: boolean; + static isHalfCircleRadians(radians: number): boolean; + static isPerpendicularDotSet(dotUU: number, dotVV: number, dotUV: number): boolean; + // (undocumented) + readonly radians: number; + static radiansBetweenVectorsXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; + // (undocumented) + static readonly radiansPerDegree: number; + static radiansToDegrees(radians: number): number; + setDegrees(degrees: number): void; + setFrom(other: Angle): void; + setFromJSON(json?: AngleProps, defaultValRadians?: number): void; + setRadians(radians: number): void; + // (undocumented) + sin(): number; + // (undocumented) + tan(): number; + toJSON(): AngleProps; + // (undocumented) + toJSONRadians(): AngleProps; + static trigValuesToHalfAngleTrigValues(rCos2A: number, rSin2A: number): TrigValues; + // (undocumented) + static zero(): Angle; +} + +// @public +class AngleSweep implements BeJSONFunctions { + angleToPositivePeriodicFraction(theta: Angle): number; + angleToSignedPeriodicFraction(theta: Angle): number; + angleToUnboundedFraction(theta: Angle): number; + capLatitudeInPlace(): void; + clone(): AngleSweep; + cloneMinusRadians(radians: number): AngleSweep; + static create360(startRadians?: number): AngleSweep; + static createFullLatitude(): AngleSweep; + static createStartEnd(startAngle: Angle, endAngle: Angle, result?: AngleSweep): AngleSweep; + static createStartEndDegrees(startDegrees?: number, endDegrees?: number, result?: AngleSweep): AngleSweep; + static createStartEndRadians(startRadians?: number, endRadians?: number, result?: AngleSweep): AngleSweep; + static createStartSweep(startAngle: Angle, sweepAngle: Angle, result?: AngleSweep): AngleSweep; + static createStartSweepDegrees(startDegrees?: number, sweepDegrees?: number, result?: AngleSweep): AngleSweep; + static createStartSweepRadians(startRadians?: number, sweepRadians?: number, result?: AngleSweep): AngleSweep; + readonly endAngle: Angle; + readonly endDegrees: number; + readonly endRadians: number; + fractionPeriod(): number; + fractionToAngle(fraction: number): Angle; + fractionToRadians(fraction: number): number; + static fromJSON(json?: AngleSweepProps): AngleSweep; + // (undocumented) + interpolate(fraction: number, other: AngleSweep): AngleSweep; + isAlmostEqual(other: AngleSweep): boolean; + isAlmostEqualAllowPeriodShift(other: AngleSweep): boolean; + isAlmostEqualNoPeriodShift(other: AngleSweep): boolean; + isAngleInSweep(angle: Angle): boolean; + readonly isCCW: boolean; + readonly isFullCircle: boolean; + readonly isFullLatitudeSweep: boolean; + isRadiansInSweep(radians: number): boolean; + radiansArraytoPositivePeriodicFractions(data: GrowableFloat64Array): void; + // (undocumented) + radiansToPositivePeriodicFraction(radians: number): number; + // (undocumented) + radiansToSignedPeriodicFraction(radians: number): number; + reverseInPlace(): void; + setFrom(other: AngleSweep): void; + setFromJSON(json?: any): void; + setStartEndDegrees(startDegrees?: number, endDegrees?: number): void; + setStartEndRadians(startRadians?: number, endRadians?: number): void; + readonly startAngle: Angle; + readonly startDegrees: number; + readonly startRadians: number; + readonly sweepDegrees: number; + readonly sweepRadians: number; + toJSON(): any; +} + +// @public +class AnnotatedLineString3d { + // (undocumented) + curveParam?: GrowableFloat64Array; + uvwParam?: GrowableXYZArray; + // (undocumented) + vectorV?: GrowableXYZArray; + // (undocumented) + vecturU?: GrowableXYZArray; +} + +// WARNING: quadratureGuassCount has incomplete type information +// WARNING: quadratureIntervalAngleDegrees has incomplete type information +// @public +class Arc3d extends CurvePrimitive, implements BeJSONFunctions { + // (undocumented) + allPerpendicularAngles(spacePoint: Point3d, _extend?: boolean, _endpoints?: boolean): number[]; + // (undocumented) + angleToPointAndDerivative(theta: Angle, result?: Ray3d): Ray3d; + announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + // (undocumented) + appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; + readonly center: Point3d; + circularRadius(): number | undefined; + // (undocumented) + clone(): Arc3d; + clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined; + // (undocumented) + cloneTransformed(transform: Transform): CurvePrimitive; + // (undocumented) + closestPoint(spacePoint: Point3d, extend: boolean, result?: CurveLocationDetail): CurveLocationDetail; + computeStrokeCountForOptions(options?: StrokeOptions): number; + // (undocumented) + static create(center: Point3d, vector0: Vector3d, vector90: Vector3d, sweep?: AngleSweep, result?: Arc3d): Arc3d; + static createCircularStartMiddleEnd(pointA: XYAndZ, pointB: XYAndZ, pointC: XYAndZ, result?: Arc3d): Arc3d | LineString3d | undefined; + // (undocumented) + static createRefs(center: Point3d, matrix: Matrix3d, sweep: AngleSweep, result?: Arc3d): Arc3d; + // (undocumented) + static createScaledXYColumns(center: Point3d, matrix: Matrix3d, radius0: number, radius90: number, sweep: AngleSweep, result?: Arc3d): Arc3d; + // (undocumented) + static createUnitCircle(): Arc3d; + // (undocumented) + static createXY(center: Point3d, radius: number, sweep?: AngleSweep): Arc3d; + // (undocumented) + static createXYEllipse(center: Point3d, radiusA: number, radiusB: number, sweep?: AngleSweep): Arc3d; + curveLength(): number; + curveLengthBetweenFractions(fraction0: number, fraction1: number): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(result?: Point3d): Point3d; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + // (undocumented) + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + getFractionToDistanceScale(): number | undefined; + // (undocumented) + isAlmostEqual(otherGeometry: GeometryQuery): boolean; + // (undocumented) + readonly isCircular: boolean; + readonly isExtensibleFractionSpace: boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + readonly matrix: Matrix3d; + maxVectorLength(): number; + moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: false, result?: CurveLocationDetail): CurveLocationDetail; + quickEccentricity(): number; + quickLength(): number; + // (undocumented) + radiansToPointAndDerivative(radians: number, result?: Ray3d): Ray3d; + // (undocumented) + reverseInPlace(): void; + // (undocumented) + set(center: Point3d, matrix: Matrix3d, sweep: AngleSweep | undefined): void; + // (undocumented) + setFrom(other: Arc3d): void; + // (undocumented) + setFromJSON(json?: any): void; + // (undocumented) + setRefs(center: Point3d, matrix: Matrix3d, sweep: AngleSweep): void; + // (undocumented) + setVector0Vector90(vector0: Vector3d, vector90: Vector3d): void; + // (undocumented) + startPoint(result?: Point3d): Point3d; + // (undocumented) + sweep: AngleSweep; + toJSON(): any; + // (undocumented) + toScaledMatrix3d: { + axes: Matrix3d; + center: Point3d; + r0: number; + r90: number; + sweep: AngleSweep; + } + toTransformedPoint4d: { + center: Point4d; + sweep: AngleSweep; + vector0: Point4d; + vector90: Point4d; + } + toTransformedVectors: { + center: Point3d; + sweep: AngleSweep; + vector0: Vector3d; + vector90: Vector3d; + } + toVectors: { + center: Point3d; + sweep: AngleSweep; + vector0: Vector3d; + vector90: Vector3d; + } + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; + readonly vector0: Vector3d; + readonly vector90: Vector3d; +} + +// @public +class AuxChannel { + constructor(data: AuxChannelData[], dataType: AuxChannelDataType, name?: string, inputName?: string); + // (undocumented) + clone(): AuxChannel; + data: AuxChannelData[]; + // (undocumented) + dataType: AuxChannelDataType; + readonly entriesPerValue: number; + inputName?: string; + // (undocumented) + isAlmostEqual(other: AuxChannel, tol?: number): boolean; + readonly isScalar: boolean; + name?: string; + readonly scalarRange: Range1d | undefined; + readonly valueCount: number; +} + +// @public +class AuxChannelData { + constructor(input: number, values: number[]); + // (undocumented) + clone(): AuxChannelData; + // (undocumented) + copyValues(other: AuxChannelData, thisIndex: number, otherIndex: number, blockSize: number): void; + input: number; + // (undocumented) + isAlmostEqual(other: AuxChannelData, tol?: number): boolean; + values: number[]; +} + +// @public +enum AuxChannelDataType { + Distance = 1, + Normal = 3, + Scalar = 0, + Vector = 2 +} + +// @public (undocumented) +enum AxisIndex { + // (undocumented) + X = 0, + // (undocumented) + Y = 1, + // (undocumented) + Z = 2 +} + +// @public +enum AxisOrder { + XYZ = 0, + XZY = 4, + YXZ = 5, + YZX = 1, + ZXY = 2, + ZYX = 6 +} + +// @public +enum AxisScaleSelect { + LongestRangeDirection = 1, + NonUniformRangeContainment = 2, + Unit = 0 +} + +// @public +class BagOfCurves extends CurveCollection { + constructor(); + // (undocumented) + protected _children: AnyCurve[]; + // (undocumented) + announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; + // (undocumented) + readonly children: AnyCurve[]; + // (undocumented) + cloneEmptyPeer(): BagOfCurves; + // (undocumented) + cloneStroked(options?: StrokeOptions): BagOfCurves; + // (undocumented) + static create(...data: AnyCurve[]): BagOfCurves; + // (undocumented) + dgnBoundaryType(): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + getChild(i: number): AnyCurve | undefined; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + // (undocumented) + tryAddChild(child: AnyCurve): boolean; +} + +// @public (undocumented) +interface BeJSONFunctions { + setFromJSON(json: any): void; + // (undocumented) + toJSON(): any; +} + +// @public +class Bezier1dNd { + constructor(blockSize: number, polygon: Float64Array); + clonePolygon(result?: Float64Array): Float64Array; + static create(data: Point2d[] | Point3d[] | Point4d[]): Bezier1dNd | undefined; + evaluate(s: number, buffer?: Float64Array): Float64Array; + evaluateDerivative(s: number, buffer?: Float64Array): Float64Array; + fractionToParentFraction(fraction: number): number; + getPolygonPoint(i: number, buffer?: Float64Array): Float64Array | undefined; + interpolatePoleInPlace(poleIndexA: number, fraction: number, poleIndexB: number): void; + interval?: Segment1d; + isAlmostEqual(other: any): boolean; + loadSpanPoles(data: Float64Array, spanIndex: number): void; + loadSpanPolesWithWeight(data: Float64Array, dataDimension: number, spanIndex: number, weight: number): void; + readonly order: number; + readonly packedData: Float64Array; + reverseInPlace(): void; + static saturate1dInPlace(coffs: Float64Array, knots: KnotVector, spanIndex: number): boolean; + // (undocumented) + saturateInPlace(knots: KnotVector, spanIndex: number): boolean; + setInterval(a: number, b: number): void; + setPolygonPoint(i: number, buffer: Float64Array): void; + subdivideInPlaceKeepLeft(fraction: number): boolean; + subdivideInPlaceKeepRight(fraction: number): boolean; + subdivideToIntervalInPlace(fraction0: number, fraction1: number): boolean; + unpackToJsonArrays(): any[]; +} + +// @public +class BezierCoffs { + constructor(data: number | Float64Array | number[]); + addInPlace(a: number): void; + protected allocateToOrder(order: number): void; + abstract basisFunctions(u: number, result?: Float64Array): Float64Array; + // (undocumented) + abstract clone(): BezierCoffs; + coffs: Float64Array; + copyFrom(other: BezierCoffs): void; + createPeer(): BezierCoffs; + abstract evaluate(u: number): number; + filter01(roots: number[] | undefined, restrictTo01?: boolean): number[] | undefined; + static maxAbsDiff(dataA: BezierCoffs, dataB: BezierCoffs): number | undefined; + readonly order: number; + roots(targetValue: number, _restrictTo01: boolean): number[] | undefined; + scaleInPlace(scale: number): void; + subdivide(u: number, left: BezierCoffs, right: BezierCoffs): boolean; + abstract sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; + abstract sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; + // (undocumented) + zero(): void; +} + +// @public +class BezierCurve3d extends BezierCurveBase { + // (undocumented) + clone(): BezierCurve3d; + // (undocumented) + clonePartialCurve(f0: number, f1: number): BezierCurve3d | undefined; + cloneTransformed(transform: Transform): BezierCurve3d; + computeStrokeCountForOptions(options?: StrokeOptions): number; + copyPointsAsLineString(): LineString3d; + static create(data: Point3d[] | Point2d[]): BezierCurve3d | undefined; + static createOrder(order: number): BezierCurve3d; + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + getPolePoint3d(i: number, result?: Point3d): Point3d | undefined; + getPolePoint4d(i: number, result?: Point4d): Point4d | undefined; + // (undocumented) + isAlmostEqual(other: any): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + loadSpanPoles(data: Float64Array, spanIndex: number): void; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class BezierCurve3dH extends BezierCurveBase { + // (undocumented) + clone(): BezierCurve3dH; + cloneTransformed(transform: Transform): BezierCurve3dH; + computeStrokeCountForOptions(options?: StrokeOptions): number; + static create(data: Point3d[] | Point4d[] | Point2d[]): BezierCurve3dH | undefined; + static createOrder(order: number): BezierCurve3dH; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPoint4d(fraction: number, result?: Point4d): Point4d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + getPolePoint3d(i: number, result?: Point3d): Point3d | undefined; + getPolePoint4d(i: number, result?: Point4d): Point4d | undefined; + // (undocumented) + isAlmostEqual(other: any): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + isUnitWeight(tolerance?: number): boolean; + loadSpan3dPolesWithWeight(data: Float64Array, spanIndex: number, weight: number): void; + loadSpan4dPoles(data: Float64Array, spanIndex: number): void; + poleProductsXYZW(products: Float64Array, ax: number, ay: number, az: number, aw: number): void; + tryMultiplyMatrix4dInPlace(matrix: Matrix4d): void; + tryTransformInPlace(transform: Transform): boolean; + updateClosestPointByTruePerpendicular(spacePoint: Point3d, detail: CurveLocationDetail): boolean; +} + +// @public +class BezierCurveBase extends CurvePrimitive { + protected constructor(blockSize: number, data: Float64Array); + // (undocumented) + protected _polygon: Bezier1dNd; + // (undocumented) + protected _workBezier?: UnivariateBezier; + // (undocumented) + protected _workCoffsA?: Float64Array; + // (undocumented) + protected _workCoffsB?: Float64Array; + protected _workData0: Float64Array; + // (undocumented) + protected _workData1: Float64Array; + protected _workPoint0: Point3d; + // (undocumented) + protected _workPoint1: Point3d; + protected allocateAndZeroBezierWorkData(primaryBezierOrder: number, orderA: number, orderB: number): void; + abstract computeStrokeCountForOptions(options?: StrokeOptions): number; + copyPolesAsJsonArray(): any[]; + // (undocumented) + readonly degree: number; + emitStrokableParts(handler: IStrokeHandler, _options?: StrokeOptions): void; + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(): Point3d; + abstract extendRange(rangeToExtend: Range3d, transform?: Transform): void; + // (undocumented) + fractionToParentFraction(fraction: number): number; + abstract getPolePoint3d(i: number, point?: Point3d): Point3d | undefined; + abstract getPolePoint4d(i: number, point?: Point4d): Point4d | undefined; + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + readonly numPoles: number; + // (undocumented) + readonly order: number; + // (undocumented) + polygonLength(): number; + // (undocumented) + quickLength(): number; + reverseInPlace(): void; + saturateInPlace(knotVector: KnotVector, spanIndex: number): boolean; + // (undocumented) + setInterval(a: number, b: number): void; + // (undocumented) + startPoint(): Point3d; +} + +// @public +class BezierPolynomialAlgebra { + static accumulate(dataA: Float64Array, orderA: number, resultB: Float64Array): void; + static accumulateProduct(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale?: number): void; + static accumulateProductWithDifferences(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale?: number): void; + static accumulateScaledShiftedComponentTimesComponentDelta(product: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, scale: number, indexA: number, constA: number, indexB: number): void; + static componentDifference(difference: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, index: number): void; + static scaledComponentSum(sum: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, indexA: number, constA: number, indexB: number, constB: number): void; + static univariateDifference(data: Float64Array, difference: Float64Array): void; +} + +// @public (undocumented) +class Box extends SolidPrimitive { + protected constructor(map: Transform, baseX: number, baseY: number, topX: number, topY: number, capped: boolean); + // (undocumented) + clone(): Box; + // (undocumented) + cloneTransformed(transform: Transform): Box | undefined; + // (undocumented) + constantVSection(zFraction: number): CurveCollection; + // (undocumented) + static createDgnBox(baseOrigin: Point3d, vectorX: Vector3d, vectorY: Vector3d, topOrigin: Point3d, baseX: number, baseY: number, topX: number, topY: number, capped: boolean): Box | undefined; + // (undocumented) + static createDgnBoxWithAxes(baseOrigin: Point3d, axes: Matrix3d, topOrigin: Point3d, baseX: number, baseY: number, topX: number, topY: number, capped: boolean): Box | undefined; + // (undocumented) + static createRange(range: Range3d, capped: boolean): Box | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + // (undocumented) + getBaseOrigin(): Point3d; + // (undocumented) + getBaseX(): number; + // (undocumented) + getBaseY(): number; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + getCorners(): Point3d[]; + // (undocumented) + getTopOrigin(): Point3d; + // (undocumented) + getTopX(): number; + // (undocumented) + getTopY(): number; + // (undocumented) + getVectorX(): Vector3d; + // (undocumented) + getVectorY(): Vector3d; + // (undocumented) + getVectorZ(): Vector3d; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + strokeConstantVSection(zFraction: number): LineString3d; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// WARNING: primaryCapId has incomplete type information +// @public (undocumented) +class BoxTopology { + // (undocumented) + static readonly axisEdgeVertex: number[][][]; + // (undocumented) + static readonly cornerIndexCCW: number[][]; + // (undocumented) + static readonly faceDirections: number[][][]; + // (undocumented) + static readonly faceId: number[][]; + // (undocumented) + static readonly partnerFace: number[][]; + static readonly points: Point3d[]; +} + +// @public +class BSpline1dNd { + protected constructor(numPoles: number, poleLength: number, order: number, knots: KnotVector); + // (undocumented) + basisBuffer: Float64Array; + // (undocumented) + basisBuffer1: Float64Array; + // (undocumented) + basisBuffer2: Float64Array; + // (undocumented) + static create(numPoles: number, poleLength: number, order: number, knots: KnotVector): BSpline1dNd | undefined; + // (undocumented) + readonly degree: number; + // (undocumented) + evaluateBasisFunctionsInSpan(spanIndex: number, spanFraction: number, f: Float64Array, df?: Float64Array, ddf?: Float64Array): void; + // (undocumented) + evaluateBuffersAtKnot(u: number, numDerivative?: number): void; + // (undocumented) + evaluateBuffersInSpan(spanIndex: number, spanFraction: number): void; + // (undocumented) + evaluateBuffersInSpan1(spanIndex: number, spanFraction: number): void; + // (undocumented) + getPoint3dPole(i: number, result?: Point3d): Point3d | undefined; + // (undocumented) + knots: KnotVector; + // (undocumented) + readonly numPoles: number; + // (undocumented) + readonly numSpan: number; + // (undocumented) + readonly order: number; + // (undocumented) + packedData: Float64Array; + // (undocumented) + poleBuffer: Float64Array; + // (undocumented) + poleBuffer1: Float64Array; + // (undocumented) + poleBuffer2: Float64Array; + // (undocumented) + poleLength: number; + // (undocumented) + reverseInPlace(): void; + // (undocumented) + spanFractionToKnot(span: number, localFraction: number): number; + sumPoleBuffer1ForSpan(spanIndex: number): void; + sumPoleBuffer2ForSpan(spanIndex: number): void; + sumPoleBufferForSpan(spanIndex: number): void; + testCloseablePolygon(mode?: BSplineWrapMode): boolean; +} + +// @public +class BSpline2dNd extends GeometryQuery { + protected constructor(numPolesU: number, numPolesV: number, poleLength: number, knotsU: KnotVector, knotsV: KnotVector); + // (undocumented) + protected _basisBuffer1UV: Float64Array[]; + // (undocumented) + protected _basisBufferUV: Float64Array[]; + // (undocumented) + protected _poleBuffer: Float64Array; + // (undocumented) + protected _poleBuffer1UV: Float64Array[]; + // (undocumented) + coffs: Float64Array; + // (undocumented) + degreeUV(select: UVSelect): number; + // (undocumented) + evaluateBuffersAtKnot(u: number, v: number, numDerivative?: number): void; + extendRangeXYZ(rangeToExtend: Range3d, transform?: Transform): void; + extendRangeXYZH(rangeToExtend: Range3d, transform?: Transform): void; + abstract fractionToPointAndDerivatives(_fractionU: number, _fractionV: number, _result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; + fractionToRigidFrame(fractionU: number, fractionV: number, result?: Transform): Transform | undefined; + // (undocumented) + getPoint3dPole(i: number, j: number, result?: Point3d): Point3d | undefined; + // (undocumented) + getPoint3dPoleXYZW(i: number, j: number, result?: Point3d): Point3d | undefined; + isClosable(select: UVSelect): boolean; + // (undocumented) + knots: KnotVector[]; + // (undocumented) + numberToUVSelect(value: number): UVSelect; + // (undocumented) + numPolesTotal(): number; + // (undocumented) + numPolesUV(select: UVSelect): number; + // (undocumented) + numSpanUV(select: UVSelect): number; + // (undocumented) + orderUV(select: UVSelect): number; + // (undocumented) + poleDimension: number; + // (undocumented) + poleStepUV(select: UVSelect): number; + reverseInPlace(select: UVSelect): void; + setWrappable(select: UVSelect, value: BSplineWrapMode): void; + // (undocumented) + spanFractionsToBasisFunctions(select: UVSelect, spanIndex: number, spanFraction: number, f: Float64Array, df?: Float64Array): void; + spanFractionToKnot(select: UVSelect, span: number, localFraction: number): number; + sumpoleBufferDerivativesForSpan(spanIndexU: number, spanIndexV: number): void; + sumPoleBufferForSpan(spanIndexU: number, spanIndexV: number): void; + // (undocumented) + static validOrderAndPoleCounts(orderU: number, numPolesU: number, orderV: number, numPolesV: number, numUV: number): boolean; +} + +// @public +class BSplineCurve3d extends BSplineCurve3dBase { + // (undocumented) + clone(): BSplineCurve3d; + // (undocumented) + cloneTransformed(transform: Transform): BSplineCurve3d; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; + computeStrokeCountForOptions(options?: StrokeOptions): number; + copyKnots(includeExtraEndKnot: boolean): number[]; + copyPoints(): any[]; + copyPointsFloat64Array(): Float64Array; + static create(poleArray: Float64Array | Point3d[], knotArray: Float64Array | number[], order: number): BSplineCurve3d | undefined; + static createUniformKnots(poles: Point3d[] | Float64Array, order: number): BSplineCurve3d | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; + // (undocumented) + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + evaluatePointAndTangentInSpan(spanIndex: number, spanFraction: number): Ray3d; + evaluatePointInSpan(spanIndex: number, spanFraction: number): Point3d; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + // (undocumented) + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + // (undocumented) + getPolePoint3d(poleIndex: number, result?: Point3d): Point3d | undefined; + // (undocumented) + getPolePoint4d(poleIndex: number, result?: Point4d): Point4d | undefined; + getSaturatedBezierSpan3d(spanIndex: number, result?: BezierCurveBase): BezierCurveBase | undefined; + getSaturatedBezierSpan3dH(spanIndex: number, result?: BezierCurveBase): BezierCurve3dH | undefined; + getSaturatedBezierSpan3dOr3dH(spanIndex: number, prefer3dH: boolean, result?: BezierCurveBase): BezierCurveBase | undefined; + // (undocumented) + isAlmostEqual(other: any): boolean; + readonly isClosable: BSplineWrapMode; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + knotToPoint(u: number, result?: Point3d): Point3d; + knotToPointAnd2Derivatives(u: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + knotToPointAndDerivative(u: number, result?: Ray3d): Ray3d; + // (undocumented) + quickLength(): number; + setWrappable(value: BSplineWrapMode): void; + // (undocumented) + spanFractionToKnot(span: number, localFraction: number): number; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class BSplineCurve3dBase extends CurvePrimitive { + protected constructor(poleDimension: number, numPoles: number, order: number, knots: KnotVector); + // (undocumented) + protected _bcurve: BSpline1dNd; + appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; + closestPoint(spacePoint: Point3d, _extend: boolean): CurveLocationDetail | undefined; + collectBezierSpans(prefer3dH: boolean): BezierCurveBase[]; + copyKnots(includeExtraEndKnot: boolean): number[]; + // (undocumented) + readonly degree: number; + endPoint(): Point3d; + abstract evaluatePointAndTangentInSpan(spanIndex: number, spanFraction: number, result?: Ray3d): Ray3d; + abstract evaluatePointInSpan(spanIndex: number, spanFraction: number, result?: Point3d): Point3d; + // (undocumented) + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + abstract getPolePoint3d(poleIndex: number, result?: Point3d): Point3d | undefined; + abstract getPolePoint4d(poleIndex: number, result?: Point4d): Point4d | undefined; + abstract getSaturatedBezierSpan3dOr3dH(spanIndex: number, prefer3dH: boolean, result?: BezierCurveBase): BezierCurveBase | undefined; + abstract knotToPoint(knot: number, result?: Point3d): Point3d; + abstract knotToPointAnd2Derivatives(knot: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + abstract knotToPointAndDerivative(knot: number, result?: Ray3d): Ray3d; + // (undocumented) + readonly numPoles: number; + // (undocumented) + readonly numSpan: number; + // (undocumented) + readonly order: number; + poleIndexToDataIndex(poleIndex: number): number | undefined; + reverseInPlace(): void; + setWrappable(value: BSplineWrapMode): void; + startPoint(): Point3d; +} + +// @public +class BSplineCurve3dH extends BSplineCurve3dBase { + // (undocumented) + clone(): BSplineCurve3dH; + // (undocumented) + cloneTransformed(transform: Transform): BSplineCurve3dH; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; + computeStrokeCountForOptions(options?: StrokeOptions): number; + copyPoints(): any[]; + copyPointsFloat64Array(): Float64Array; + static create(controlPoints: Float64Array | Point4d[] | Point3d[], knotArray: Float64Array | number[], order: number): BSplineCurve3dH | undefined; + static createUniformKnots(controlPoints: Point3d[] | Point4d[] | Float64Array, order: number): BSplineCurve3dH | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; + // (undocumented) + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + evaluatePointAndTangentInSpan(spanIndex: number, spanFraction: number, result?: Ray3d): Ray3d; + evaluatePointInSpan(spanIndex: number, spanFraction: number, result?: Point3d): Point3d; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + // (undocumented) + getPolePoint3d(poleIndex: number, result?: Point3d): Point3d | undefined; + // (undocumented) + getPolePoint4d(poleIndex: number, result?: Point4d): Point4d | undefined; + getSaturatedBezierSpan3dH(spanIndex: number, result?: BezierCurveBase): BezierCurveBase | undefined; + getSaturatedBezierSpan3dOr3dH(spanIndex: number, _prefer3dH: boolean, result?: BezierCurveBase): BezierCurveBase | undefined; + // (undocumented) + isAlmostEqual(other: any): boolean; + readonly isClosable: boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + knotToPoint(u: number, result?: Point3d): Point3d; + knotToPointAnd2Derivatives(u: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + knotToPointAndDerivative(u: number, result?: Ray3d): Ray3d; + // (undocumented) + quickLength(): number; + // (undocumented) + spanFractionToKnot(span: number, localFraction: number): number; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class BSplineSurface3d extends BSpline2dNd, implements BSplineSurface3dQuery { + // (undocumented) + clone(): BSplineSurface3d; + cloneTransformed(transform: Transform): BSplineSurface3d; + copyKnots(select: UVSelect, includeExtraEndKnot: boolean): number[]; + copyPointsFloat64Array(): Float64Array; + static create(controlPointArray: Point3d[] | Float64Array, numPolesU: number, orderU: number, knotArrayU: number[] | Float64Array | undefined, numPolesV: number, orderV: number, knotArrayV: number[] | Float64Array | undefined): BSplineSurface3d | undefined; + static createGrid(points: number[][][], orderU: number, knotArrayU: number[] | Float64Array | undefined, orderV: number, knotArrayV: number[] | Float64Array | undefined): BSplineSurface3d | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + fractionToPoint(fractionU: number, fractionV: number): Point3d; + fractionToPointAndDerivatives(fractionU: number, fractionV: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + getPointArray(flatArray?: boolean): any[]; + getPointGridJSON(): PackedPointGrid; + // (undocumented) + getPole(i: number, j: number, result?: Point3d): Point3d | undefined; + // (undocumented) + isAlmostEqual(other: any): boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + knotToPoint(u: number, v: number): Point3d; + knotToPointAndDerivatives(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class BSplineSurface3dH extends BSpline2dNd, implements BSplineSurface3dQuery { + // (undocumented) + clone(): BSplineSurface3dH; + // (undocumented) + cloneTransformed(transform: Transform): BSplineSurface3dH; + copyKnots(select: UVSelect, includeExtraEndKnot: boolean): number[]; + copyPoints4d(): Point4d[]; + copyPointsAndWeights(points: Point3d[], weights: number[], formatter?: (x: number, y: number, z: number) => any): void; + static create(controlPointArray: Point3d[], weightArray: number[], numPolesU: number, orderU: number, knotArrayU: number[] | undefined, numPolesV: number, orderV: number, knotArrayV: number[] | undefined): BSplineSurface3dH | undefined; + static createGrid(xyzwGrid: number[][][], weightStyle: WeightStyle, orderU: number, knotArrayU: number[], orderV: number, knotArrayV: number[]): BSplineSurface3dH | undefined; + dispatchToGeometryHandler(handler: GeometryHandler): any; + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + fractionToPoint(fractionU: number, fractionV: number, result?: Point3d): Point3d; + // (undocumented) + fractionToPoint4d(fractionU: number, fractionV: number): Point4d; + fractionToPointAndDerivatives(fractionU: number, fractionV: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + getPointGridJSON(): PackedPointGrid; + // (undocumented) + getPole(i: number, j: number, result?: Point3d): Point3d | undefined; + // (undocumented) + isAlmostEqual(other: any): boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + knotToPoint(knotU: number, knotV: number, result?: Point3d): Point3d; + knotToPoint4d(u: number, v: number): Point4d; + knotToPointAndDerivatives(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +interface BSplineSurface3dQuery { + // (undocumented) + clone(): BSplineSurface3dQuery; + // (undocumented) + cloneTransformed(transform: Transform): BSplineSurface3dQuery; + degreeUV(select: UVSelect): number; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + // (undocumented) + fractionToPoint(uFractioin: number, vFraction: number): Point3d; + // (undocumented) + fractionToRigidFrame(uFraction: number, vFraction: number): Transform | undefined; + getPointGridJSON(): PackedPointGrid; + // (undocumented) + isAlmostEqual(other: any): boolean; + // (undocumented) + isClosable(select: UVSelect): boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + knotToPoint(uKnot: number, vKnot: number): Point3d; + numberToUVSelect(value: number): UVSelect; + // (undocumented) + numPolesTotal(): number; + numPolesUV(select: UVSelect): number; + numSpanUV(select: UVSelect): number; + orderUV(select: UVSelect): number; + poleStepUV(select: UVSelect): number; + // (undocumented) + reverseInPlace(select: UVSelect): void; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +enum BSplineWrapMode { + None = 0, + OpenByAddingControlPoints = 1, + OpenByRemovingKnots = 2 +} + +// @public +enum ClipMask { + // (undocumented) + All = 63, + // (undocumented) + None = 0, + // (undocumented) + XAndY = 15, + // (undocumented) + XHigh = 2, + // (undocumented) + XLow = 1, + // (undocumented) + YHigh = 8, + // (undocumented) + YLow = 4, + // (undocumented) + ZHigh = 32, + // (undocumented) + ZLow = 16 +} + +// @public +interface Clipper { + // (undocumented) + announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: AnnounceNumberNumber): boolean; + // (undocumented) + isPointOnOrInside(point: Point3d, tolerance?: number): boolean; +} + +// @public +class ClipPlane implements Clipper { + // (undocumented) + announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; + // (undocumented) + appendIntersectionRadians(arc: Arc3d, intersectionRadians: GrowableFloat64Array): void; + clone(): ClipPlane; + cloneNegated(): ClipPlane; + // (undocumented) + convexPolygonClipInPlace(xyz: Point3d[], work: Point3d[]): void; + // (undocumented) + convexPolygonSplitInsideOutside(xyz: Point3d[], xyzIn: Point3d[], xyzOut: Point3d[], altitudeRange: Range1d): void; + // (undocumented) + static createEdgeAndUpVector(point0: Point3d, point1: Point3d, upVector: Vector3d, tiltAngle: Angle, result?: ClipPlane): ClipPlane | undefined; + // (undocumented) + static createEdgeXY(point0: Point3d, point1: Point3d, result?: ClipPlane): ClipPlane | undefined; + static createNormalAndDistance(normal: Vector3d, distance: number, invisible?: boolean, interior?: boolean, result?: ClipPlane): ClipPlane | undefined; + static createNormalAndPoint(normal: Vector3d, point: Point3d, invisible?: boolean, interior?: boolean, result?: ClipPlane): ClipPlane | undefined; + static createNormalAndPointXYZXYZ(normalX: number, normalY: number, normalZ: number, originX: number, originY: number, originZ: number, invisible?: boolean, interior?: boolean): ClipPlane | undefined; + static createPlane(plane: Plane3dByOriginAndUnitNormal, invisible?: boolean, interior?: boolean, result?: ClipPlane): ClipPlane; + // (undocumented) + readonly distance: number; + // (undocumented) + dotProductPlaneNormalPoint(point: Point3d): number; + // (undocumented) + dotProductVector(vector: Vector3d): number; + // (undocumented) + evaluatePoint(point: Point3d): number; + // (undocumented) + static fractionTol: number; + // (undocumented) + static fromJSON(json: any, result?: ClipPlane): ClipPlane | undefined; + getBoundedSegmentSimpleIntersection(pointA: Point3d, pointB: Point3d): number | undefined; + // (undocumented) + getPlane3d(): Plane3dByOriginAndUnitNormal; + // (undocumented) + getPlane4d(): Point4d; + // (undocumented) + readonly interior: boolean; + // (undocumented) + readonly invisible: boolean; + // (undocumented) + readonly inwardNormalRef: Vector3d; + // (undocumented) + isAlmostEqual(other: ClipPlane): boolean; + // (undocumented) + isPointInside(point: Point3d, tolerance?: number): boolean; + // (undocumented) + isPointOn(point: Point3d, tolerance?: number): boolean; + // (undocumented) + isPointOnOrInside(point: Point3d, tolerance?: number): boolean; + // (undocumented) + multiplyPlaneByMatrix(matrix: Matrix4d): void; + negateInPlace(): void; + offsetDistance(offset: number): void; + // (undocumented) + polygonCrossings(xyz: Point3d[], crossings: Point3d[]): void; + // (undocumented) + setFlags(invisible: boolean, interior: boolean): void; + // (undocumented) + setInvisible(invisible: boolean): void; + // (undocumented) + setPlane4d(plane: Point4d): void; + toJSON(): any; + // (undocumented) + transformInPlace(transform: Transform): boolean; +} + +// @public +enum ClipPlaneContainment { + // (undocumented) + Ambiguous = 2, + // (undocumented) + StronglyInside = 1, + // (undocumented) + StronglyOutside = 3 +} + +// @public +class ClipPrimitive { + protected constructor(planeSet?: UnionOfConvexClipPlaneSets | undefined, isInvisible?: boolean); + // (undocumented) + protected _clipPlanes?: UnionOfConvexClipPlaneSets; + // (undocumented) + protected _invisible: boolean; + // (undocumented) + protected _maskPlanes?: UnionOfConvexClipPlaneSets; + static addOutsideEdgeSetToParams(x0: number, y0: number, x1: number, y1: number, pParams: PlaneSetParamsCache, isInvisible?: boolean): void; + static addShapeToParams(shape: Point3d[], pFlags: number[], pParams: PlaneSetParamsCache): void; + classifyPointContainment(points: Point3d[], ignoreMasks: boolean): ClipPlaneContainment; + // (undocumented) + containsZClip(): boolean; + // (undocumented) + abstract fetchClipPlanesRef(): UnionOfConvexClipPlaneSets | undefined; + // (undocumented) + abstract fetchMaskPlanesRef(): UnionOfConvexClipPlaneSets | undefined; + abstract getRange(returnMaskRange: boolean, transform: Transform, result?: Range3d): Range3d | undefined; + // (undocumented) + readonly invisible: boolean; + // (undocumented) + static isLimitEdge(limitValue: number, point0: Point3d, point1: Point3d): boolean; + // (undocumented) + abstract multiplyPlanesTimesMatrix(matrix: Matrix4d): boolean; + setInvisible(invisible: boolean): void; + // (undocumented) + abstract toJSON(): any; + transformInPlace(transform: Transform): boolean; +} + +// @public +class ClipShape extends ClipPrimitive { + protected constructor(polygon?: Point3d[], zLow?: number, zHigh?: number, transform?: Transform, isMask?: boolean, invisible?: boolean); + // (undocumented) + protected _bCurve: BSplineCurve3d | undefined; + // (undocumented) + protected _isMask: boolean; + // (undocumented) + protected _polygon: Point3d[]; + // (undocumented) + protected _transformFromClip: Transform | undefined; + // (undocumented) + protected _transformToClip: Transform | undefined; + // (undocumented) + protected _transformValid: boolean; + // (undocumented) + protected _zHigh: number | undefined; + // (undocumented) + protected _zHighValid: boolean; + // (undocumented) + protected _zLow: number | undefined; + // (undocumented) + protected _zLowValid: boolean; + arePlanesDefined(): boolean; + readonly bCurve: BSplineCurve3d | undefined; + clone(result?: ClipShape): ClipShape; + static createBlock(extremities: Range3d, clipMask: ClipMask, isMask?: boolean, invisible?: boolean, transform?: Transform, result?: ClipShape): ClipShape; + static createEmpty(isMask?: boolean, invisible?: boolean, transform?: Transform, result?: ClipShape): ClipShape; + static createFrom(other: ClipShape, result?: ClipShape): ClipShape; + static createShape(polygon?: Point3d[], zLow?: number, zHigh?: number, transform?: Transform, isMask?: boolean, invisible?: boolean, result?: ClipShape): ClipShape | undefined; + fetchClipPlanesRef(): UnionOfConvexClipPlaneSets; + fetchMaskPlanesRef(): UnionOfConvexClipPlaneSets | undefined; + // (undocumented) + static fromJSON(json: any, result?: ClipShape): ClipShape | undefined; + getRange(returnMaskRange?: boolean, transform?: Transform, result?: Range3d): Range3d | undefined; + initSecondaryProps(isMask: boolean, zLow?: number, zHigh?: number, transform?: Transform): void; + readonly invisible: boolean; + readonly isMask: boolean; + readonly isValidPolygon: boolean; + // (undocumented) + readonly isXYPolygon: boolean; + // (undocumented) + multiplyPlanesTimesMatrix(matrix: Matrix4d): boolean; + performTransformFromClip(point: Point3d): void; + performTransformToClip(point: Point3d): void; + pointInside(point: Point3d, onTolerance?: number): boolean; + readonly polygon: Point3d[]; + setPolygon(polygon: Point3d[]): void; + // (undocumented) + toJSON(): any; + readonly transformFromClip: Transform | undefined; + // (undocumented) + transformInPlace(transform: Transform): boolean; + readonly transformToClip: Transform | undefined; + readonly transformValid: boolean; + readonly zHigh: number | undefined; + readonly zHighValid: boolean; + readonly zLow: number | undefined; + readonly zLowValid: boolean; +} + +// @public +enum ClipStatus { + // (undocumented) + ClipRequired = 0, + // (undocumented) + TrivialAccept = 2, + // (undocumented) + TrivialReject = 1 +} + +// @public +class ClipUtilities { + static announceNNC(intervals: Range1d[], cp: CurvePrimitive, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + static clipPolygonToClipShape(polygon: Point3d[], clipShape: ClipShape): Point3d[][]; + // (undocumented) + static collectClippedCurves(curve: CurvePrimitive, clipper: Clipper): CurvePrimitive[]; + static pointSetSingleClipStatus(points: GrowableXYZArray, planeSet: UnionOfConvexClipPlaneSets, tolerance: number): ClipStatus; + // (undocumented) + static selectIntervals01(curve: CurvePrimitive, unsortedFractions: GrowableFloat64Array, clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; +} + +// @public +class ClipVector { + appendClone(clip: ClipShape): void; + appendReference(clip: ClipShape): void; + appendShape(shape: Point3d[], zLow?: number, zHigh?: number, transform?: Transform, isMask?: boolean, invisible?: boolean): boolean; + // (undocumented) + boundingRange: Range3d; + classifyPointContainment(points: Point3d[], ignoreMasks?: boolean): ClipPlaneContainment; + classifyRangeContainment(range: Range3d, ignoreMasks: boolean): ClipPlaneContainment; + clear(): void; + readonly clips: ClipShape[]; + clone(result?: ClipVector): ClipVector; + static createClipShapeClones(clips: ClipShape[], result?: ClipVector): ClipVector; + static createClipShapeRefs(clips: ClipShape[], result?: ClipVector): ClipVector; + static createEmpty(result?: ClipVector): ClipVector; + static createFrom(donor: ClipVector, result?: ClipVector): ClipVector; + extractBoundaryLoops(loopPoints: Point3d[][], transform?: Transform): number[]; + static fromJSON(json: any, result?: ClipVector): ClipVector; + getRange(transform?: Transform, result?: Range3d): Range3d | undefined; + isAnyLineStringPointInside(points: Point3d[]): boolean; + isLineStringCompletelyContained(points: Point3d[]): boolean; + readonly isValid: boolean; + multiplyPlanesTimesMatrix(matrix: Matrix4d): boolean; + parseClipPlanes(): void; + pointInside(point: Point3d, onTolerance?: number): boolean; + setInvisible(invisible: boolean): void; + sumSizes(intervals: Segment1d[], begin: number, end: number): number; + toJSON(): any; + transformInPlace(transform: Transform): boolean; +} + +// WARNING: clusterTerminator has incomplete type information +// @public (undocumented) +class ClusterableArray extends GrowableBlockedArray { + constructor(numCoordinatePerPoint: number, numExtraDataPerPoint: number, initialBlockCapacity: number); + addBlock(data: number[]): void; + addDirect(x0: number, x1: number, x2?: number, x3?: number, x4?: number): void; + addPoint2d(xy: Point2d, a?: number, b?: number, c?: number): void; + addPoint3d(xyz: Point3d, a?: number, b?: number, c?: number): void; + // (undocumented) + static clusterGrowablePoint3dArray(source: GrowableXYZArray, tolerance?: number): PackedPointsWithIndex; + clusterIndicesLexical(clusterTolerance?: number): Uint32Array; + // (undocumented) + static clusterPoint3dArray(data: Point3d[], tolerance?: number): PackedPointsWithIndex; + countClusters(clusteredBlocks: Uint32Array): number; + // (undocumented) + createIndexBlockToClusterIndex(clusteredBlocks: Uint32Array): Uint32Array; + // (undocumented) + createIndexBlockToClusterStart(clusteredBlocks: Uint32Array): Uint32Array; + createIndexClusterToClusterStart(clusteredBlocks: Uint32Array): Uint32Array; + getData(blockIndex: number, i: number): number; + getExtraData(blockIndex: number, i: number): number; + // (undocumented) + getPoint2d(blockIndex: number, result?: Point2d): Point2d; + // (undocumented) + getPoint3d(blockIndex: number, result?: Point3d): Point3d; + // (undocumented) + static isClusterTerminator(x: number): boolean; + setExtraData(blockIndex: number, i: number, value: number): void; + setupPrimaryClusterSort(): void; + sortSubsetsBySingleKey(blockedIndices: Uint32Array, dataIndex: number): void; + // (undocumented) + static sortVectorComponent(index: number): number; + // (undocumented) + toJSON(): any[]; +} + +// @public +export function compareRange1dLexicalLowHigh(a: Range1d, b: Range1d): number; + +// @public (undocumented) +class Complex implements BeJSONFunctions { + constructor(x?: number, y?: number); + // (undocumented) + angle(): Angle; + // (undocumented) + clone(): Complex; + // (undocumented) + static create(x?: number, y?: number, result?: Complex): Complex; + // (undocumented) + distance(other: Complex): number; + // (undocumented) + divide(other: Complex, result?: Complex): Complex | undefined; + // (undocumented) + static fromJSON(json?: any): Complex; + // (undocumented) + isAlmostEqual(other: Complex): boolean; + // (undocumented) + magnitude(): number; + // (undocumented) + magnitudeSquared(): number; + // (undocumented) + minus(other: Complex, result?: Complex): Complex; + // (undocumented) + plus(other: Complex, result?: Complex): Complex; + // (undocumented) + set(x?: number, y?: number): void; + // (undocumented) + setFrom(other: Complex): void; + // (undocumented) + setFromJSON(json?: any): void; + // (undocumented) + sqrt(result?: Complex): Complex; + // (undocumented) + times(other: Complex, result?: Complex): Complex; + timesXY(x: number, y: number, result?: Complex): Complex; + toJSON(): any; + // (undocumented) + x: any; + // (undocumented) + y: any; +} + +// @public +class Cone extends SolidPrimitive, implements UVSurface, UVSurfaceIsoParametricDistance { + protected constructor(map: Transform, radiusA: number, radiusB: number, capped: boolean); + // (undocumented) + clone(): Cone; + // (undocumented) + cloneTransformed(transform: Transform): Cone | undefined; + // (undocumented) + constantVSection(vFraction: number): CurveCollection | undefined; + static createAxisPoints(centerA: Point3d, centerB: Point3d, radiusA: number, radiusB: number, capped: boolean): Cone | undefined; + static createBaseAndTarget(centerA: Point3d, centerB: Point3d, vectorX: Vector3d, vectorY: Vector3d, radiusA: number, radiusB: number, capped: boolean): Cone; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + // (undocumented) + getCenterA(): Point3d; + // (undocumented) + getCenterB(): Point3d; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + getMaxRadius(): number; + // (undocumented) + getRadiusA(): number; + // (undocumented) + getRadiusB(): number; + // (undocumented) + getVectorX(): Vector3d; + // (undocumented) + getVectorY(): Vector3d; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + maxIsoParametricDistance(): Vector2d; + strokeConstantVSection(v: number, fixedStrokeCount: number | undefined, options: StrokeOptions | undefined): LineString3d; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; + // (undocumented) + uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d; + // (undocumented) + uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + vFractionToRadius(v: number): number; +} + +// @public +class Constant { + // (undocumented) + static readonly circumferenceOfEarth: number; + // (undocumented) + static readonly diameterOfEarth: number; + // (undocumented) + static readonly oneCentimeter: number; + // (undocumented) + static readonly oneKilometer: number; + // (undocumented) + static readonly oneMeter: number; + // (undocumented) + static readonly oneMillimeter: number; +} + +// @public +class ConstructCurveBetweenCurves extends NullGeometryHandler { + handleArc3d(arc0: Arc3d): any; + handleLineSegment3d(segment0: LineSegment3d): any; + handleLineString3d(ls0: LineString3d): any; + static interpolateBetween(geometry0: GeometryQuery, fraction: number, geometry1: GeometryQuery): GeometryQuery | undefined; +} + +// WARNING: hugeVal has incomplete type information +// @public +class ConvexClipPlaneSet implements Clipper { + // (undocumented) + addPlaneToConvexSet(plane: ClipPlane | undefined): void; + // (undocumented) + addZClipPlanes(invisible: boolean, zLow?: number, zHigh?: number): void; + // (undocumented) + announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; + classifyPointContainment(points: Point3d[], onIsOutside: boolean): ClipPlaneContainment; + // (undocumented) + clipPointsOnOrInside(points: Point3d[], inOrOn: Point3d[], out: Point3d[]): void; + clipUnboundedSegment(pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; + // (undocumented) + clone(result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + // (undocumented) + static createEmpty(result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + // (undocumented) + static createPlanes(planes: ClipPlane[], result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + static createRange3dPlanes(range: Range3d, lowX?: boolean, highX?: boolean, lowY?: boolean, highY?: boolean, lowZ?: boolean, highZ?: boolean): ConvexClipPlaneSet; + static createSweptPolyline(points: Point3d[], upVector: Vector3d, tiltAngle: Angle): ConvexClipPlaneSet | undefined; + // (undocumented) + static createXYBox(x0: number, y0: number, x1: number, y1: number, result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + // (undocumented) + static createXYPolyLine(points: Point3d[], interior: boolean[], leftIsInside: boolean, result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + static createXYPolyLineInsideLeft(points: Point3d[], result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + // (undocumented) + static fromJSON(json: any, result?: ConvexClipPlaneSet): ConvexClipPlaneSet; + getRangeOfAlignedPlanes(transform?: Transform, result?: Range3d): Range3d | undefined; + // (undocumented) + isAlmostEqual(other: ConvexClipPlaneSet): boolean; + // (undocumented) + isPointInside(point: Point3d): boolean; + // (undocumented) + isPointOnOrInside(point: Point3d, tolerance: number): boolean; + // (undocumented) + isSphereInside(point: Point3d, radius: number): boolean; + // (undocumented) + multiplyPlanesByMatrix(matrix: Matrix4d): void; + negateAllPlanes(): void; + // (undocumented) + readonly planes: ClipPlane[]; + // (undocumented) + polygonClip(input: Point3d[], output: Point3d[], work: Point3d[]): void; + reloadSweptPolygon(points: Point3d[], sweepDirection: Vector3d, sideSelect: number): number; + // (undocumented) + setInvisible(invisible: boolean): void; + // (undocumented) + static testRayIntersections(tNear: Float64Array, origin: Point3d, direction: Vector3d, planes: ConvexClipPlaneSet): boolean; + // (undocumented) + toJSON(): any; + // (undocumented) + transformInPlace(transform: Transform): void; +} + +// @public (undocumented) +class ConvexPolygon2d { + constructor(points: Point2d[]); + clipRay(ray: Ray2d): Range1d; + static computeConvexHull(points: Point2d[]): Point2d[]; + containsPoint(point: Point2d): boolean; + static createHull(points: Point2d[]): ConvexPolygon2d; + static createHullIsValidCheck(points: Point2d[]): ConvexPolygon2d; + distanceOutside(xy: Point2d): number; + static isValidConvexHull(points: Point2d[]): boolean; + offsetInPlace(distance: number): boolean; + readonly points: Point2d[]; + rangeAlongRay(ray: Ray2d): Range1d; + rangePerpendicularToRay(ray: Ray2d): Range1d; +} + +// @public +class CoordinateXYZ extends GeometryQuery { + clone(): GeometryQuery | undefined; + cloneTransformed(transform: Transform): GeometryQuery | undefined; + // (undocumented) + static create(point: Point3d): CoordinateXYZ; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + isAlmostEqual(other: GeometryQuery): boolean; + isSameGeometryClass(other: GeometryQuery): boolean; + // (undocumented) + readonly point: Point3d; + range(): Range3d; + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class CurveChain extends CurveCollection { + protected constructor(); + // (undocumented) + protected _curves: CurvePrimitive[]; + // (undocumented) + readonly children: CurvePrimitive[]; + // (undocumented) + cloneStroked(options?: StrokeOptions): AnyCurve; + abstract cyclicCurvePrimitive(index: number): CurvePrimitive | undefined; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + // (undocumented) + getChild(i: number): CurvePrimitive | undefined; + // (undocumented) + getPackedStrokes(options?: StrokeOptions): GrowableXYZArray | undefined; + reverseChildrenInPlace(): void; + // (undocumented) + tryAddChild(child: AnyCurve): boolean; +} + +// @public +class CurveChainWithDistanceIndex extends CurvePrimitive { + chainDistanceToChainFraction(distance: number): number; + // WARNING: The type "PathFragment" needs to be exported by the package (e.g. added to index.ts) + protected chainDistanceToFragment(distance: number, allowExtrapolation?: boolean): PathFragment | undefined; + // (undocumented) + clone(): CurvePrimitive | undefined; + cloneTransformed(transform: Transform): CurvePrimitive | undefined; + closestPoint(spacePoint: Point3d, _extend: boolean): CurveLocationDetail | undefined; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; + computeStrokeCountForOptions(options?: StrokeOptions): number; + // (undocumented) + static createCapture(path: CurveChain, options?: StrokeOptions): CurveChainWithDistanceIndex; + // WARNING: The type "PathFragment" needs to be exported by the package (e.g. added to index.ts) + protected curveAndChildFractionToFragment(curve: CurvePrimitive, fraction: number): PathFragment | undefined; + // (undocumented) + curveLength(): number; + curveLengthBetweenFractions(fraction0: number, fraction1: number): number; + dispatchToGeometryHandler(handler: GeometryHandler): any; + emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void; + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(result?: Point3d): Point3d; + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + // (undocumented) + fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Ray3d; + isAlmostEqual(other: GeometryQuery): boolean; + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail; + // (undocumented) + quickLength(): number; + reverseInPlace(): void; + startPoint(result?: Point3d): Point3d; + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class CurveCollection extends GeometryQuery { + abstract announceToCurveProcessor(processor: RecursiveCurveProcessor): void; + checkForNonLinearPrimitives(): boolean; + // (undocumented) + clone(): CurveCollection | undefined; + abstract cloneEmptyPeer(): CurveCollection; + abstract cloneStroked(options?: StrokeOptions): AnyCurve; + // (undocumented) + cloneTransformed(transform: Transform): CurveCollection | undefined; + // (undocumented) + abstract dgnBoundaryType(): number; + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + // (undocumented) + abstract getChild(i: number): AnyCurve | undefined; + readonly isAnyRegionType: boolean; + readonly isClosedPath: boolean; + // (undocumented) + isInner: boolean; + readonly isOpenPath: boolean; + maxGap(): number; + sumLengths(): number; + abstract tryAddChild(child: AnyCurve): boolean; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public (undocumented) +class CurveCurve { + static intersectionProjectedXY(worldToLocal: Matrix4d, geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair; + static intersectionXY(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair; +} + +// @public +enum CurveIntervalRole { + intervalEnd = 12, + intervalInterior = 11, + intervalStart = 10, + isolated = 0, + isolatedAtVertex = 1 +} + +// @public +class CurveLocationDetail { + constructor(); + a: number; + childDetail?: CurveLocationDetail; + clone(result?: CurveLocationDetail): CurveLocationDetail; + static create(curve: CurvePrimitive, result?: CurveLocationDetail): CurveLocationDetail; + static createConditionalMoveSignedDistance(allowExtension: boolean, curve: CurvePrimitive, startFraction: number, endFraction: number, requestedSignedDistance: number, result?: CurveLocationDetail): CurveLocationDetail; + static createCurveEvaluatedFraction(curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail): CurveLocationDetail; + static createCurveFractionPoint(curve: CurvePrimitive, fraction: number, point: Point3d, result?: CurveLocationDetail): CurveLocationDetail; + static createCurveFractionPointDistance(curve: CurvePrimitive, fraction: number, point: Point3d, a: number, result?: CurveLocationDetail): CurveLocationDetail; + static createCurveFractionPointDistanceCurveSearchStatus(curve: CurvePrimitive, fraction: number, point: Point3d, distance: number, status: CurveSearchStatus, result?: CurveLocationDetail): CurveLocationDetail; + curve?: CurvePrimitive; + curveSearchStatus?: CurveSearchStatus; + fraction: number; + intervalRole?: CurveIntervalRole; + readonly isIsolated: boolean; + point: Point3d; + pointQ: Point3d; + setCurve(curve: CurvePrimitive): void; + setDistanceTo(point: Point3d): void; + setFP(fraction: number, point: Point3d, vector?: Vector3d, a?: number): void; + setFR(fraction: number, ray: Ray3d, a?: number): void; + setIntervalRole(value: CurveIntervalRole): void; + updateIfCloserCurveFractionPointDistance(curve: CurvePrimitive, fraction: number, point: Point3d, a: number): boolean; + vectorInCurveLocationDetail?: Vector3d; +} + +// @public +class CurveLocationDetailArrayPair { + constructor(); + // (undocumented) + dataA: CurveLocationDetail[]; + // (undocumented) + dataB: CurveLocationDetail[]; +} + +// @public +class CurveLocationDetailPair { + constructor(); + clone(result?: CurveLocationDetailPair): CurveLocationDetailPair; + static createDetailRef(detailA: CurveLocationDetail, detailB: CurveLocationDetail, result?: CurveLocationDetailPair): CurveLocationDetailPair; + // (undocumented) + detailA: CurveLocationDetail; + // (undocumented) + detailB: CurveLocationDetail; +} + +// @public +class CurvePrimitive extends GeometryQuery { + protected constructor(); + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + addMappedStrokesToLineString3D(map: StrokeCountMap, linestring: LineString3d): number; + announceClipIntervals(_clipper: Clipper, _announce?: AnnounceNumberNumberCurvePrimitive): boolean; + appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; + clonePartialCurve(_fractionA: number, _fractionB: number): CurvePrimitive | undefined; + closestPoint(spacePoint: Point3d, extend: boolean): CurveLocationDetail | undefined; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentMap?: StrokeCountMap): void; + abstract computeStrokeCountForOptions(options?: StrokeOptions): number; + curveLength(): number; + curveLengthBetweenFractions(fraction0: number, fraction1: number): number; + curveLengthWithFixedIntervalCountQuadrature(fraction0: number, fraction1: number, numInterval: number, numGauss?: number): number; + abstract emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void; + abstract emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(result?: Point3d): Point3d; + fractionAndDistanceToPointOnTangent(fraction: number, distance: number): Point3d; + fractionToFrenetFrame(fraction: number, result?: Transform): Transform | undefined; + abstract fractionToPoint(fraction: number, result?: Point3d): Point3d; + abstract fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; + abstract fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + // (undocumented) + fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Ray3d; + getFractionToDistanceScale(): number | undefined; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + static installStrokeCountMap(curve: CurvePrimitive, curveMap: StrokeCountMap, parentMap?: StrokeCountMap): void; + readonly isExtensibleFractionSpace: boolean; + abstract isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail; + protected moveSignedDistanceFromFractionGeneric(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail; + abstract quickLength(): number; + abstract reverseInPlace(): void; + startPoint(result?: Point3d): Point3d; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + strokeData?: StrokeCountMap; +} + +// @public +enum CurveSearchStatus { + error = 0, + stoppedAtBoundary = 2, + success = 1 +} + +// @public +class DeepCompare { + constructor(numberRelTol?: number); + // (undocumented) + compare(a: any, b: any, tolerance?: number): boolean; + // (undocumented) + compareNumber(_a: number, _b: number): boolean; + // (undocumented) + errorTracker: any[]; + // (undocumented) + numberRelTol: number; + // (undocumented) + propertyCounts: { + [key: string]: any; + } + // (undocumented) + typeCounts: { + arrays: number; + booleans: number; + functions: number; + numbers: number; + objects: number; + strings: number; + undefined: number; + } +} + +// @public (undocumented) +class Degree2PowerPolynomial { + constructor(c0?: number, c1?: number, c2?: number); + // (undocumented) + addConstant(a: number): void; + // (undocumented) + addSquaredLinearTerm(a: number, b: number, s?: number): void; + // (undocumented) + coffs: number[]; + evaluate(x: number): number; + evaluateDerivative(x: number): number; + // (undocumented) + static fromRootsAndC2(root0: number, root1: number, c2?: number): Degree2PowerPolynomial; + // (undocumented) + realRoots(): number[] | undefined; + static solveQuadratic(a: number, b: number, c: number): number[] | undefined; + // (undocumented) + tryGetVertexFactorization(): { + x0: number; + y0: number; + c: number; + } | undefined; +} + +// @public (undocumented) +class Degree3PowerPolynomial { + constructor(c0?: number, c1?: number, c2?: number, c3?: number); + // (undocumented) + addConstant(a: number): void; + // (undocumented) + addSquaredLinearTerm(a: number, b: number, s?: number): void; + // (undocumented) + coffs: number[]; + evaluate(x: number): number; + evaluateDerivative(x: number): number; + // (undocumented) + static fromRootsAndC3(root0: number, root1: number, root2: number, c3?: number): Degree3PowerPolynomial; +} + +// @public (undocumented) +class Degree4PowerPolynomial { + constructor(c0?: number, c1?: number, c2?: number, c3?: number, c4?: number); + // (undocumented) + addConstant(a: number): void; + // (undocumented) + coffs: number[]; + evaluate(x: number): number; + evaluateDerivative(x: number): number; + // (undocumented) + static fromRootsAndC4(root0: number, root1: number, root2: number, root3: number, c4?: number): Degree4PowerPolynomial; +} + +// @public +class FacetFaceData { + clone(result?: FacetFaceData): FacetFaceData; + convertParamToDistance(param: Point2d, result?: Point2d): Point2d; + convertParamToNormalized(param: Point2d, result?: Point2d): Point2d; + convertParamXYToDistance(x: number, y: number, result?: Point2d): Point2d; + convertParamXYToNormalized(x: number, y: number, result?: Point2d): Point2d; + static createNull(): FacetFaceData; + // (undocumented) + readonly paramDistanceRange: Range2d; + // (undocumented) + readonly paramRange: Range2d; + scaleDistances(distanceScale: number): void; + setNull(): void; + setParamDistanceRangeFromNewFaceData(polyface: IndexedPolyface, facetStart: number, facetEnd: number): boolean; +} + +// @public +class FrameBuilder { + constructor(); + announce(data: any): void; + announcePoint(point: Point3d): number; + // (undocumented) + announceVector(vector: Vector3d): number; + // (undocumented) + applyDefaultUpVector(vector?: Vector3d): void; + // (undocumented) + clear(): void; + static createFrameToDistantPoints(points: Point3d[]): Transform | undefined; + static createLocalToWorldTransformInRange(range: Range3d, scaleSelect?: AxisScaleSelect, fractionX?: number, fractionY?: number, fractionZ?: number, defaultAxisLength?: number): Transform; + static createRightHandedFrame(defaultUpVector: Vector3d | undefined, ...params: any[]): Transform | undefined; + static createRightHandedLocalToWorld(...params: any[]): Transform | undefined; + getValidatedFrame(allowLeftHanded?: boolean): Transform | undefined; + // (undocumented) + readonly hasOrigin: boolean; + savedVectorCount(): number; +} + +// WARNING: smallMetricDistance has incomplete type information +// WARNING: smallMetricDistanceSquared has incomplete type information +// WARNING: smallAngleRadians has incomplete type information +// WARNING: smallAngleRadiansSquared has incomplete type information +// WARNING: largeFractionResult has incomplete type information +// @public (undocumented) +class Geometry { + static axisIndexToRightHandedAxisOrder(axisIndex: AxisIndex): AxisOrder; + static axisOrderToAxis(order: AxisOrder, index: number): number; + static clamp(value: number, min: number, max: number): number; + static clampToStartEnd(x: number, a: number, b: number): number; + static conditionalDivideFraction(numerator: number, denominator: number): number | undefined; + static correctSmallMetricDistance(distance: number, replacement?: number): number; + static crossProductMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; + static crossProductXYXY(ux: number, uy: number, vx: number, vy: number): number; + static crossProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d; + // (undocumented) + static curvatureMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; + // (undocumented) + static cyclic3dAxis(axis: number): number; + static defined01(value: any): number; + static distanceXYXY(x0: number, y0: number, x1: number, y1: number): number; + static distanceXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): number; + static dotProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number; + // (undocumented) + static readonly fullCircleRadiansMinusSmallAngle: number; + // (undocumented) + static hypotenuseSquaredXY(x: number, y: number): number; + // (undocumented) + static hypotenuseSquaredXYZ(x: number, y: number, z: number): number; + // (undocumented) + static hypotenuseSquaredXYZW(x: number, y: number, z: number, w: number): number; + // (undocumented) + static hypotenuseXY(x: number, y: number): number; + // (undocumented) + static hypotenuseXYZ(x: number, y: number, z: number): number; + // (undocumented) + static hypotenuseXYZW(x: number, y: number, z: number, w: number): number; + static interpolate(a: number, f: number, b: number): number; + static inverseInterpolate(x0: number, f0: number, x1: number, f1: number, targetF?: number, defaultResult?: number): number | undefined; + static inverseInterpolate01(f0: number, f1: number, targetF?: number): number | undefined; + // (undocumented) + static inverseMetricDistance(a: number): number | undefined; + // (undocumented) + static inverseMetricDistanceSquared(a: number): number | undefined; + // (undocumented) + static isAlmostEqualNumber(a: number, b: number): boolean; + static isArrayOfNumberArray(json: any, numNumberArray: number, minEntries?: number): boolean; + // (undocumented) + static isDistanceWithinTol(distance: number, tol: number): boolean; + static isIn01(x: number, apply01?: boolean): boolean; + static isIn01WithTolerance(x: number, tolerance: number): boolean; + static isNumberArray(json: any, minEntries?: number): boolean; + // (undocumented) + static isSameCoordinate(x: number, y: number, tol?: number): boolean; + // (undocumented) + static isSameCoordinateSquared(x: number, y: number): boolean; + // (undocumented) + static isSamePoint2d(dataA: Point2d, dataB: Point2d): boolean; + // (undocumented) + static isSamePoint3d(dataA: Point3d, dataB: Point3d): boolean; + // (undocumented) + static isSamePoint3dXY(dataA: Point3d, dataB: Point3d): boolean; + // (undocumented) + static isSameVector2d(dataA: Vector2d, dataB: Vector2d): boolean; + // (undocumented) + static isSameVector3d(dataA: Vector3d, dataB: Vector3d): boolean; + // (undocumented) + static isSameXYZ(dataA: XYZ, dataB: XYZ): boolean; + // (undocumented) + static isSmallAngleRadians(value: number): boolean; + // (undocumented) + static isSmallMetricDistance(distance: number): boolean; + // (undocumented) + static isSmallMetricDistanceSquared(distanceSquared: number): boolean; + // (undocumented) + static isSmallRelative(value: number): boolean; + static lexicalXYLessThan(a: XY | XYZ, b: XY | XYZ): 1 | 0 | -1; + // (undocumented) + static lexicalXYZLessThan(a: XYZ, b: XYZ): 1 | 0 | -1; + static lexicalYXLessThan(a: XY | XYZ, b: XY | XYZ): 1 | 0 | -1; + // (undocumented) + static maxAbsDiff(a: number, b0: number, b1: number): number; + // (undocumented) + static maxAbsXY(x: number, y: number): number; + // (undocumented) + static maxAbsXYZ(x: number, y: number, z: number): number; + // (undocumented) + static maxXY(a: number, b: number): number; + // (undocumented) + static maxXYZ(a: number, b: number, c: number): number; + static modulo(a: number, period: number): number; + // (undocumented) + static resolveNumber(value: number | undefined, defaultValue?: number): number; + static restrictToInterval(x: number, a: number, b: number): number; + static safeDivideFraction(numerator: number, denominator: number, defaultResult: number): number; + static solveTrigForm(constCoff: number, cosCoff: number, sinCoff: number): Vector2d[] | undefined; + // (undocumented) + static square(x: number): number; + static stepCount(stepSize: number, total: number, minCount?: number, maxCount?: number): number; + // (undocumented) + static tripleProduct(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, wx: number, wy: number, wz: number): number; + static tripleProductPoint4dXYW(columnA: Point4d, columnB: Point4d, columnC: Point4d): number; + static tripleProductXYW(columnA: XAndY, weightA: number, columnB: XAndY, weightB: number, columnC: XAndY, weightC: number): number; +} + +// @public (undocumented) +class GeometryHandler { + // (undocumented) + abstract handleArc3d(g: Arc3d): any; + // (undocumented) + handleBagOfCurves(g: BagOfCurves): any; + // (undocumented) + abstract handleBezierCurve3d(g: BezierCurve3d): any; + // (undocumented) + abstract handleBezierCurve3dH(g: BezierCurve3dH): any; + // (undocumented) + abstract handleBox(g: Box): any; + // (undocumented) + abstract handleBSplineCurve3d(g: BSplineCurve3d): any; + // (undocumented) + abstract handleBSplineCurve3dH(g: BSplineCurve3dH): any; + // (undocumented) + abstract handleBSplineSurface3d(g: BSplineSurface3d): any; + // (undocumented) + abstract handleBSplineSurface3dH(g: BSplineSurface3dH): any; + // (undocumented) + abstract handleCone(g: Cone): any; + // (undocumented) + abstract handleCoordinateXYZ(g: CoordinateXYZ): any; + // (undocumented) + handleCurveCollection(_g: CurveCollection): any; + // (undocumented) + abstract handleIndexedPolyface(g: IndexedPolyface): any; + // (undocumented) + abstract handleLinearSweep(g: LinearSweep): any; + // (undocumented) + abstract handleLineSegment3d(g: LineSegment3d): any; + // (undocumented) + abstract handleLineString3d(g: LineString3d): any; + // (undocumented) + handleLoop(g: Loop): any; + // (undocumented) + handleParityRegion(g: ParityRegion): any; + // (undocumented) + handlePath(g: Path): any; + // (undocumented) + abstract handlePointString3d(g: PointString3d): any; + // (undocumented) + abstract handleRotationalSweep(g: RotationalSweep): any; + // (undocumented) + abstract handleRuledSweep(g: RuledSweep): any; + // (undocumented) + abstract handleSphere(g: Sphere): any; + // (undocumented) + abstract handleTorusPipe(g: TorusPipe): any; + // (undocumented) + abstract handleTransitionSpiral(g: TransitionSpiral3d): any; + // (undocumented) + handleUnionRegion(g: UnionRegion): any; +} + +// @public +class GeometryQuery { + readonly children: GeometryQuery[] | undefined; + abstract clone(): GeometryQuery | undefined; + abstract cloneTransformed(transform: Transform): GeometryQuery | undefined; + // (undocumented) + abstract dispatchToGeometryHandler(handler: GeometryHandler): any; + abstract extendRange(rangeToExtend: Range3d, transform?: Transform): void; + isAlmostEqual(other: GeometryQuery): boolean; + abstract isSameGeometryClass(other: GeometryQuery): boolean; + range(transform?: Transform, result?: Range3d): Range3d; + abstract tryTransformInPlace(transform: Transform): boolean; + tryTranslateInPlace(dx: number, dy?: number, dz?: number): boolean; +} + +// @public +class GrowableBlockedArray { + constructor(blockSize: number, initialBlocks?: number); + // (undocumented) + protected _blockSize: number; + // (undocumented) + protected _data: Float64Array; + // (undocumented) + protected _inUse: number; + addBlock(newData: number[]): void; + blockCapacity(): number; + protected blockIndexToDoubleIndex(blockIndex: number): number; + checkedComponent(blockIndex: number, componentIndex: number): number | undefined; + clear(): void; + static compareLexicalBlock(data: Float64Array, blockSize: number, ia: number, ib: number): number; + component(blockIndex: number, componentIndex: number): number; + // (undocumented) + distanceBetweenBlocks(blockIndexA: number, blockIndexB: number): number; + // (undocumented) + distanceBetweenSubBlocks(blockIndexA: number, blockIndexB: number, iBegin: number, iEnd: number): number; + ensureBlockCapacity(blockCapacity: number): void; + getWithinBlock(blockIndex: number, indexWithinBlock: number): number; + protected newBlockIndex(): number; + readonly numBlocks: number; + readonly numPerBlock: number; + popBlock(): void; + sortIndicesLexical(compareBlocks?: BlockComparisonFunction): Uint32Array; +} + +// @public +class GrowableFloat64Array { + constructor(initialCapacity?: number); + // (undocumented) + atUncheckedIndex(index: number): number; + // (undocumented) + back(): number; + // (undocumented) + capacity(): number; + clear(): void; + clone(maintainExcessCapacity?: boolean): GrowableFloat64Array; + // (undocumented) + static compare(a: any, b: any): number; + compressAdjcentDuplicates(tolerance?: number): void; + static create(contents: Float64Array | number[]): GrowableFloat64Array; + ensureCapacity(newCapacity: number): void; + // (undocumented) + front(): number; + // (undocumented) + readonly length: number; + move(i: number, j: number): void; + pop(): void; + push(toPush: number): void; + pushBlockCopy(copyFromIndex: number, numToCopy: number): void; + // (undocumented) + reassign(index: number, value: number): void; + resize(newLength: number, padValue?: number): void; + restrictToInterval(a: number, b: number): void; + setAtUncheckedIndex(index: number, value: number): void; + sort(compareMethod?: (a: any, b: any) => number): void; + swap(i: number, j: number): void; +} + +// @public +class GrowableXYArray extends IndexedXYCollection { + constructor(numPoints?: number); + areaXY(): number; + // (undocumented) + back(result?: Point2d): Point2d | undefined; + clear(): void; + clone(): GrowableXYArray; + compareLexicalBlock(ia: number, ib: number): number; + component(pointIndex: number, componentIndex: number): number; + // (undocumented) + static create(data: XAndY[] | GrowableXYZArray): GrowableXYArray; + static createFromGrowableXYZArray(source: GrowableXYZArray, transform?: Transform, dest?: GrowableXYArray): GrowableXYArray; + crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number): number | undefined; + crossProductXAndYIndexIndex(origin: XAndY, targetAIndex: number, targetBIndex: number): number | undefined; + distance(i: number, j: number): number | undefined; + distanceIndexToPoint(i: number, spacePoint: Point2d): number | undefined; + ensureCapacity(pointCapacity: number): void; + // (undocumented) + extendRange(rangeToExtend: Range2d, transform?: Transform): void; + float64Data(): Float64Array; + // (undocumented) + readonly float64Length: number; + // (undocumented) + front(result?: Point2d): Point2d | undefined; + getPoint2dArray(): Point2d[]; + getPoint2dAtCheckedPointIndex(pointIndex: number, result?: Point2d): Point2d | undefined; + getPoint2dAtUncheckedPointIndex(pointIndex: number, result?: Point2d): Point2d; + // (undocumented) + getPoint3dArray(z?: number): Point3d[]; + getVector2dAtCheckedVectorIndex(vectorIndex: number, result?: Vector2d): Vector2d | undefined; + getXAtUncheckedPointIndex(pointIndex: number): number; + getYAtUncheckedPointIndex(pointIndex: number): number; + interpolate(i: number, fraction: number, j: number, result?: Point2d): Point2d | undefined; + // (undocumented) + static isAlmostEqual(dataA: GrowableXYArray | undefined, dataB: GrowableXYArray | undefined): boolean; + isIndexValid(index: number): boolean; + // (undocumented) + readonly length: number; + multiplyMatrix3dInPlace(matrix: Matrix3d): void; + multiplyTransformInPlace(transform: Transform): void; + pop(): void; + push(toPush: XAndY): void; + pushAll(points: XAndY[]): void; + pushAllXYAndZ(points: XYAndZ[] | GrowableXYZArray): void; + pushFromGrowableXYArray(source: GrowableXYArray, sourceIndex?: number): number; + pushWrap(numWrap: number): void; + // (undocumented) + pushXY(x: number, y: number): void; + resize(pointCount: number): void; + scaleInPlace(factor: number): void; + setAtCheckedPointIndex(pointIndex: number, value: XAndY): boolean; + setXYZAtCheckedPointIndex(pointIndex: number, x: number, y: number): boolean; + sortIndicesLexical(): Uint32Array; + // (undocumented) + sumLengths(): number; + transferFromGrowableXYArray(destIndex: number, source: GrowableXYArray, sourceIndex: number): boolean; + tryTransformInverseInPlace(transform: Transform): boolean; + vectorIndexIndex(i: number, j: number, result?: Vector2d): Vector2d | undefined; + vectorXAndYIndex(origin: XAndY, j: number, result?: Vector2d): Vector2d | undefined; +} + +// @public +class GrowableXYZArray extends IndexedXYZCollection { + constructor(numPoints?: number); + accumulateCrossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result: Vector3d): void; + addSteppedPoints(other: GrowableXYZArray, pointIndex0: number, step: number, numAdd: number): void; + areaXY(): number; + // (undocumented) + back(result?: Point3d): Point3d | undefined; + clear(): void; + clone(result?: GrowableXYZArray): GrowableXYZArray; + compareLexicalBlock(ia: number, ib: number): number; + component(pointIndex: number, componentIndex: number): number; + // (undocumented) + static create(data: XYAndZ[]): GrowableXYZArray; + crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined; + crossProductXYAndZIndexIndex(origin: XYAndZ, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined; + distance(i: number, j: number): number | undefined; + static distanceBetweenPointsIn2Arrays(arrayA: GrowableXYZArray, i: number, arrayB: GrowableXYZArray, j: number): number | undefined; + distanceIndexToPoint(i: number, spacePoint: XYAndZ): number | undefined; + static distanceRangeBetweenCorrespondingPoints(arrayA: GrowableXYZArray, arrayB: GrowableXYZArray): Range1d; + ensureCapacity(pointCapacity: number): void; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + float64Data(): Float64Array; + // (undocumented) + readonly float64Length: number; + // (undocumented) + front(result?: Point3d): Point3d | undefined; + getPoint2dAtCheckedPointIndex(pointIndex: number, result?: Point2d): Point2d | undefined; + getPoint2dAtUncheckedPointIndex(pointIndex: number, result?: Point2d): Point2d; + // (undocumented) + getPoint3dArray(): Point3d[]; + getPoint3dAtCheckedPointIndex(pointIndex: number, result?: Point3d): Point3d | undefined; + getPoint3dAtUncheckedPointIndex(pointIndex: number, result?: Point3d): Point3d; + getVector3dAtCheckedVectorIndex(vectorIndex: number, result?: Vector3d): Vector3d | undefined; + interpolate(i: number, fraction: number, j: number, result?: Point3d): Point3d | undefined; + // (undocumented) + static isAlmostEqual(dataA: GrowableXYZArray | undefined, dataB: GrowableXYZArray | undefined): boolean; + // (undocumented) + isCloseToPlane(plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean; + isIndexValid(index: number): boolean; + // (undocumented) + readonly length: number; + multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(matrix: Matrix3d): void; + multiplyMatrix3dInPlace(matrix: Matrix3d): void; + multiplyTransformInPlace(transform: Transform): void; + pop(): void; + push(toPush: XYAndZ): void; + pushAll(points: Point3d[]): void; + pushFromGrowableXYZArray(source: GrowableXYZArray, sourceIndex: number): boolean; + pushWrap(numWrap: number): void; + // (undocumented) + pushXYZ(x: number, y: number, z: number): void; + resize(pointCount: number): void; + scaleInPlace(factor: number): void; + setAtCheckedPointIndex(pointIndex: number, value: XYAndZ): boolean; + setXYZAtCheckedPointIndex(pointIndex: number, x: number, y: number, z: number): boolean; + sortIndicesLexical(): Uint32Array; + // (undocumented) + sumLengths(): number; + transferFromGrowableXYZArray(destIndex: number, source: GrowableXYZArray, sourceIndex: number): boolean; + tryTransformInverseInPlace(transform: Transform): boolean; + vectorIndexIndex(i: number, j: number, result?: Vector3d): Vector3d | undefined; + vectorXYAndZIndex(origin: XYAndZ, j: number, result?: Vector3d): Vector3d | undefined; +} + +// @public +class HalfEdge { + constructor(x?: number, y?: number, z?: number, i?: number); + clearMask(mask: HalfEdgeMask): void; + clearMaskAroundFace(mask: HalfEdgeMask): void; + clearMaskAroundVertex(mask: HalfEdgeMask): void; + collectAroundFace(f?: NodeFunction): any[]; + collectAroundVertex(f?: NodeFunction): any[]; + // (undocumented) + countEdgesAroundFace(): number; + // (undocumented) + countEdgesAroundVertex(): number; + // (undocumented) + countMaskAroundFace(mask: HalfEdgeMask, value?: boolean): number; + // (undocumented) + countMaskAroundVertex(mask: HalfEdgeMask, value?: boolean): number; + // (undocumented) + static createEdgeXYXY(id0: any, x0: number, y0: number, id1: any, x1: number, y1: number): HalfEdge; + static createHalfEdgePair(heArray: HalfEdge[] | undefined): HalfEdge; + static createHalfEdgePairWithCoordinates(xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, xB: number | undefined, yB: number | undefined, zB: number | undefined, iB: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge; + decomission(): void; + distanceXY(other: HalfEdge): number; + readonly edgeMate: HalfEdge; + readonly facePredecessor: HalfEdge; + readonly faceSuccessor: HalfEdge; + static filterIsMaskOff(node: HalfEdge, mask: HalfEdgeMask): boolean; + static filterIsMaskOn(node: HalfEdge, mask: HalfEdgeMask): boolean; + fractionToPoint2d(fraction: number, result?: Point2d): Point2d; + getMask(mask: HalfEdgeMask): number; + static horizontalScanFraction(node0: HalfEdge, y: number): number | undefined | HalfEdge; + // (undocumented) + i: number; + // (undocumented) + readonly id: any; + isEqualXY(other: HalfEdge): boolean; + isMaskSet(mask: HalfEdgeMask): boolean; + // (undocumented) + maskBits: number; + // (undocumented) + static nodeToId(node: HalfEdge): any; + // (undocumented) + static nodeToIdMaskXY: { + id: any; + mask: any; + xy: number[]; + } + // (undocumented) + static nodeToIdString(node: HalfEdge): any; + // (undocumented) + static nodeToIdXYString(node: HalfEdge): string; + // (undocumented) + static nodeToMaskString(node: HalfEdge): string; + // (undocumented) + static nodeToSelf(node: HalfEdge): any; + // (undocumented) + static nodeToXY(node: HalfEdge): number[]; + static pinch(nodeA: HalfEdge, nodeB: HalfEdge): void; + setMask(mask: HalfEdgeMask): void; + // (undocumented) + setMaskAroundFace(mask: HalfEdgeMask): void; + // (undocumented) + setMaskAroundVertex(mask: HalfEdgeMask): void; + signedFaceArea(): number; + // (undocumented) + sortAngle?: number; + static splitEdge(base: undefined | HalfEdge, xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge; + // (undocumented) + steiner: boolean; + sumAroundFace(f: NodeToNumberFunction): number; + sumAroundVertex(f: NodeToNumberFunction): number; + // (undocumented) + testAndSetMask(mask: HalfEdgeMask): number; + // (undocumented) + static testNodeMaskNotExterior(node: HalfEdge): boolean; + static transverseIntersectionFractions(nodeA0: HalfEdge, nodeB0: HalfEdge, result?: Vector2d): Vector2d | undefined; + // (undocumented) + vectorToFaceSuccessor(result?: Vector3d): Vector3d; + // (undocumented) + vectorToFaceSuccessorXY(result?: Vector2d): Vector2d; + // (undocumented) + readonly vertexPredecessor: HalfEdge; + // (undocumented) + readonly vertexSuccessor: HalfEdge; + // (undocumented) + x: number; + // (undocumented) + y: number; + // (undocumented) + z: number; + // (undocumented) + zOrder: number; +} + +// @public +class HalfEdgeGraph { + constructor(); + addEdgeXY(x0: number, y0: number, x1: number, y1: number): HalfEdge; + // (undocumented) + allHalfEdges: HalfEdge[]; + announceFaceLoops(announceFace: GraphNodeFunction): void; + announceVertexLoops(announceVertex: GraphNodeFunction): void; + clearMask(mask: HalfEdgeMask): void; + // (undocumented) + collectFaceLoops(): HalfEdge[]; + collectSegments(): LineSegment3d[]; + // (undocumented) + collectVertexLoops(): HalfEdge[]; + // (undocumented) + countFaceLoops(): number; + // (undocumented) + countFaceLoopsWithMaskFilter(filter: HalfEdgeAndMaskToBooleanFunction, mask: HalfEdgeMask): number; + // (undocumented) + countMask(mask: HalfEdgeMask): number; + // (undocumented) + countNodes(): number; + countVertexLoops(): number; + createEdgeXYZXYZ(xA?: number, yA?: number, zA?: number, iA?: number, xB?: number, yB?: number, zB?: number, iB?: number): HalfEdge; + decommission(): void; + reverseMask(mask: HalfEdgeMask): void; + setMask(mask: HalfEdgeMask): void; + splitEdge(base: undefined | HalfEdge, xA?: number, yA?: number, zA?: number, iA?: number): HalfEdge; +} + +// @public (undocumented) +enum HalfEdgeMask { + // (undocumented) + ALL_MASK = 4294967295, + // (undocumented) + BOUNDARY = 2, + // (undocumented) + BOUNDARY_VERTEX_MASK = 64, + // (undocumented) + CONSTU_MASK = 4, + // (undocumented) + CONSTV_MASK = 8, + // (undocumented) + DIRECTED_EDGE_MASK = 256, + // (undocumented) + EXTERIOR = 1, + // (undocumented) + HULL_MASK = 1024, + // (undocumented) + NULL_MASK = 0, + // (undocumented) + POLAR_LOOP_MASK = 4096, + // (undocumented) + PRIMARY_EDGE = 512, + // (undocumented) + PRIMARY_VERTEX_MASK = 128, + // (undocumented) + SECTION_EDGE_MASK = 2048, + // (undocumented) + TRIANGULATED_NODE_MASK = 16384, + // (undocumented) + USEAM_MASK = 16, + // (undocumented) + VISITED = 8192, + // (undocumented) + VSEAM_MASK = 32 +} + +// @public (undocumented) +module IModelJson { + interface ArcByVectorProps { + // (undocumented) + center: XYZProps; + // (undocumented) + sweepStartEnd: AngleSweepProps; + // (undocumented) + vectorX: XYZProps; + // (undocumented) + vectorY: XYZProps; + } + + interface AxesProps { + xyVectors?: [XYZProps, XYZProps]; + yawPitchRollAngles?: YawPitchRollProps; + zxVectors?: [XYZProps, XYZProps]; + } + + interface BcurveProps { + // (undocumented) + knot: [number]; + order: number; + point: [XYZProps]; + } + + interface BoxProps extends AxesProps { + baseX: number; + baseY: number; + capped?: boolean; + height?: number; + origin: XYZProps; + topOrigin?: XYZProps; + topX?: number; + topY?: number; + } + + interface BSplineSurfaceProps { + // (undocumented) + orderU: number; + // (undocumented) + orderV: number; + // (undocumented) + points: [[[number]]]; + // (undocumented) + uKnots: [number]; + // (undocumented) + vKnots: [number]; + } + + interface ConeProps extends AxesProps { + capped?: boolean; + // (undocumented) + end: XYZProps; + endRadius?: number; + // (undocumented) + start: XYZProps; + startRadius: number; + vectorX?: XYZProps; + // (undocumented) + vectorY?: XYZProps; + } + + interface CurveCollectionProps extends PlanarRegionProps { + bagofCurves?: [CurveCollectionProps]; + path?: [CurvePrimitiveProps]; + } + + // (undocumented) + interface CurvePrimitiveProps { + // (undocumented) + arc?: ArcByVectorProps | [XYZProps, XYZProps, XYZProps]; + // (undocumented) + bcurve?: BcurveProps; + // (undocumented) + lineSegment?: [XYZProps, XYZProps]; + // (undocumented) + lineString?: XYZProps[]; + // (undocumented) + transitionSpiral?: TransitionSpiralProps; + } + + interface CylinderProps { + capped?: boolean; + end: XYZProps; + // (undocumented) + radius: number; + start: XYZProps; + } + + // (undocumented) + interface GeometryProps extends CurvePrimitiveProps, SolidPrimitiveProps, CurveCollectionProps { + // (undocumented) + bsurf?: BSplineSurfaceProps; + // (undocumented) + indexedMesh?: IndexedMeshProps; + // (undocumented) + point?: XYZProps; + } + + interface IndexedMeshProps { + color?: [number]; + colorIndex?: [number]; + normal?: [XYZProps]; + normalIndex?: [number]; + param?: [XYProps]; + paramIndex?: [number]; + point: [XYZProps]; + pointIndex: [number]; + } + + interface LinearSweepProps { + capped?: boolean; + contour: CurveCollectionProps; + vector: XYZProps; + } + + interface PlanarRegionProps { + loop?: [CurvePrimitiveProps]; + parityRegion?: [{ + loop: [CurvePrimitiveProps]; + }]; + // (undocumented) + unionRegion?: [PlanarRegionProps]; + } + + // (undocumented) + interface PointProps { + // (undocumented) + point?: XYZProps; + } + + class Reader { + constructor(); + // (undocumented) + static parse(json?: any): any; + // (undocumented) + static parseArray(data?: any): any[] | undefined; + // (undocumented) + static parseBcurve(data?: any): BSplineCurve3d | BSplineCurve3dH | undefined; + // (undocumented) + static parseBox(json?: any): any; + // (undocumented) + static parseBsurf(data?: any): BSplineSurface3d | BSplineSurface3dH | undefined; + // WARNING: The type "ConeProps" needs to be exported by the package (e.g. added to index.ts) + static parseConeProps(json?: ConeProps): any; + // (undocumented) + static parseCoordinate(data?: any): CoordinateXYZ | undefined; + // (undocumented) + static parseCurveCollectionMembers(result: CurveCollection, data?: any): CurveCollection | undefined; + // WARNING: The type "CylinderProps" needs to be exported by the package (e.g. added to index.ts) + static parseCylinderProps(json?: CylinderProps): any; + // (undocumented) + static parseIndexedMesh(data?: any): any | undefined; + // (undocumented) + static parseLinearSweep(json?: any): any; + // (undocumented) + static parsePointArray(json?: any): Point3d[]; + // (undocumented) + static parsePolyfaceAuxData(data?: any): PolyfaceAuxData | undefined; + // (undocumented) + static parseRotationalSweep(json?: any): any; + // (undocumented) + static parseRuledSweep(json?: any): any; + // WARNING: The type "SphereProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static parseSphere(json?: SphereProps): any; + // (undocumented) + static parseTorusPipe(json?: any): any; + // (undocumented) + static parseTransitionSpiral(data?: any): TransitionSpiral3d | undefined; + } + + interface RotationalSweepProps { + axis: XYZProps; + capped?: boolean; + center: XYZProps; + contour: CurveCollectionProps; + sweepAngle: AngleProps; + } + + interface RuledSweepProps { + capped?: boolean; + // (undocumented) + countour: [CurveCollectionProps]; + } + + interface SolidPrimitiveProps { + // (undocumented) + box?: BoxProps; + // (undocumented) + cone?: ConeProps; + // (undocumented) + cylinder?: CylinderProps; + // (undocumented) + linearSweep?: LinearSweepProps; + // (undocumented) + rotationalSweep?: RotationalSweepProps; + // (undocumented) + ruledSweep?: RuledSweepProps; + // (undocumented) + sphere?: SphereProps; + // (undocumented) + torusPipe?: TorusPipeProps; + } + + interface SphereProps extends AxesProps { + capped?: boolean; + center: XYZProps; + latitudeStartEnd?: AngleSweepProps; + radius?: number; + radiusX?: number; + radiusY?: number; + radiusZ?: number; + } + + interface TorusPipeProps extends AxesProps { + capped?: boolean; + center: XYZProps; + majorRadius: number; + minorRadius?: number; + sweepAngle?: AngleProps; + } + + interface TransitionSpiralProps extends AxesProps { + // (undocumented) + curveLength?: number; + // (undocumented) + endBearing?: AngleProps; + // (undocumented) + endRadius?: number; + // (undocumented) + fractionInterval?: number[]; + intervalFractions?: [number, number]; + origin: XYZProps; + startBearing?: AngleProps; + // (undocumented) + startRadius?: number; + type?: string; + } + + // (undocumented) + class Writer extends GeometryHandler { + // (undocumented) + emit(data: any): any; + // (undocumented) + emitArray(data: object[]): any; + // (undocumented) + handleArc3d(data: Arc3d): any; + // (undocumented) + handleBagOfCurves(data: BagOfCurves): any; + // (undocumented) + handleBezierCurve3d(curve: BezierCurve3d): any; + // (undocumented) + handleBezierCurve3dH(curve: BezierCurve3dH): any; + // (undocumented) + handleBox(box: Box): any; + // (undocumented) + handleBSplineCurve3d(curve: BSplineCurve3d): any; + // (undocumented) + handleBSplineCurve3dH(curve: BSplineCurve3dH): any; + // (undocumented) + handleBSplineSurface3d(surface: BSplineSurface3d): any; + // (undocumented) + handleBSplineSurface3dH(surface: BSplineSurface3dH): any; + // (undocumented) + handleCone(data: Cone): any; + // (undocumented) + handleCoordinateXYZ(data: CoordinateXYZ): any; + // (undocumented) + handleIndexedPolyface(pf: IndexedPolyface): any; + // (undocumented) + handleLinearSweep(data: LinearSweep): any; + // (undocumented) + handleLineSegment3d(data: LineSegment3d): any; + // (undocumented) + handleLineString3d(data: LineString3d): any; + // (undocumented) + handleLoop(data: Loop): any; + // (undocumented) + handleParityRegion(data: ParityRegion): any; + // (undocumented) + handlePath(data: Path): any; + // (undocumented) + handlePointString3d(data: PointString3d): any; + // (undocumented) + handleRotationalSweep(data: RotationalSweep): any; + // (undocumented) + handleRuledSweep(data: RuledSweep): any; + // (undocumented) + handleSphere(data: Sphere): any; + // (undocumented) + handleTorusPipe(data: TorusPipe): any; + // (undocumented) + handleTransitionSpiral(data: TransitionSpiral3d): any; + // (undocumented) + handleUnionRegion(data: UnionRegion): any; + static toIModelJson(data: any): any; + } + +} + +// @public (undocumented) +class IndexedPolyface extends Polyface { + protected constructor(data: PolyfaceData, facetStart?: number[], facetToFaceData?: number[]); + // (undocumented) + protected _facetStart: number[]; + // (undocumented) + protected _facetToFaceData: number[]; + // (undocumented) + addColor(color: number): number; + // (undocumented) + addColorIndex(index: number): void; + addIndexedPolyface(source: IndexedPolyface, reversed: boolean, transform: Transform | undefined): void; + // (undocumented) + addNormal(normal: Vector3d, priorIndexA?: number, priorIndexB?: number): number; + // (undocumented) + addNormalIndex(index: number): void; + // (undocumented) + addNormalXYZ(x: number, y: number, z: number): number; + // (undocumented) + addParam(param: Point2d): number; + // (undocumented) + addParamIndex(index: number): void; + // (undocumented) + addParamUV(u: number, v: number, priorIndexA?: number, priorIndexB?: number): number; + // (undocumented) + addParamXY(x: number, y: number): number; + addPoint(point: Point3d, priorIndex?: number): number; + // (undocumented) + addPointIndex(index: number, visible?: boolean): void; + addPointXYZ(x: number, y: number, z: number): number; + cleanupOpenFacet(): void; + // (undocumented) + clone(): IndexedPolyface; + // (undocumented) + cloneTransformed(transform: Transform): IndexedPolyface; + readonly colorCount: number; + // (undocumented) + static create(needNormals?: boolean, needParams?: boolean, needColors?: boolean): IndexedPolyface; + createVisitor(numWrap?: number): PolyfaceVisitor; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + readonly faceCount: number; + readonly facetCount: number; + facetIndex0(index: number): number; + facetIndex1(index: number): number; + getFaceDataByFacetIndex(facetIndex: number): FacetFaceData; + isAlmostEqual(other: any): boolean; + // (undocumented) + readonly isEmpty: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + isValidFacetIndex(index: number): boolean; + readonly normalCount: number; + // (undocumented) + numEdgeInFacet(facetIndex: number): number; + readonly paramCount: number; + readonly pointCount: number; + // (undocumented) + range(transform?: Transform, result?: Range3d): Range3d; + // (undocumented) + reverseIndices(): void; + // (undocumented) + reverseNormals(): void; + setNewFaceData(endFacetIndex?: number): boolean; + terminateFacet(validateAllIndices?: boolean): any; + tryGetFaceData(i: number): FacetFaceData | undefined; + tryTransformInPlace(transform: Transform): boolean; + // (undocumented) + readonly zeroTerminatedIndexCount: number; +} + +// @public (undocumented) +class IndexedPolyfaceVisitor extends PolyfaceData, implements PolyfaceVisitor { + // (undocumented) + clientAuxIndex(i: number): number; + // (undocumented) + clientColorIndex(i: number): number; + // (undocumented) + clientNormalIndex(i: number): number; + // (undocumented) + clientParamIndex(i: number): number; + // (undocumented) + clientPointIndex(i: number): number; + // (undocumented) + static create(polyface: IndexedPolyface, numWrap: number): IndexedPolyfaceVisitor; + // (undocumented) + currentReadIndex(): number; + // (undocumented) + moveToNextFacet(): boolean; + // (undocumented) + moveToReadIndex(facetIndex: number): boolean; + // (undocumented) + readonly numEdgesThisFacet: number; + // (undocumented) + reset(): void; + tryGetDistanceParameter(index: number, result?: Point2d): Point2d | undefined; + tryGetNormalizedParameter(index: number, result?: Point2d): Point2d | undefined; +} + +// @public +class IndexedXYCollection { + // (undocumented) + abstract crossProductIndexIndexIndex(origin: number, indexA: number, indexB: number): number | undefined; + // (undocumented) + abstract crossProductXAndYIndexIndex(origin: XAndY, indexA: number, indexB: number): number | undefined; + // (undocumented) + abstract getPoint2dAtCheckedPointIndex(index: number, result?: Point2d): Point2d | undefined; + // (undocumented) + abstract getVector2dAtCheckedVectorIndex(index: number, result?: Vector2d): Vector2d | undefined; + readonly length: number; + // (undocumented) + abstract vectorIndexIndex(indexA: number, indexB: number, result?: Vector2d): Vector2d | undefined; + // (undocumented) + abstract vectorXAndYIndex(origin: XAndY, indexB: number, result?: Vector2d): Vector2d | undefined; +} + +// @public +class IndexedXYZCollection { + // (undocumented) + abstract accumulateCrossProductIndexIndexIndex(origin: number, indexA: number, indexB: number, result: Vector3d): void; + // (undocumented) + abstract crossProductIndexIndexIndex(origin: number, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + abstract crossProductXYAndZIndexIndex(origin: XYAndZ, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + abstract getPoint3dAtCheckedPointIndex(index: number, result?: Point3d): Point3d | undefined; + // (undocumented) + abstract getVector3dAtCheckedVectorIndex(index: number, result?: Vector3d): Vector3d | undefined; + readonly length: number; + // (undocumented) + abstract vectorIndexIndex(indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + abstract vectorXYAndZIndex(origin: XYAndZ, indexB: number, result?: Vector3d): Vector3d | undefined; +} + +// @public +enum InverseMatrixState { + // (undocumented) + inverseStored = 1, + // (undocumented) + singular = 2, + // (undocumented) + unknown = 0 +} + +// @public (undocumented) +interface IsNullCheck { + // (undocumented) + isNull(): boolean; +} + +// @public +interface IStrokeHandler { + announceBezierCurve?(bezier: BezierCurveBase, numStrokes: number, parent: CurvePrimitive, spandex: number, fraction0: number, fraction1: number): void; + announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void; + // (undocumented) + announcePointTangent(xyz: Point3d, fraction: number, tangent: Vector3d): void; + announceSegmentInterval(cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, fraction0: number, fraction1: number): void; + // (undocumented) + endCurvePrimitive(cp: CurvePrimitive): void; + // (undocumented) + endParentCurvePrimitive(cp: CurvePrimitive): void; + // (undocumented) + startCurvePrimitive(cp: CurvePrimitive): void; + startParentCurvePrimitive(cp: CurvePrimitive): void; +} + +// WARNING: knotTolerance has incomplete type information +// @public +class KnotVector { + // (undocumented) + baseKnotFractionToKnot(knotIndex0: number, localFraction: number): number; + clone(): KnotVector; + copyKnots(includeExtraEndKnot: boolean): number[]; + static create(knotArray: number[] | Float64Array, degree: number, skipFirstAndLast?: boolean): KnotVector; + createBasisArray(): Float64Array; + static createUniformClamped(numPoles: number, degree: number, a0: number, a1: number): KnotVector; + static createUniformWrapped(numInterval: number, degree: number, a0: number, a1: number): KnotVector; + // (undocumented) + degree: number; + evaluateBasisFunctions(knotIndex0: number, u: number, f: Float64Array): void; + evaluateBasisFunctions1(knotIndex0: number, u: number, f: Float64Array, df: Float64Array, ddf?: Float64Array): void; + // (undocumented) + fractionToKnot(fraction: number): number; + grevilleKnot(spanIndex: number): number; + // (undocumented) + isAlmostEqual(other: KnotVector): boolean; + isIndexOfRealSpan(spanIndex: number): boolean; + // (undocumented) + readonly knotLength01: number; + // (undocumented) + knots: Float64Array; + // (undocumented) + knotToLeftKnotIndex(u: number): number; + // (undocumented) + readonly leftKnot: number; + // (undocumented) + readonly leftKnotIndex: number; + // (undocumented) + readonly numSpans: number; + // (undocumented) + reflectKnots(): void; + // (undocumented) + readonly rightKnot: number; + // (undocumented) + readonly rightKnotIndex: number; + // (undocumented) + setKnots(knots: number[] | Float64Array, skipFirstAndLast?: boolean): void; + // (undocumented) + spanFractionToFraction(spanIndex: number, localFraction: number): number; + // (undocumented) + spanFractionToKnot(spanIndex: number, localFraction: number): number; + spanIndexToLeftKnotIndex(spanIndex: number): number; + // (undocumented) + spanIndexToSpanLength(spanIndex: number): number; + // (undocumented) + testClosable(mode?: BSplineWrapMode): boolean; + wrappable: BSplineWrapMode; +} + +// @public +class LinearSweep extends SolidPrimitive { + // (undocumented) + clone(): LinearSweep; + // (undocumented) + cloneSweepVector(): Vector3d; + // (undocumented) + cloneTransformed(transform: Transform): LinearSweep; + // (undocumented) + constantVSection(vFraction: number): CurveCollection | undefined; + // (undocumented) + static create(contour: CurveCollection, direction: Vector3d, capped: boolean): LinearSweep | undefined; + static createZSweep(xyPoints: XAndY[], z: number, zSweep: number, capped: boolean): LinearSweep | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + getCurvesRef(): CurveCollection; + // (undocumented) + getSweepContourRef(): SweepContour; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class LineSegment3d extends CurvePrimitive, implements BeJSONFunctions { + announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + // (undocumented) + appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; + clone(): LineSegment3d; + clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined; + cloneTransformed(transform: Transform): CurvePrimitive; + // (undocumented) + closestPoint(spacePoint: Point3d, extend: boolean, result?: CurveLocationDetail): CurveLocationDetail; + computeStrokeCountForOptions(options?: StrokeOptions): number; + static create(point0: Point3d, point1: Point3d, result?: LineSegment3d): LineSegment3d; + static createXYXY(x0: number, y0: number, x1: number, y1: number, z?: number, result?: LineSegment3d): LineSegment3d; + static createXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, result?: LineSegment3d): LineSegment3d; + // (undocumented) + curveLength(): number; + // (undocumented) + curveLengthBetweenFractions(fraction0: number, fraction1: number): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(result?: Point3d): Point3d; + extendRange(range: Range3d, transform?: Transform): void; + // (undocumented) + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + // (undocumented) + static fromJSON(json?: any): LineSegment3d; + getFractionToDistanceScale(): number | undefined; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isExtensibleFractionSpace: boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + // (undocumented) + readonly point0Ref: Point3d; + // (undocumented) + readonly point1Ref: Point3d; + // (undocumented) + quickLength(): number; + reverseInPlace(): void; + set(point0: Point3d, point1: Point3d): void; + setFrom(other: LineSegment3d): void; + setFromJSON(json?: any): void; + setRefs(point0: Point3d, point1: Point3d): void; + // (undocumented) + startPoint(result?: Point3d): Point3d; + toJSON(): any; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class LineString3d extends CurvePrimitive, implements BeJSONFunctions { + addClosurePoint(): void; + addDerivative(vector: Vector3d): void; + addFraction(fraction: number): void; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + addMappedStrokesToLineString3D(map: StrokeCountMap, destLinestring: LineString3d): number; + addPoint(point: Point3d): void; + // (undocumented) + addPoints(...points: any[]): void; + addPointXYZ(x: number, y: number, z?: number): void; + // (undocumented) + addSteppedPoints(source: GrowableXYZArray, pointIndex0: number, step: number, numAdd: number): void; + addSurfaceNormal(vector: Vector3d): void; + addUVParam(uvParam: XAndY): void; + addUVParamAsUV(u: number, v: number): void; + announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + appendFractionalStrokePoints(curve: CurvePrimitive, numStrokes: number, fraction0?: number, fraction1?: number, include01?: boolean): void; + appendFractionToPoint(curve: CurvePrimitive, fraction: number): void; + // (undocumented) + appendInterpolatedStrokePoints(numStrokes: number, point0: Point3d, point1: Point3d, include01: boolean): void; + appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number; + appendStrokePoint(point: Point3d, fraction?: number): void; + clear(): void; + // (undocumented) + clone(): LineString3d; + clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined; + // (undocumented) + cloneTransformed(transform: Transform): CurvePrimitive; + // (undocumented) + closestPoint(spacePoint: Point3d, extend: boolean, result?: CurveLocationDetail): CurveLocationDetail; + // WARNING: The type "StrokeCountMap" needs to be exported by the package (e.g. added to index.ts) + computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void; + computeStrokeCountForOptions(options?: StrokeOptions): number; + computeUVFromXYZTransform(transform: Transform): void; + // (undocumented) + static create(...points: any[]): LineString3d; + static createFloat64Array(xyzData: Float64Array): LineString3d; + static createForStrokes(capacity: number | undefined, options: StrokeOptions | undefined): LineString3d; + // (undocumented) + static createPoints(points: Point3d[]): LineString3d; + // (undocumented) + static createRectangleXY(point0: Point3d, ax: number, ay: number, closed?: boolean): LineString3d; + static createRegularPolygonXY(center: Point3d, edgeCount: number, radius: number, radiusToVertices?: boolean): LineString3d; + // (undocumented) + static createXY(points: XAndY[], z: number, enforceClosure?: boolean): LineString3d; + // (undocumented) + curveLength(): number; + // (undocumented) + curveLengthBetweenFractions(fraction0: number, fraction1: number): number; + derivativeAt(i: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + emitStrokableParts(handler: IStrokeHandler, options?: StrokeOptions): void; + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(): Point3d; + ensureEmptyNormalIndices(): GrowableFloat64Array; + ensureEmptyPointIndices(): GrowableFloat64Array; + ensureEmptySurfaceNormals(): GrowableXYZArray; + ensureEmptyUVIndices(): GrowableFloat64Array; + ensureEmptyUVParams(): GrowableXYArray; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + readonly fractions: GrowableFloat64Array | undefined; + fractionToFrenetFrame(fraction: number, result?: Transform): Transform; + // (undocumented) + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + // (undocumented) + static fromJSON(json?: any): LineString3d; + getIndexedSegment(index: number): LineSegment3d | undefined; + initializeDerivativeArray(retainArrayContentsIfAlreadyPresent?: boolean): void; + initializeFractionArray(retainArrayContentsIfAlreadyPresent?: boolean): void; + initializeUVParamsArray(retainArrayContentsIfAlreadyPresent?: boolean): void; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isExtensibleFractionSpace: boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + readonly isPhysicallyClosed: boolean; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: false, result?: CurveLocationDetail): CurveLocationDetail; + // (undocumented) + readonly normalIndices: GrowableFloat64Array | undefined; + // (undocumented) + numPoints(): number; + // (undocumented) + readonly packedDerivatives: GrowableXYZArray | undefined; + readonly packedPoints: GrowableXYZArray; + // (undocumented) + readonly packedSurfaceNormals: GrowableXYZArray | undefined; + // (undocumented) + readonly packedUVParams: GrowableXYArray | undefined; + // (undocumented) + readonly paramIndices: GrowableFloat64Array | undefined; + pointAt(i: number, result?: Point3d): Point3d | undefined; + // (undocumented) + readonly pointIndices: GrowableFloat64Array | undefined; + readonly points: Point3d[]; + popPoint(): void; + // (undocumented) + quickLength(): number; + quickUnitNormal(result?: Vector3d): Vector3d | undefined; + // (undocumented) + reverseInPlace(): void; + segmentIndexAndLocalFractionToGlobalFraction(index: number, localFraction: number): number; + // (undocumented) + setFrom(other: LineString3d): void; + // (undocumented) + setFromJSON(json?: any): void; + // (undocumented) + startPoint(): Point3d; + surfaceNormalAt(i: number, result?: Vector3d): Vector3d | undefined; + toJSON(): any; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; + vectorBetween(i: number, j: number, result?: Vector3d): Vector3d | undefined; +} + +// @public +class Loop extends CurveChain { + constructor(); + // (undocumented) + announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; + // (undocumented) + cloneEmptyPeer(): Loop; + // (undocumented) + cloneStroked(options?: StrokeOptions): AnyCurve; + static create(...curves: CurvePrimitive[]): Loop; + static createArray(curves: CurvePrimitive[]): Loop; + // (undocumented) + static createPolygon(points: Point3d[]): Loop; + // (undocumented) + cyclicCurvePrimitive(index: number): CurvePrimitive | undefined; + // (undocumented) + dgnBoundaryType(): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + isInner: boolean; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; +} + +// @public +class Map4d implements BeJSONFunctions { + // (undocumented) + clone(): Map4d; + static createBoxMap(lowA: Point3d, highA: Point3d, lowB: Point3d, highB: Point3d, result?: Map4d): Map4d | undefined; + static createIdentity(): Map4d; + static createRefs(matrix0: Matrix4d, matrix1: Matrix4d): Map4d; + static createTransform(transform0: Transform, transform1?: Transform): Map4d | undefined; + static createVectorFrustum(origin: Point3d, uVector: Vector3d, vVector: Vector3d, wVector: Vector3d, fraction: number): Map4d | undefined; + static fromJSON(json?: any): Map4d; + // (undocumented) + isAlmostEqual(other: Map4d): boolean; + // (undocumented) + multiplyMapMap(other: Map4d): Map4d; + // (undocumented) + reverseInPlace(): void; + sandwich0This1(other: Map4d): Map4d; + sandwich1This0(other: Map4d): Map4d; + setFrom(other: Map4d): void; + setFromJSON(json: any): void; + setIdentity(): void; + // (undocumented) + toJSON(): any; + // (undocumented) + readonly transform0: Matrix4d; + // (undocumented) + readonly transform1: Matrix4d; +} + +// @public +class Matrix3d implements BeJSONFunctions { + constructor(coffs?: Float64Array); + addScaledInPlace(other: Matrix3d, scale: number): void; + applyGivensColumnOp(i: number, j: number, c: number, s: number): void; + at(row: number, column: number): number; + axisOrderCrossProductsInPlace(axisOrder: AxisOrder): void; + // (undocumented) + clone(result?: Matrix3d): Matrix3d; + // (undocumented) + coffs: Float64Array; + // (undocumented) + columnX(result?: Vector3d): Vector3d; + // (undocumented) + columnXDotColumnY(): number; + // (undocumented) + columnXMagnitude(): number; + // (undocumented) + columnXMagnitudeSquared(): number; + // (undocumented) + columnXYCrossProductMagnitude(): number; + // (undocumented) + columnY(result?: Vector3d): Vector3d; + // (undocumented) + columnYMagnitude(): number; + // (undocumented) + columnYMagnitudeSquared(): number; + // (undocumented) + columnZ(result?: Vector3d): Vector3d; + // (undocumented) + columnZCrossVector(vector: XYZ, result?: Vector3d): Vector3d; + // (undocumented) + columnZMagnitude(): number; + // (undocumented) + columnZMagnitudeSquared(): number; + computeCachedInverse(useCacheIfAvailable: boolean): boolean; + conditionNumber(): number; + static create90DegreeRotationAroundAxis(axisIndex: number): Matrix3d; + static createCapture(coffs: Float64Array, inverseCoffs?: Float64Array): Matrix3d; + static createColumns(vectorU: Vector3d, vectorV: Vector3d, vectorW: Vector3d, result?: Matrix3d): Matrix3d; + // (undocumented) + static createColumnsInAxisOrder(axisOrder: AxisOrder, columnA: Vector3d, columnB: Vector3d, columnC: Vector3d | undefined, result?: Matrix3d): Matrix3d; + static createColumnsXYW(vectorU: XAndY, uz: number, vectorV: XAndY, vz: number, vectorW: XAndY, wz: number, result?: Matrix3d): Matrix3d; + static createDirectionalScale(direction: Vector3d, scale: number, result?: Matrix3d): Matrix3d; + // (undocumented) + static createFromQuaternion(quat: Point4d): Matrix3d; + // (undocumented) + static createIdentity(result?: Matrix3d): Matrix3d; + static createPartialRotationVectorToVector(vectorA: Vector3d, fraction: number, vectorB: Vector3d, result?: Matrix3d): Matrix3d | undefined; + static createPerpendicularVectorFavorPlaneContainingZ(vector: Vector3d, result?: Vector3d): Vector3d; + static createPerpendicularVectorFavorXYPlane(vector: Vector3d, result?: Vector3d): Vector3d; + static createRigidFromColumns(vectorA: Vector3d, vectorB: Vector3d, axisOrder: AxisOrder, result?: Matrix3d): Matrix3d | undefined; + static createRigidFromMatrix3d(source: Matrix3d, axisOrder?: AxisOrder, result?: Matrix3d): Matrix3d | undefined; + static createRigidHeadsUp(vectorA: Vector3d, axisOrder?: AxisOrder, result?: Matrix3d): Matrix3d; + static createRigidViewAxesZTowardsEye(x: number, y: number, z: number, result?: Matrix3d): Matrix3d; + // (undocumented) + static createRotationAroundAxisIndex(axisIndex: AxisIndex, angle: Angle, result?: Matrix3d): Matrix3d; + // (undocumented) + static createRotationAroundVector(axis: Vector3d, angle: Angle, result?: Matrix3d): Matrix3d | undefined; + // (undocumented) + static createRotationVectorToVector(vectorA: Vector3d, vectorB: Vector3d, result?: Matrix3d): Matrix3d | undefined; + static createRows(vectorU: Vector3d, vectorV: Vector3d, vectorW: Vector3d, result?: Matrix3d): Matrix3d; + // (undocumented) + static createRowValues(axx: number, axy: number, axz: number, ayx: number, ayy: number, ayz: number, azx: number, azy: number, azz: number, result?: Matrix3d): Matrix3d; + static createScale(scaleFactorX: number, scaleFactorY: number, scaleFactorZ: number, result?: Matrix3d): Matrix3d; + static createShuffledColumns(vectorU: Vector3d, vectorV: Vector3d, vectorW: Vector3d, axisOrder: AxisOrder, result?: Matrix3d): Matrix3d; + static createStandardWorldToView(index: StandardViewIndex, invert?: boolean, result?: Matrix3d): Matrix3d; + static createUniformScale(scaleFactor: number): Matrix3d; + static createViewedAxes(rightVector: Vector3d, upVector: Vector3d, leftNoneRight?: number, topNoneBottom?: number): Matrix3d | undefined; + // (undocumented) + static createZero(): Matrix3d; + determinant(): number; + // (undocumented) + dotColumnX(vector: XYZ): number; + // (undocumented) + dotColumnY(vector: XYZ): number; + // (undocumented) + dotColumnZ(vector: XYZ): number; + // (undocumented) + dotRowX(vector: XYZ): number; + // (undocumented) + dotRowXXYZ(x: number, y: number, z: number): number; + // (undocumented) + dotRowY(vector: XYZ): number; + // (undocumented) + dotRowYXYZ(x: number, y: number, z: number): number; + // (undocumented) + dotRowZ(vector: XYZ): number; + // (undocumented) + dotRowZXYZ(x: number, y: number, z: number): number; + factorPerpendicularColumns(matrixC: Matrix3d, matrixU: Matrix3d): boolean; + factorRigidWithSignedScale(): { + rigidAxes: Matrix3d; + scale: number; + } | undefined; + fastSymmetricEigenvalues(leftEigenvectors: Matrix3d, lambda: Vector3d): boolean; + // (undocumented) + static flatIndexOf(row: number, column: number): number; + freeze(): void; + // (undocumented) + static fromJSON(json?: Matrix3dProps): Matrix3d; + getAxisAndAngleOfRotation: { + angle: Angle; + axis: Vector3d; + ok: boolean; + } + getColumn(columnIndex: number, result?: Vector3d): Vector3d; + getRow(columnIndex: number, result?: Vector3d): Vector3d; + static readonly identity: Matrix3d; + indexedColumnWithWeight(index: number, weight: number, result?: Point4d): Point4d; + inverse(result?: Matrix3d): Matrix3d | undefined; + // (undocumented) + inverseCoffs: Float64Array | undefined; + // (undocumented) + inverseState: InverseMatrixState; + isAlmostEqual(other: Matrix3d, tol?: number): boolean; + readonly isDiagonal: boolean; + isExactEqual(other: Matrix3d): boolean; + readonly isIdentity: boolean; + isRigid(allowMirror?: boolean): boolean; + readonly isSignedPermutation: boolean; + // (undocumented) + isSingular(): boolean; + readonly isUpperTriangular: boolean; + readonly isXY: boolean; + maxAbs(): number; + maxDiff(other: Matrix3d): number; + multiplyInverse(vector: Vector3d, result?: Vector3d): Vector3d | undefined; + multiplyInverseTranspose(vector: Vector3d, result?: Vector3d): Vector3d | undefined; + multiplyInverseXYZAsPoint3d(x: number, y: number, z: number, result?: Point3d): Point3d | undefined; + multiplyInverseXYZAsVector3d(x: number, y: number, z: number, result?: Vector3d): Vector3d | undefined; + multiplyMatrixMatrix(other: Matrix3d, result?: Matrix3d): Matrix3d; + multiplyMatrixMatrixInverse(other: Matrix3d, result?: Matrix3d): Matrix3d | undefined; + multiplyMatrixMatrixTranspose(other: Matrix3d, result?: Matrix3d): Matrix3d; + multiplyMatrixTransform(other: Transform, result?: Transform): Transform; + multiplyMatrixTransposeMatrix(other: Matrix3d, result?: Matrix3d): Matrix3d; + // (undocumented) + multiplyTransposeVector(vector: Vector3d, result?: Vector3d): Vector3d; + multiplyTransposeVectorInPlace(xyzData: XYZ): void; + multiplyTransposeXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; + multiplyVector(vector: Vector3d, result?: Vector3d): Vector3d; + multiplyVectorArrayInPlace(data: XYZ[]): void; + multiplyVectorInPlace(xyzData: XYZ): void; + multiplyXY(x: number, y: number, result?: Vector3d): Vector3d; + multiplyXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; + multiplyXYZtoXYZ(xyz: XYZ, result: XYZ): XYZ; + normalizeColumnsInPlace(originalMagnitudes?: Vector3d): boolean; + normalizeRowsInPlace(originalMagnitudes?: Vector3d): boolean; + // (undocumented) + static numComputeCache: number; + // (undocumented) + static numUseCache: number; + // (undocumented) + originPlusMatrixTimesXY(origin: XYZ, x: number, y: number, result?: Point3d): Point3d; + rowX(result?: Vector3d): Vector3d; + // (undocumented) + rowXMagnitude(): number; + rowY(result?: Vector3d): Vector3d; + // (undocumented) + rowYMagnitude(): number; + rowZ(result?: Vector3d): Vector3d; + // (undocumented) + rowZMagnitude(): number; + sameDiagonalScale(): number | undefined; + scale(scale: number, result?: Matrix3d): Matrix3d; + scaleColumns(scaleX: number, scaleY: number, scaleZ: number, result?: Matrix3d): Matrix3d; + scaleColumnsInPlace(scaleX: number, scaleY: number, scaleZ: number): void; + scaleRows(scaleX: number, scaleY: number, scaleZ: number, result?: Matrix3d): Matrix3d; + setAt(row: number, column: number, value: number): void; + setColumn(columnIndex: number, value: Vector3d | undefined): void; + setColumns(vectorX: Vector3d | undefined, vectorY: Vector3d | undefined, vectorZ?: Vector3d | undefined): void; + setColumnsPoint4dXYZ(vectorU: Point4d, vectorV: Point4d, vectorW: Point4d): void; + // (undocumented) + setFrom(other: Matrix3d): void; + // (undocumented) + setFromJSON(json?: Matrix3dProps): void; + // (undocumented) + setIdentity(): void; + // (undocumented) + setRow(columnIndex: number, value: Vector3d): void; + setRowValues(axx: number, axy: number, axz: number, ayx: number, ayy: number, ayz: number, azx: number, azy: number, azz: number): void; + // (undocumented) + setZero(): void; + sumDiagonal(): number; + sumDiagonalSquares(): number; + sumSkewSquares(): number; + sumSquares(): number; + symmetricEigenvalues(leftEigenvectors: Matrix3d, lambda: Vector3d): boolean; + testPerpendicularUnitRowsAndColumns(): boolean; + toJSON(): Matrix3dProps; + // (undocumented) + toQuaternion(): Point4d; + transpose(result?: Matrix3d): Matrix3d; + transposeInPlace(): void; + // (undocumented) + static useCachedInverse: boolean; + // (undocumented) + static xyPlusMatrixTimesXY(origin: XAndY, matrix: Matrix3d, vector: XAndY, result?: Point2d): Point2d; + // (undocumented) + static xyzMinusMatrixTimesXYZ(origin: XYZ, matrix: Matrix3d, vector: XYZ, result?: Point3d): Point3d; + // (undocumented) + static xyzPlusMatrixTimesCoordinates(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, result?: Point3d): Point3d; + static xyzPlusMatrixTimesCoordinatesToFloat64Array(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, result?: Float64Array): Float64Array; + static xyzPlusMatrixTimesWeightedCoordinates(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, w: number, result?: Point4d): Point4d; + static xyzPlusMatrixTimesWeightedCoordinatesToFloat64Array(origin: XYZ, matrix: Matrix3d, x: number, y: number, z: number, w: number, result?: Float64Array): Float64Array; + // (undocumented) + static xyzPlusMatrixTimesXYZ(origin: XYZ, matrix: Matrix3d, vector: XYAndZ, result?: Point3d): Point3d; +} + +// @public +class Matrix4d implements BeJSONFunctions { + addMomentsInPlace(x: number, y: number, z: number, w: number): void; + addScaledInPlace(other: Matrix4d, scale?: number): void; + readonly asTransform: Transform | undefined; + // (undocumented) + atIJ(rowIndex: number, columnIndex: number): number; + // (undocumented) + clone(): Matrix4d; + cloneTransposed(result?: Matrix4d): Matrix4d; + // (undocumented) + columnDotColumn(columnIndexThis: number, other: Matrix4d, columnIndexOther: number): number; + // (undocumented) + columnDotRow(columnIndexThis: number, other: Matrix4d, rowIndexOther: number): number; + // (undocumented) + columnW(): Point4d; + // (undocumented) + columnX(): Point4d; + // (undocumented) + columnY(): Point4d; + // (undocumented) + columnZ(): Point4d; + static createBoxToBox(lowA: Point3d, highA: Point3d, lowB: Point3d, highB: Point3d, result?: Matrix4d): Matrix4d | undefined; + static createIdentity(result?: Matrix4d): Matrix4d; + createInverse(): Matrix4d | undefined; + static createRowValues(cxx: number, cxy: number, cxz: number, cxw: number, cyx: number, cyy: number, cyz: number, cyw: number, czx: number, czy: number, czz: number, czw: number, cwx: number, cwy: number, cwz: number, cww: number, result?: Matrix4d): Matrix4d; + static createTransform(source: Transform, result?: Matrix4d): Matrix4d; + static createTranslationAndScaleXYZ(tx: number, ty: number, tz: number, scaleX: number, scaleY: number, scaleZ: number, result?: Matrix4d): Matrix4d; + static createTranslationXYZ(x: number, y: number, z: number, result?: Matrix4d): Matrix4d; + static createZero(result?: Matrix4d): Matrix4d; + diagonal(): Point4d; + // (undocumented) + static fromJSON(json?: Matrix4dProps): Matrix4d; + getSteppedPoint(i0: number, step: number, result?: Point4d): Point4d; + // (undocumented) + readonly hasPerspective: boolean; + // (undocumented) + isAlmostEqual(other: Matrix4d): boolean; + isIdentity(tol?: number): boolean; + matrixPart(): Matrix3d; + maxAbs(): number; + maxDiff(other: Matrix4d): number; + multiplyBlockedFloat64ArrayInPlace(data: Float64Array): void; + multiplyMatrixMatrix(other: Matrix4d, result?: Matrix4d): Matrix4d; + multiplyMatrixMatrixTranspose(other: Matrix4d, result?: Matrix4d): Matrix4d; + multiplyMatrixTransposeMatrix(other: Matrix4d, result?: Matrix4d): Matrix4d; + multiplyPoint3d(pt: XYAndZ, w: number, result?: Point4d): Point4d; + multiplyPoint3dArray(pts: XYAndZ[], results: Point4d[], w?: number): void; + multiplyPoint3dArrayQuietNormalize(points: Point3d[]): void; + multiplyPoint3dQuietNormalize(point: XYAndZ, result?: Point3d): Point3d; + multiplyPoint4d(point: Point4d, result?: Point4d): Point4d; + multiplyPoint4dArrayQuietRenormalize(pts: Point4d[], results: Point3d[]): void; + multiplyTransposePoint4d(point: Point4d, result?: Point4d): Point4d; + multiplyTransposeXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; + multiplyXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; + multiplyXYZWQuietRenormalize(x: number, y: number, z: number, w: number, result?: Point3d): Point3d; + // (undocumented) + rowArrays(f?: (value: number) => any): any; + // (undocumented) + rowDotColumn(rowIndex: number, other: Matrix4d, columnIndex: number): number; + // (undocumented) + rowDotRow(rowIndexThis: number, other: Matrix4d, rowIndexOther: number): number; + rowOperation(rowIndexA: number, rowIndexB: number, firstColumnIndex: number, scale: number): void; + // (undocumented) + rowW(): Point4d; + // (undocumented) + rowX(): Point4d; + // (undocumented) + rowY(): Point4d; + // (undocumented) + rowZ(): Point4d; + scaleRowsInPlace(ax: number, ay: number, az: number, aw: number): void; + // (undocumented) + setFrom(other: Matrix4d): void; + // (undocumented) + setFromJSON(json?: Matrix4dProps): void; + setIdentity(): void; + setOriginAndVectors(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d): void; + setZero(): void; + toJSON(): Matrix4dProps; + weight(): number; +} + +// @public +class MomentData { + // (undocumented) + accumulatePointMomentsFromOrigin(points: Point3d[]): void; + // (undocumented) + clearSums(origin?: Point3d): void; + static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined; + localToWorldMap: Transform; + // (undocumented) + static momentTensorFromInertiaProducts(products: Matrix3d): Matrix3d; + // (undocumented) + origin: Point3d; + // (undocumented) + static pointsToPrincipalAxes(points: Point3d[]): MomentData; + radiusOfGyration: Vector3d; + // (undocumented) + shiftSumsToCentroid(): boolean; + // (undocumented) + static sortColumnsForIncreasingMoments(axes: Matrix3d, moments: Vector3d): void; + // (undocumented) + sums: Matrix4d; +} + +// @public (undocumented) +class Newton1dUnbounded extends AbstractNewtonIterator { + constructor(func: NewtonEvaluatorRtoRD); + // (undocumented) + applyCurrentStep(): boolean; + computeStep(): boolean; + // (undocumented) + currentStepSize(): number; + // (undocumented) + getX(): number; + // (undocumented) + setTarget(y: number): void; + // (undocumented) + setX(x: number): boolean; +} + +// @public +class Newton1dUnboundedApproximateDerivative extends AbstractNewtonIterator { + constructor(func: NewtonEvaluatorRtoR); + // (undocumented) + applyCurrentStep(): boolean; + computeStep(): boolean; + // (undocumented) + currentStepSize(): number; + // (undocumented) + derivativeH: number; + // (undocumented) + getX(): number; + // (undocumented) + setX(x: number): boolean; +} + +// @public +class Newton2dUnboundedWithDerivative extends AbstractNewtonIterator { + constructor(func: NewtonEvaluatorRRtoRRD); + // (undocumented) + applyCurrentStep(): boolean; + computeStep(): boolean; + // (undocumented) + currentStepSize(): number; + // (undocumented) + getU(): number; + // (undocumented) + getV(): number; + // (undocumented) + setUV(x: number, y: number): boolean; +} + +// @public +class NewtonEvaluatorRRtoRRD { + constructor(); + currentF: Plane3dByOriginAndVectors; + abstract evaluate(x: number, y: number): boolean; +} + +// @public +class NewtonEvaluatorRtoR { + // (undocumented) + currentF: number; + // (undocumented) + abstract evaluate(x: number): boolean; +} + +// @public +class NewtonEvaluatorRtoRD { + // (undocumented) + currentdFdX: number; + // (undocumented) + currentF: number; + // (undocumented) + abstract evaluate(x: number): boolean; +} + +// @public +class NullGeometryHandler extends GeometryHandler { + // (undocumented) + handleArc3d(_g: Arc3d): any; + // (undocumented) + handleBagOfCurves(_g: BagOfCurves): any; + // (undocumented) + handleBezierCurve3d(_g: BezierCurve3d): any; + // (undocumented) + handleBezierCurve3dH(_g: BezierCurve3dH): any; + // (undocumented) + handleBox(_g: Box): any; + // (undocumented) + handleBSplineCurve3d(_g: BSplineCurve3d): any; + // (undocumented) + handleBSplineCurve3dH(_g: BSplineCurve3dH): any; + // (undocumented) + handleBSplineSurface3d(_g: BSplineSurface3d): any; + // (undocumented) + handleBSplineSurface3dH(_g: BSplineSurface3dH): any; + // (undocumented) + handleCone(_g: Cone): any; + // (undocumented) + handleCoordinateXYZ(_g: CoordinateXYZ): any; + // (undocumented) + handleCurveCollection(_g: CurveCollection): any; + // (undocumented) + handleIndexedPolyface(_g: IndexedPolyface): any; + // (undocumented) + handleLinearSweep(_g: LinearSweep): any; + // (undocumented) + handleLineSegment3d(_g: LineSegment3d): any; + // (undocumented) + handleLineString3d(_g: LineString3d): any; + // (undocumented) + handleLoop(_g: Loop): any; + // (undocumented) + handleParityRegion(_g: ParityRegion): any; + // (undocumented) + handlePath(_g: Path): any; + // (undocumented) + handlePointString3d(_g: PointString3d): any; + // (undocumented) + handleRotationalSweep(_g: RotationalSweep): any; + // (undocumented) + handleRuledSweep(_g: RuledSweep): any; + // (undocumented) + handleSphere(_g: Sphere): any; + // (undocumented) + handleTorusPipe(_g: TorusPipe): any; + // (undocumented) + handleTransitionSpiral(_g: TransitionSpiral3d): any; + // (undocumented) + handleUnionRegion(_g: UnionRegion): any; +} + +// @public (undocumented) +class NumberArray { + static isAlmostEqual(dataA: number[] | Float64Array | undefined, dataB: number[] | Float64Array | undefined, tolerance: number): boolean; + // (undocumented) + static isCoordinateInArray(x: number, data: number[] | undefined): boolean; + static isExactEqual(dataA: any[] | Float64Array | undefined, dataB: any[] | Float64Array | undefined): boolean; + // (undocumented) + static maxAbsArray(values: number[]): number; + // (undocumented) + static maxAbsDiff(dataA: number[], dataB: number[]): number; + // (undocumented) + static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number; + // (undocumented) + static maxAbsTwo(a1: number, a2: number): number; + static preciseSum(data: number[]): number; + static sum(data: number[] | Float64Array): number; +} + +// @public +class Order2Bezier extends BezierCoffs { + constructor(f0?: number, f1?: number); + basisFunctions(u: number, result?: Float64Array): Float64Array; + clone(): Order2Bezier; + evaluate(u: number): number; + roots(targetValue: number, restrictTo01: boolean): number[] | undefined; + // (undocumented) + solve(rightHandSide: number): number | undefined; + static solveCoffs(a0: number, a1: number): number | undefined; + sumBasisFunctionDerivatives(_u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; + sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; +} + +// @public +class Order3Bezier extends BezierCoffs { + constructor(f0?: number, f1?: number, f2?: number); + addSquareLinear(f0: number, f1: number, a: number): void; + basisFunctions(u: number, result?: Float64Array): Float64Array; + // (undocumented) + clone(): Order3Bezier; + evaluate(u: number): number; + // (undocumented) + roots(targetValue: number, restrictTo01: boolean): number[] | undefined; + sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; + sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; +} + +// @public +class Order4Bezier extends BezierCoffs { + constructor(f0?: number, f1?: number, f2?: number, f3?: number); + basisFunctions(u: number, result?: Float64Array): Float64Array; + // (undocumented) + clone(): Order4Bezier; + static createFromDegree3PowerPolynomial(source: Degree3PowerPolynomial): Order4Bezier; + // (undocumented) + static createProductOrder3Order2(factorA: Order3Bezier, factorB: Order2Bezier): Order4Bezier; + evaluate(u: number): number; + // (undocumented) + realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): undefined; + sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; + sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; +} + +// @public +class Order5Bezier extends BezierCoffs { + constructor(f0?: number, f1?: number, f2?: number, f3?: number, f4?: number); + // (undocumented) + addConstant(a: number): void; + // (undocumented) + addProduct(f: Order3Bezier, g: Order3Bezier, a: number): void; + basisFunctions(u: number, result?: Float64Array): Float64Array; + // (undocumented) + clone(): Order5Bezier; + static createFromDegree4PowerPolynomial(source: Degree4PowerPolynomial): Order5Bezier; + evaluate(u: number): number; + // (undocumented) + realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): void; + sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; + sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array; +} + +// @public +class OrderedRotationAngles { + static createAngles(xRotation: Angle, yRotation: Angle, zRotation: Angle, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; + static createDegrees(xDegrees: number, yDegrees: number, zDegrees: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; + static createFromMatrix3d(matrix: Matrix3d, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; + static createRadians(xRadians: number, yRadians: number, zRadians: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles; + // (undocumented) + readonly order: AxisOrder; + toMatrix3d(result?: Matrix3d): Matrix3d; + // (undocumented) + static treatVectorsAsColumns: boolean; + // (undocumented) + readonly xAngle: Angle; + // (undocumented) + readonly xDegrees: number; + // (undocumented) + readonly xRadians: number; + // (undocumented) + readonly yAngle: Angle; + // (undocumented) + readonly yDegrees: number; + // (undocumented) + readonly yRadians: number; + // (undocumented) + readonly zAngle: Angle; + // (undocumented) + readonly zDegrees: number; + // (undocumented) + readonly zRadians: number; +} + +// @public +interface PackedPointGrid { + numCartesianDimensions: number; + points: number[][][]; + weightStyle?: WeightStyle; +} + +// @public +class PackedPointsWithIndex { + constructor(numOldIndexEntry: number); + // (undocumented) + growablePackedPoints: GrowableXYZArray | undefined; + // (undocumented) + static invalidIndex: number; + // (undocumented) + oldToNew: Uint32Array; + // (undocumented) + packedPoints: Point3d[]; + updateIndices(indices: number[]): boolean; +} + +// @public +class ParityRegion extends CurveCollection { + constructor(); + // (undocumented) + protected _children: Loop[]; + // (undocumented) + announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; + // (undocumented) + readonly children: Loop[]; + // (undocumented) + clone(): ParityRegion; + // (undocumented) + cloneEmptyPeer(): ParityRegion; + // (undocumented) + cloneStroked(options?: StrokeOptions): ParityRegion; + // (undocumented) + static create(...data: Loop[]): ParityRegion; + // (undocumented) + dgnBoundaryType(): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + getChild(i: number): Loop | undefined; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + // (undocumented) + tryAddChild(child: AnyCurve): boolean; +} + +// @public +class PascalCoefficients { + static getBezierBasisDerivatives(order: number, u: number, result?: Float64Array): Float64Array; + static getBezierBasisValues(order: number, u: number, result?: Float64Array): Float64Array; + static getRow(row: number): Float64Array; +} + +// @public +class Path extends CurveChain { + constructor(); + // (undocumented) + announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; + // (undocumented) + cloneEmptyPeer(): Path; + // (undocumented) + cloneStroked(options?: StrokeOptions): AnyCurve; + static create(...curves: Array): Path; + static createArray(curves: CurvePrimitive[]): Path; + cyclicCurvePrimitive(index: number): CurvePrimitive | undefined; + // (undocumented) + dgnBoundaryType(): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; +} + +// @public +class Plane3dByOriginAndUnitNormal implements BeJSONFunctions { + // (undocumented) + altitude(spacePoint: Point3d): number; + // (undocumented) + altitudeToPoint(altitude: number, result?: Point3d): Point3d; + // (undocumented) + altitudeXYZ(x: number, y: number, z: number): number; + // (undocumented) + altitudeXYZW(x: number, y: number, z: number, w: number): number; + // (undocumented) + clone(result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal; + cloneTransformed(transform: Transform): Plane3dByOriginAndUnitNormal | undefined; + // (undocumented) + static create(origin: Point3d, normal: Vector3d, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined; + static createPointPointVectorInPlane(pointA: Point3d, pointB: Point3d, vector: Vector3d): Plane3dByOriginAndUnitNormal | undefined; + static createXYPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal; + static createYZPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal; + static createZXPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal; + // (undocumented) + static fromJSON(json?: any): Plane3dByOriginAndUnitNormal; + // (undocumented) + getNormalRef(): Vector3d; + // (undocumented) + getOriginRef(): Point3d; + // (undocumented) + isAlmostEqual(other: Plane3dByOriginAndUnitNormal): boolean; + isPointInPlane(spacePoint: Point3d): boolean; + // (undocumented) + projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d; + set(origin: Point3d, normal: Vector3d): void; + setFrom(source: Plane3dByOriginAndUnitNormal): void; + // (undocumented) + setFromJSON(json?: any): void; + toJSON(): any; + // (undocumented) + velocity(spaceVector: Vector3d): number; + // (undocumented) + velocityXYZ(x: number, y: number, z: number): number; + // (undocumented) + weightedAltitude(spacePoint: Point4d): number; +} + +// @public +class Plane3dByOriginAndVectors implements BeJSONFunctions { + static createCapture(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + static createFromTransformColumnsXYAndLengths(transform: Transform, xLength: number | undefined, yLength: number | undefined, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + static createOriginAndTargets(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + static createOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + static createOriginAndVectorsArrays(origin: Float64Array, vectorU: Float64Array, vectorV: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + static createOriginAndVectorsWeightedArrays(originw: Float64Array, vectorUw: Float64Array, vectorVw: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + // (undocumented) + static createOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + static createXYPlane(result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + fractionToPoint(u: number, v: number, result?: Point3d): Point3d; + // (undocumented) + fractionToVector(u: number, v: number, result?: Vector3d): Vector3d; + // (undocumented) + static fromJSON(json?: any): Plane3dByOriginAndVectors; + // (undocumented) + isAlmostEqual(other: Plane3dByOriginAndVectors): boolean; + // (undocumented) + origin: Point3d; + // (undocumented) + setFromJSON(json?: any): void; + // (undocumented) + setOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d): Plane3dByOriginAndVectors; + // (undocumented) + setOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): Plane3dByOriginAndVectors; + toJSON(): any; + // (undocumented) + vectorU: Vector3d; + // (undocumented) + vectorV: Vector3d; +} + +// @public +interface PlaneAltitudeEvaluator { + altitude(point: Point3d): number; + velocity(vector: Vector3d): number; + velocityXYZ(x: number, y: number, z: number): number; + weightedAltitude(point: Point4d): number; +} + +// @public +class PlaneByOriginAndVectors4d { + // (undocumented) + clone(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; + // (undocumented) + static createOriginAndTargets3d(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; + static createOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; + static createOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; + // (undocumented) + static createXYPlane(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d; + // (undocumented) + fractionToPoint(u: number, v: number, result?: Point4d): Point4d; + // (undocumented) + isAlmostEqual(other: PlaneByOriginAndVectors4d): boolean; + // (undocumented) + origin: Point4d; + setFrom(other: PlaneByOriginAndVectors4d): void; + setOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d): PlaneByOriginAndVectors4d; + setOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number): PlaneByOriginAndVectors4d; + // (undocumented) + vectorU: Point4d; + // (undocumented) + vectorV: Point4d; +} + +// @public +class PlaneSetParamsCache { + constructor(zLow: number, zHigh: number, localOrigin?: Point3d, isMask?: boolean, isInvisible?: boolean, focalLength?: number); + // (undocumented) + clipPlaneSet: UnionOfConvexClipPlaneSets; + // (undocumented) + focalLength: number; + // (undocumented) + invisible: boolean; + // (undocumented) + isMask: boolean; + // (undocumented) + limitValue: number; + // (undocumented) + localOrigin: Point3d; + // (undocumented) + zHigh: number; + // (undocumented) + zLow: number; +} + +// @public (undocumented) +class Point2d extends XY, implements BeJSONFunctions { + constructor(x?: number, y?: number); + // (undocumented) + addForwardLeft(tangentFraction: number, leftFraction: number, vector: Vector2d): Point2d; + // (undocumented) + clone(): Point2d; + static create(x?: number, y?: number, result?: Point2d): Point2d; + // (undocumented) + static createFrom(xy: XAndY | undefined, result?: Point2d): Point2d; + // (undocumented) + static createZero(result?: Point2d): Point2d; + crossProductToPoints(target1: XAndY, target2: XAndY): number; + // (undocumented) + dotVectorsToTargets(targetA: XAndY, targetB: XAndY): number; + // (undocumented) + forwardLeftInterpolate(tangentFraction: number, leftFraction: number, point: XAndY): Point2d; + // (undocumented) + fractionOfProjectionToLine(startPoint: Point2d, endPoint: Point2d, defaultFraction?: number): number; + // (undocumented) + static fromJSON(json?: XYProps): Point2d; + interpolate(fraction: number, other: XAndY, result?: Point2d): Point2d; + interpolateXY(fractionX: number, fractionY: number, other: XAndY, result?: Point2d): Point2d; + minus(vector: XAndY, result?: Point2d): Point2d; + plus(vector: XAndY, result?: Point2d): Point2d; + plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Point2d): Point2d; + plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, vectorC: XAndY, scalarC: number, result?: Point2d): Point2d; + plusScaled(vector: XAndY, scaleFactor: number, result?: Point2d): Point2d; + plusXY(dx?: number, dy?: number, result?: Point2d): Point2d; +} + +// @public (undocumented) +class Point2dArray { + // (undocumented) + static clonePoint2dArray(data: Point2d[]): Point2d[]; + // (undocumented) + static isAlmostEqual(dataA: undefined | Point2d[], dataB: undefined | Point2d[]): boolean; + static pointCountExcludingTrailingWraparound(data: XAndY[]): number; +} + +// @public +class Point2dArrayCarrier extends IndexedXYCollection { + constructor(data: Point2d[]); + // (undocumented) + crossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number): number | undefined; + // (undocumented) + crossProductXAndYIndexIndex(origin: XAndY, indexA: number, indexB: number): number | undefined; + // (undocumented) + data: Point2d[]; + // (undocumented) + getPoint2dAtCheckedPointIndex(index: number, result?: Point2d): Point2d | undefined; + // (undocumented) + getVector2dAtCheckedVectorIndex(index: number, result?: Vector2d): Vector2d | undefined; + // (undocumented) + isValidIndex(index: number): boolean; + readonly length: number; + // (undocumented) + vectorIndexIndex(indexA: number, indexB: number, result?: Vector2d): Vector2d | undefined; + // (undocumented) + vectorXAndYIndex(origin: XAndY, indexB: number, result?: Vector2d): Vector2d | undefined; +} + +// @public +class Point3d extends XYZ { + constructor(x?: number, y?: number, z?: number); + clone(result?: Point3d): Point3d; + static create(x?: number, y?: number, z?: number, result?: Point3d): Point3d; + static createAdd2Scaled(pointA: XYAndZ, scaleA: number, pointB: XYAndZ, scaleB: number, result?: Point3d): Point3d; + static createAdd3Scaled(pointA: XYAndZ, scaleA: number, pointB: XYAndZ, scaleB: number, pointC: XYAndZ, scaleC: number, result?: Point3d): Point3d; + static createFrom(data: XYAndZ | XAndY | Float64Array, result?: Point3d): Point3d; + static createFromPacked(xyzData: Float64Array, pointIndex: number, result?: Point3d): Point3d | undefined; + static createFromPackedXYZW(xyzData: Float64Array, pointIndex: number, result?: Point3d): Point3d | undefined; + static createScale(source: XYAndZ, scale: number, result?: Point3d): Point3d; + static createZero(result?: Point3d): Point3d; + crossProductToPoints(pointA: Point3d, pointB: Point3d, result?: Vector3d): Vector3d; + crossProductToPointsXY(pointA: Point3d, pointB: Point3d): number; + dotVectorsToTargets(targetA: Point3d, targetB: Point3d): number; + fractionOfProjectionToLine(startPoint: Point3d, endPoint: Point3d, defaultFraction?: number): number; + // (undocumented) + static fromJSON(json?: XYZProps): Point3d; + interpolate(fraction: number, other: XYAndZ, result?: Point3d): Point3d; + interpolatePerpendicularXY(fraction: number, pointB: Point3d, fractionXYPerp: number, result?: Point3d): Point3d; + interpolatePointAndTangent(fraction: number, other: Point3d, tangentScale: number, result?: Ray3d): Ray3d; + interpolateXYZ(fractionX: number, fractionY: number, fractionZ: number, other: Point3d, result?: Point3d): Point3d; + minus(vector: XYAndZ, result?: Point3d): Point3d; + plus(vector: XYAndZ, result?: Point3d): Point3d; + plus2Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYZ, scalarB: number, result?: Point3d): Point3d; + plus3Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYAndZ, scalarB: number, vectorC: XYAndZ, scalarC: number, result?: Point3d): Point3d; + plusScaled(vector: XYAndZ, scaleFactor: number, result?: Point3d): Point3d; + plusXYZ(dx?: number, dy?: number, dz?: number, result?: Point3d): Point3d; + tripleProductToPoints(pointA: Point3d, pointB: Point3d, pointC: Point3d): number; +} + +// @public (undocumented) +class Point3dArray { + static centroid(points: IndexedXYZCollection, result?: Point3d): Point3d; + // (undocumented) + static clonePoint2dArray(data: XYAndZ[]): Point2d[]; + // (undocumented) + static clonePoint3dArray(data: XYAndZ[]): Point3d[]; + static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number; + static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform; + static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d; + static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number): void; + static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined; + static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined; + // (undocumented) + static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined): boolean; + static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean; + // (undocumented) + static multiplyInPlace(transform: Transform, xyz: Float64Array): void; + // (undocumented) + static packToFloat64Array(data: Point3d[]): Float64Array; + static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge?: boolean): number; + static sumWeightedX(weights: Float64Array, points: Point3d[]): number; + static sumWeightedY(weights: Float64Array, points: Point3d[]): number; + static sumWeightedZ(weights: Float64Array, points: Point3d[]): number; + static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[]; + static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[]; + // (undocumented) + static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[]; +} + +// @public +class Point3dArrayCarrier extends IndexedXYZCollection { + constructor(data: Point3d[]); + // (undocumented) + accumulateCrossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number, result: Vector3d): void; + // (undocumented) + crossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + crossProductXYAndZIndexIndex(origin: XYAndZ, indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + data: Point3d[]; + // (undocumented) + getPoint3dAtCheckedPointIndex(index: number, result?: Point3d): Point3d | undefined; + // (undocumented) + getVector3dAtCheckedVectorIndex(index: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + isValidIndex(index: number): boolean; + readonly length: number; + // (undocumented) + vectorIndexIndex(indexA: number, indexB: number, result?: Vector3d): Vector3d | undefined; + // (undocumented) + vectorXYAndZIndex(origin: XYAndZ, indexB: number, result?: Vector3d): Vector3d | undefined; +} + +// @public +class Point4d implements BeJSONFunctions { + protected constructor(x?: number, y?: number, z?: number, w?: number); + altitude(point: Point3d): number; + // (undocumented) + clone(result?: Point4d): Point4d; + // (undocumented) + static create(x?: number, y?: number, z?: number, w?: number, result?: Point4d): Point4d; + static createAdd2Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, result?: Point4d): Point4d; + static createAdd3Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, vectorC: Point4d, scalarC: number, result?: Point4d): Point4d; + static createFromPackedXYZW(data: Float64Array, xIndex?: number, result?: Point4d): Point4d; + // (undocumented) + static createFromPointAndWeight(xyz: XYAndZ, w: number): Point4d; + static createPlanePointPointZ(pointA: Point4d, pointB: Point4d, result?: Point4d): Point4d; + static createRealDerivativePlane3dByOriginAndVectorsDefault000(x: number, y: number, z: number, w: number, dx: number, dy: number, dz: number, dw: number, ddx: number, ddy: number, ddz: number, ddw: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + static createRealDerivativeRay3dDefault000(x: number, y: number, z: number, w: number, dx: number, dy: number, dz: number, dw: number, result?: Ray3d): Ray3d; + static createRealPoint3dDefault000(x: number, y: number, z: number, w: number, result?: Point3d): Point3d; + // (undocumented) + static createZero(): Point4d; + // (undocumented) + crossWeightedMinus(other: Point4d, result?: Vector3d): Vector3d; + static determinantIndexed3X3(pointA: Point4d, pointB: Point4d, pointC: Point4d, i: number, j: number, k: number): number; + distanceSquaredXYZW(other: Point4d): number; + distanceXYZW(other: Point4d): number; + dotProduct(other: Point4d): number; + dotProductXYZW(x: number, y: number, z: number, w: number): number; + dotVectorsToTargets(targetA: Point4d, targetB: Point4d): number; + // (undocumented) + static fromJSON(json?: Point4dProps): Point4d; + interpolate(fraction: number, pointB: Point4d, result?: Point4d): Point4d; + // (undocumented) + static interpolateQuaternions(quaternion0: Point4d, fractionParameter: number, quaternion1: Point4d, result?: Point4d): Point4d; + // (undocumented) + isAlmostEqual(other: Point4d): boolean; + isAlmostEqualXYZW(x: number, y: number, z: number, w: number): boolean; + // (undocumented) + readonly isAlmostZero: boolean; + // (undocumented) + magnitudeSquaredXYZ(): number; + // (undocumented) + magnitudeXYZW(): number; + // (undocumented) + maxAbs(): number; + maxDiff(other: Point4d): number; + // (undocumented) + minus(other: Point4d, result?: Point4d): Point4d; + negate(result?: Point4d): Point4d; + // (undocumented) + normalizeQuaternion(): number; + normalizeWeight(result?: Point4d): Point4d | undefined; + normalizeXYZW(result?: Point4d): Point4d | undefined; + static perpendicularPoint4dPlane(pointA: Point4d, pointB: Point4d, pointC: Point4d): Point4d; + // (undocumented) + plus(other: Point4d, result?: Point4d): Point4d; + plus2Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, result?: Point4d): Point4d; + plus3Scaled(vectorA: Point4d, scalarA: number, vectorB: Point4d, scalarB: number, vectorC: Point4d, scalarC: number, result?: Point4d): Point4d; + plusScaled(vector: Point4d, scaleFactor: number, result?: Point4d): Point4d; + // (undocumented) + radiansToPoint4dXYZW(other: Point4d): number | undefined; + realDistanceXY(other: Point4d): number | undefined; + realPoint(result?: Point3d): Point3d | undefined; + realPointDefault000(result?: Point3d): Point3d; + // (undocumented) + safeDivideOrNull(denominator: number, result?: Point4d): Point4d | undefined; + scale(scale: number, result?: Point4d): Point4d; + set(x?: number, y?: number, z?: number, w?: number): Point4d; + // (undocumented) + setFrom(other: Point4d): Point4d; + // (undocumented) + setFromJSON(json?: Point4dProps): void; + toJSON(): Point4dProps; + // (undocumented) + toPlane3dByOriginAndUnitNormal(result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined; + static unitW(): Point4d; + static unitX(): Point4d; + static unitY(): Point4d; + static unitZ(): Point4d; + velocity(vector: Vector3d): number; + velocityXYZ(x: number, y: number, z: number): number; + // (undocumented) + w: number; + weightedAltitude(point: Point4d): number; + // (undocumented) + x: number; + // (undocumented) + xyzw: Float64Array; + // (undocumented) + y: number; + // (undocumented) + z: number; +} + +// @public (undocumented) +class Point4dArray { + // (undocumented) + static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined): boolean; + static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean; + static multiplyInPlace(transform: Transform, xyzw: Float64Array): void; + static packPointsAndWeightsToFloat64Array(points: Point3d[], weights: number[], result?: Float64Array): Float64Array; + // (undocumented) + static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array; + static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[], pointFormatter?: (x: number, y: number, z: number) => any): void; + static unpackToPoint4dArray(data: Float64Array): Point4d[]; +} + +// @public +class PointString3d extends GeometryQuery, implements BeJSONFunctions { + addPoint(point: Point3d): void; + addPoints(...points: any[]): void; + clear(): void; + // (undocumented) + clone(): PointString3d; + // (undocumented) + cloneTransformed(transform: Transform): PointString3d; + closestPoint: { + index: number; + xyz: Point3d; + } + static create(...points: any[]): PointString3d; + static createFloat64Array(xyzData: Float64Array): PointString3d; + static createPoints(points: Point3d[]): PointString3d; + dispatchToGeometryHandler(handler: GeometryHandler): any; + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + // (undocumented) + static fromJSON(json?: any): PointString3d; + isAlmostEqual(other: GeometryQuery): boolean; + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + numPoints(): number; + pointAt(i: number, result?: Point3d): Point3d | undefined; + readonly points: Point3d[]; + popPoint(): void; + reverseInPlace(): void; + // (undocumented) + setFrom(other: PointString3d): void; + // (undocumented) + setFromJSON(json?: any): void; + toJSON(): any; + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class Polyface extends GeometryQuery { + protected constructor(data: PolyfaceData); + static areIndicesValid(indices: number[] | undefined, indexPositionA: number, indexPositionB: number, data: any | undefined, dataLength: number): boolean; + abstract createVisitor(_numWrap: number): PolyfaceVisitor; + // (undocumented) + data: PolyfaceData; + // (undocumented) + readonly isEmpty: boolean; + // (undocumented) + twoSided: boolean; +} + +// @public +class PolyfaceAuxData { + constructor(channels: AuxChannel[], indices: number[]); + // (undocumented) + channels: AuxChannel[]; + // (undocumented) + clone(): PolyfaceAuxData; + // (undocumented) + createForVisitor(): PolyfaceAuxData; + // (undocumented) + indices: number[]; + // (undocumented) + isAlmostEqual(other: PolyfaceAuxData, tol?: number): boolean; +} + +// @public +class PolyfaceBuilder extends NullGeometryHandler { + addBetweenLineStringsWithRuleEdgeNormals(lineStringA: LineString3d, vA: number, lineStringB: LineString3d, vB: number, addClosure?: boolean): void; + addBetweenLineStringsWithStoredIndices(lineStringA: LineString3d, lineStringB: LineString3d): void; + addBetweenTransformedLineStrings(curves: AnyCurve, transformA: Transform, transformB: Transform, addClosure?: boolean): void; + // (undocumented) + addBox(box: Box): void; + // (undocumented) + addCone(cone: Cone): void; + addCoordinateFacets(pointArray: Point3d[][], paramArray?: Point2d[][], normalArray?: Vector3d[][], endFace?: boolean): void; + // (undocumented) + addGeometryQuery(g: GeometryQuery): void; + addGraph(graph: HalfEdgeGraph, needParams: boolean, acceptFaceFunction?: HalfEdgeToBooleanFunction): void; + addIndexedPolyface(source: IndexedPolyface, reversed: boolean, transform?: Transform): void; + // (undocumented) + addLinearSweep(surface: LinearSweep): void; + // (undocumented) + addLinearSweepLineStringsXYZOnly(contour: AnyCurve, vector: Vector3d): void; + addPolygon(points: Point3d[], numPointsToUse?: number): void; + addQuadFacet(points: Point3d[], params?: Point2d[], normals?: Vector3d[]): void; + // (undocumented) + addRotationalSweep(surface: RotationalSweep): void; + // (undocumented) + addRuledSweep(surface: RuledSweep): boolean; + // (undocumented) + addSphere(sphere: Sphere, strokeCount?: number): void; + // (undocumented) + addTorusPipe(surface: TorusPipe, phiStrokeCount?: number, thetaStrokeCount?: number): void; + addTransformedUnitBox(transform: Transform): void; + addTriangleFacet(points: Point3d[], params?: Point2d[], normals?: Vector3d[]): void; + addTriangleFan(conePoint: Point3d, ls: LineString3d, toggle: boolean): void; + addTrianglesInUncheckedConvexPolygon(ls: LineString3d, toggle: boolean): void; + addUVGridBody(surface: UVSurface, numU: number, numV: number, uMap?: Segment1d, vMap?: Segment1d): void; + applyStrokeCountsToCurvePrimitives(data: AnyCurve | GeometryQuery): void; + claimPolyface(compress?: boolean): IndexedPolyface; + // (undocumented) + static create(options?: StrokeOptions): PolyfaceBuilder; + endFace(): boolean; + findOrAddNormalnLineString(ls: LineString3d, index: number, transform?: Transform, priorIndexA?: number, priorIndexB?: number): number | undefined; + findOrAddParamInGrowableXYArray(data: GrowableXYArray, index: number): number | undefined; + findOrAddParamInLineString(ls: LineString3d, index: number, v: number, priorIndexA?: number, priorIndexB?: number): number | undefined; + findOrAddParamXY(x: number, y: number): number; + findOrAddPoint(xyz: Point3d): number; + findOrAddPointInLineString(ls: LineString3d, index: number, transform?: Transform, priorIndex?: number): number | undefined; + findOrAddPointXYZ(x: number, y: number, z: number): number; + // (undocumented) + static graphToPolyface(graph: HalfEdgeGraph, options?: StrokeOptions, acceptFaceFunction?: HalfEdgeToBooleanFunction): IndexedPolyface; + // (undocumented) + handleBox(g: Box): any; + // (undocumented) + handleCone(g: Cone): any; + // (undocumented) + handleLinearSweep(g: LinearSweep): any; + // (undocumented) + handleRotationalSweep(g: RotationalSweep): any; + // (undocumented) + handleRuledSweep(g: RuledSweep): any; + // (undocumented) + handleSphere(g: Sphere): any; + // (undocumented) + handleTorusPipe(g: TorusPipe): any; + // (undocumented) + readonly options: StrokeOptions; + // (undocumented) + toggleReversedFacetFlag(): void; +} + +// WARNING: planarityLocalRelTol has incomplete type information +// @public +class PolyfaceData { + constructor(needNormals?: boolean, needParams?: boolean, needColors?: boolean); + // (undocumented) + auxData: PolyfaceAuxData | undefined; + // (undocumented) + clone(): PolyfaceData; + // (undocumented) + color: number[] | undefined; + // (undocumented) + readonly colorCount: number; + // (undocumented) + colorIndex: number[] | undefined; + // (undocumented) + compress(): void; + copyNormalTo(i: number, dest: Vector3d): void; + copyParamTo(i: number, dest: Point2d): void; + copyPointTo(i: number, dest: Point3d): void; + // (undocumented) + edgeVisible: boolean[]; + face: FacetFaceData[]; + readonly faceCount: number; + gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void; + getColor(i: number): number; + getEdgeVisible(i: number): boolean; + getNormal(i: number): Vector3d | undefined; + getParam(i: number): Point2d | undefined; + getPoint(i: number): Point3d | undefined; + // (undocumented) + readonly indexCount: number; + // (undocumented) + isAlmostEqual(other: PolyfaceData): boolean; + isAlmostEqualParamIndexUV(index: number, u: number, v: number): boolean; + static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean; + // (undocumented) + normal: GrowableXYZArray | undefined; + // (undocumented) + readonly normalCount: number; + // (undocumented) + normalIndex: number[] | undefined; + // (undocumented) + param?: GrowableXYArray; + // (undocumented) + readonly paramCount: number; + // (undocumented) + paramIndex: number[] | undefined; + // (undocumented) + point: GrowableXYZArray; + // (undocumented) + readonly pointCount: number; + // (undocumented) + pointIndex: number[]; + // (undocumented) + range(result?: Range3d, transform?: Transform): Range3d; + // (undocumented) + readonly requireNormals: boolean; + // (undocumented) + resizeAllDataArrays(length: number): void; + reverseIndices(facetStartIndex?: number[]): void; + // (undocumented) + reverseNormals(): void; + // (undocumented) + trimAllIndexArrays(length: number): void; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class PolyfaceQuery { + static computePrincipalAreaMoments(source: Polyface): MomentData | undefined; + static indexedPolyfaceToLoops(polyface: Polyface): BagOfCurves; + static isPolyfaceClosedByEdgePairing(source: Polyface): boolean; + // (undocumented) + static sumFacetAreas(source: Polyface | PolyfaceVisitor): number; + static sumFacetSecondAreaMomentProducts(source: Polyface | PolyfaceVisitor, origin: Point3d): Matrix4d; + static sumTetrahedralVolumes(source: Polyface | PolyfaceVisitor, origin?: Point3d): number; + static visitorToLoop(visitor: PolyfaceVisitor): Loop; +} + +// @public +interface PolyfaceVisitor extends PolyfaceData { + // (undocumented) + clientAuxIndex(i: number): number; + // (undocumented) + clientColorIndex(i: number): number; + // (undocumented) + clientNormalIndex(i: number): number; + // (undocumented) + clientParamIndex(i: number): number; + // (undocumented) + clientPointIndex(i: number): number; + // (undocumented) + currentReadIndex(): number; + // (undocumented) + moveToNextFacet(): boolean; + // (undocumented) + moveToReadIndex(index: number): boolean; + // (undocumented) + reset(): void; +} + +// @public +class PolygonOps { + static addSecondMomentAreaProducts(points: IndexedXYZCollection, origin: Point3d, moments: Matrix4d): void; + static area(points: Point3d[]): number; + // (undocumented) + static areaNormal(points: Point3d[], result?: Vector3d): Vector3d; + static areaNormalGo(points: IndexedXYZCollection, result?: Vector3d): Vector3d | undefined; + static areaXY(points: Point3d[]): number; + // (undocumented) + static centroidAndAreaXY(points: Point2d[], centroid: Point2d): number | undefined; + // (undocumented) + static centroidAreaNormal(points: Point3d[]): Ray3d | undefined; + static parity(pPoint: Point2d, pPointArray: Point2d[] | Point3d[], tol?: number): number; + static parityVectorTest(pPoint: Point2d, theta: number, pPointArray: Point2d[] | Point3d[], tol: number): number | undefined; + static parityXTest(pPoint: Point2d, pPointArray: Point2d[] | Point3d[], tol: number): number | undefined; + static parityYTest(pPoint: Point2d, pPointArray: Point2d[] | Point3d[], tol: number): number | undefined; + static sumTriangleAreas(points: Point3d[]): number; + static sumTriangleAreasXY(points: Point3d[]): number; + static testXYPolygonTurningDirections(pPointArray: Point2d[] | Point3d[]): number; + // (undocumented) + static unitNormal(points: IndexedXYZCollection, result: Vector3d): boolean; +} + +// @public (undocumented) +class PowerPolynomial { + // (undocumented) + static accumulate(coffP: Float64Array, coffQ: Float64Array, scaleQ: number): number; + // (undocumented) + static degreeKnownEvaluate(coff: Float64Array, degree: number, x: number): number; + // (undocumented) + static evaluate(coff: Float64Array, x: number): number; + // (undocumented) + static zero(coff: Float64Array): void; +} + +// @public +class Quadrature { + // (undocumented) + static readonly gaussW1Interval01: Float64Array; + // (undocumented) + static readonly gaussW2Interval01: Float64Array; + // (undocumented) + static readonly gaussW3Interval01: Float64Array; + // (undocumented) + static readonly gaussW4Interval01: Float64Array; + // (undocumented) + static readonly gaussW5Interval01: Float64Array; + // (undocumented) + static readonly gaussX1Interval01: Float64Array; + // (undocumented) + static readonly gaussX2Interval01: Float64Array; + // (undocumented) + static readonly gaussX3Interval01: Float64Array; + // (undocumented) + static readonly gaussX4Interval01: Float64Array; + // (undocumented) + static readonly gaussX5Interval01: Float64Array; + static mapWeights(xA: number, h: number, xRef: Float64Array, wRef: Float64Array, xMapped: Float64Array, wMapped: Float64Array): number; + // (undocumented) + static setupGauss1(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; + // (undocumented) + static setupGauss2(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; + // (undocumented) + static setupGauss3(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; + // (undocumented) + static setupGauss4(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; + static setupGauss5(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number; + static sum1(xx: Float64Array, ww: Float64Array, n: number, f: (x: number) => number): number; +} + +// @public (undocumented) +export function quotientDerivative2(ddg: number, dh: number, ddh: number, f: number, df: number, divh: number): number; + +// @public (undocumented) +class Range1d extends RangeBase { + clone(result?: this): this; + containsRange(other: Range1d): boolean; + containsX(x: number): boolean; + static createArray(values: Float64Array | number[], result?: T): T; + static createFrom(other: T, result?: T): T; + static createNull(result?: T): T; + static createX(x: number, result?: T): T; + static createXX(xA: number, xB: number, result?: T): T; + static createXXOrCorrectToNull(xA: number, xB: number, result?: T): T; + distanceToRange(other: Range1d): number; + distanceToX(x: number): number; + expandInPlace(delta: number): void; + extendArray(values: Float64Array | number[]): void; + extendArraySubset(values: Float64Array | number[], beginIndex: number, numValue: number): void; + extendRange(other: Range1d): void; + extendX(x: number): void; + fractionToPoint(fraction: number): number; + // (undocumented) + static fromJSON(json?: Range1dProps): T; + // (undocumented) + high: number; + intersect(other: Range1d, result?: Range1d): Range1d; + intersectsRange(other: Range1d): boolean; + isAlmostEqual(other: Range1d): boolean; + readonly isAlmostZeroLength: boolean; + readonly isNull: boolean; + readonly isSinglePoint: boolean; + length(): number; + // (undocumented) + low: number; + maxAbs(): number; + scaleAboutCenterInPlace(scaleFactor: number): void; + setFrom(other: Range1d): void; + setFromJSON(json: Range1dProps): void; + // (undocumented) + setNull(): void; + setX(x: number): void; + toJSON(): Range1dProps; + union(other: Range1d, result?: Range1d): Range1d; +} + +// @public +class Range1dArray { + static countContainingRanges(data: Range1d[], value: number): number; + static differenceSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; + static getBreaks(data: Range1d[], result?: GrowableFloat64Array, sort?: boolean, compress?: boolean): GrowableFloat64Array; + // (undocumented) + static intersectSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; + static isSorted(data: Range1d[], strict?: boolean): boolean; + // (undocumented) + static paritySorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; + // (undocumented) + static simplifySortParity(data: Range1d[], removeZeroLengthRanges?: boolean): void; + static simplifySortUnion(data: Range1d[], removeZeroLengthRanges?: boolean): void; + static sort(data: Range1d[]): void; + static sumLengths(data: Range1d[]): number; + static testParity(data: Range1d[], value: number): boolean; + static testUnion(data: Range1d[], value: number): boolean; + // (undocumented) + static unionSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[]; +} + +// @public (undocumented) +class Range2d extends RangeBase, implements LowAndHighXY { + constructor(lowx?: number, lowy?: number, highx?: number, highy?: number); + // (undocumented) + readonly bottom: number; + // (undocumented) + readonly center: Point2d; + clone(result?: this): this; + containsPoint(point: XAndY): boolean; + containsRange(other: LowAndHighXY): boolean; + containsXY(x: number, y: number): boolean; + static createArray(points: Point2d[], result?: T): T; + // (undocumented) + static createFrom(other: LowAndHighXY, result?: T): T; + static createNull(result?: T): T; + static createXY(x: number, y: number, result?: T): T; + static createXYXY(xA: number, yA: number, xB: number, yB: number, result?: T): T; + static createXYXYOrCorrectToNull(xA: number, yA: number, xB: number, yB: number, result?: T): T; + diagonal(result?: Vector2d): Vector2d; + diagonalFractionToPoint(fraction: number, result?: Point2d): Point2d; + distanceToPoint(point: XAndY): number; + distanceToRange(other: LowAndHighXY): number; + expandInPlace(delta: number): void; + extendPoint(point: XAndY): void; + extendRange(other: LowAndHighXY): void; + extendTransformedXY(transform: Transform, x: number, y: number): void; + extendXY(x: number, y: number): void; + fractionToPoint(fractionX: number, fractionY: number, result?: Point2d): Point2d; + // (undocumented) + freeze(): void; + static fromArrayBuffer(buffer: ArrayBuffer): T; + static fromFloat64Array(f64: Float64Array): T; + // (undocumented) + static fromJSON(json?: Range2dProps): T; + // (undocumented) + readonly height: number; + // (undocumented) + high: Point2d; + intersect(other: LowAndHighXY, result?: Range2d): Range2d; + intersectsRange(other: LowAndHighXY): boolean; + // (undocumented) + isAlmostEqual(other: Range2d): boolean; + readonly isAlmostZeroX: boolean; + readonly isAlmostZeroY: boolean; + readonly isNull: boolean; + readonly isSinglePoint: boolean; + // (undocumented) + readonly left: number; + // (undocumented) + low: Point2d; + maxAbs(): number; + // (undocumented) + readonly right: number; + scaleAboutCenterInPlace(scaleFactor: number): void; + // (undocumented) + setFrom(other: LowAndHighXY): void; + setFromJSON(json: Range2dProps): void; + // (undocumented) + setNull(): void; + setXY(x: number, y: number): void; + // (undocumented) + static toFloat64Array(val: LowAndHighXY): Float64Array; + // (undocumented) + toJSON(): Range2dProps; + // (undocumented) + readonly top: number; + union(other: LowAndHighXY, result?: Range2d): Range2d; + // (undocumented) + readonly width: number; + xLength(): number; + yLength(): number; +} + +// @public (undocumented) +class Range3d extends RangeBase, implements LowAndHighXYZ, BeJSONFunctions { + constructor(lowx?: number, lowy?: number, lowz?: number, highx?: number, highy?: number, highz?: number); + // (undocumented) + readonly back: number; + // (undocumented) + readonly bottom: number; + readonly center: Point3d; + // (undocumented) + clone(result?: this): this; + containsPoint(point: Point3d): boolean; + containsPointXY(point: Point3d): boolean; + containsRange(other: Range3d): boolean; + containsXYZ(x: number, y: number, z: number): boolean; + corners(): Point3d[]; + static create(...point: Point3d[]): Range3d; + static createArray(points: Point3d[], result?: T): T; + // (undocumented) + static createFrom(other: Range3d, result?: T): T; + static createInverseTransformedArray(transform: Transform, points: Point3d[]): T; + static createNull(result?: T): T; + static createRange2d(range: Range2d, z?: number, result?: T): T; + static createTransformed(transform: Transform, ...point: Point3d[]): T; + static createTransformedArray(transform: Transform, points: Point3d[]): T; + static createXYZ(x: number, y: number, z: number, result?: T): T; + static createXYZXYZ(xA: number, yA: number, zA: number, xB: number, yB: number, zB: number, result?: T): T; + static createXYZXYZOrCorrectToNull(xA: number, yA: number, zA: number, xB: number, yB: number, zB: number, result?: T): T; + // (undocumented) + readonly depth: number; + diagonal(result?: Vector3d): Vector3d; + diagonalFractionToPoint(fraction: number, result?: Point3d): Point3d; + distanceToPoint(point: XYAndZ): number; + distanceToRange(other: Range3d): number; + ensureMinLengths(min?: number): void; + expandInPlace(delta: number): void; + extend(...point: Point3d[]): void; + extendArray(points: Point3d[] | GrowableXYZArray, transform?: Transform): void; + extendInverseTransformedArray(points: Point3d[] | GrowableXYZArray, transform: Transform): void; + extendInverseTransformedXYZ(transform: Transform, x: number, y: number, z: number): boolean; + extendPoint(point: Point3d): void; + extendRange(other: LowAndHighXYZ): void; + extendTransformedPoint(transform: Transform, point: Point3d): void; + extendTransformedXYZ(transform: Transform, x: number, y: number, z: number): void; + extendTransformedXYZW(transform: Transform, x: number, y: number, z: number, w: number): void; + extendTransformTransformedXYZ(transformA: Transform, transformB: Transform, x: number, y: number, z: number): void; + extendXYZ(x: number, y: number, z: number): void; + extendXYZW(x: number, y: number, z: number, w: number): void; + fractionToPoint(fractionX: number, fractionY: number, fractionZ: number, result?: Point3d): Point3d; + // (undocumented) + freeze(): void; + static fromArrayBuffer(buffer: ArrayBuffer): T; + static fromFloat64Array(f64: Float64Array): T; + // (undocumented) + static fromJSON(json?: Range3dProps): T; + // (undocumented) + readonly front: number; + getLocalToWorldTransform(result?: Transform): Transform; + getNpcToWorldRangeTransform(result?: Transform): Transform; + // (undocumented) + readonly height: number; + // (undocumented) + high: Point3d; + intersect(other: Range3d, result?: Range3d): Range3d; + intersectsRange(other: Range3d): boolean; + intersectsRangeXY(other: Range3d): boolean; + isAlmostEqual(other: Range3d): boolean; + readonly isAlmostZeroX: boolean; + readonly isAlmostZeroY: boolean; + readonly isAlmostZeroZ: boolean; + readonly isNull: boolean; + readonly isSinglePoint: boolean; + // (undocumented) + readonly left: number; + localToWorld(xyz: XYAndZ, result?: Point3d): Point3d | undefined; + localToWorldArrayInPlace(points: Point3d[]): boolean; + localXYZToWorld(fractionX: number, fractionY: number, fractionZ: number, result?: Point3d): Point3d | undefined; + // (undocumented) + low: Point3d; + maxAbs(): number; + maxLength(): number; + // (undocumented) + readonly right: number; + scaleAboutCenterInPlace(scaleFactor: number): void; + setFrom(other: Range3d): void; + // (undocumented) + setFromJSON(json?: Range3dProps): void; + setNull(): void; + setXYZ(x: number, y: number, z: number): void; + // (undocumented) + static toFloat64Array(val: LowAndHighXYZ): Float64Array; + toJSON(): Range3dProps; + // (undocumented) + readonly top: number; + union(other: Range3d, result?: Range3d): Range3d; + // (undocumented) + readonly width: number; + worldToLocal(point: Point3d, result?: Point3d): Point3d | undefined; + worldToLocalArrayInPlace(point: Point3d[]): boolean; + xLength(): number; + yLength(): number; + zLength(): number; +} + +// @public (undocumented) +class RangeBase { + // (undocumented) + protected static readonly _EXTREME_NEGATIVE: number; + // (undocumented) + protected static readonly _EXTREME_POSITIVE: number; + // (undocumented) + static coordinateToRangeAbsoluteDistance(x: number, low: number, high: number): number; + // (undocumented) + static isExtremePoint2d(xy: Point2d): boolean; + // (undocumented) + static isExtremePoint3d(xyz: Point3d): boolean; + // (undocumented) + static isExtremeValue(x: number): boolean; + protected static npcScaleFactor(low: number, high: number): number; + static rangeToRangeAbsoluteDistance(lowA: number, highA: number, lowB: number, highB: number): number; +} + +// @public (undocumented) +class Ray2d { + // (undocumented) + ccwPerpendicularRay(): Ray2d; + // (undocumented) + static createOriginAndDirection(origin: Point2d, direction: Vector2d): Ray2d; + // (undocumented) + static createOriginAndDirectionCapture(origin: Point2d, direction: Vector2d): Ray2d; + // (undocumented) + static createOriginAndTarget(origin: Point2d, target: Point2d): Ray2d; + // (undocumented) + cwPerpendicularRay(): Ray2d; + // (undocumented) + readonly direction: Vector2d; + fractionToPoint(f: number): Point2d; + intersectUnboundedLine(linePointA: Point2d, linePointB: Point2d, fraction: number[], dhds: number[]): boolean; + // (undocumented) + normalizeDirectionInPlace(): boolean; + // (undocumented) + readonly origin: Point2d; + parallelRay(leftFraction: number): Ray2d; + perpendicularProjectionFraction(point: Point2d): number; + projectionFraction(point: Point2d): number; +} + +// @public +class Ray3d implements BeJSONFunctions { + // (undocumented) + a?: number; + clone(result?: Ray3d): Ray3d; + cloneTransformed(transform: Transform): Ray3d; + // (undocumented) + static create(origin: Point3d, direction: Vector3d, result?: Ray3d): Ray3d; + static createCapture(origin: Point3d, direction: Vector3d): Ray3d; + static createPointVectorNumber(origin: Point3d, direction: Vector3d, a: number, result?: Ray3d): Ray3d; + static createStartEnd(origin: Point3d, target: Point3d, result?: Ray3d): Ray3d; + static createWeightedDerivative(weightedPoint: Float64Array, weightedDerivative: Float64Array, result?: Ray3d): Ray3d | undefined; + // (undocumented) + static createXAxis(): Ray3d; + static createXYZUVW(originX: number, originY: number, originZ: number, directionX: number, directionY: number, directionZ: number, result?: Ray3d): Ray3d; + // (undocumented) + static createYAxis(): Ray3d; + // (undocumented) + static createZAxis(): Ray3d; + // (undocumented) + static createZero(result?: Ray3d): Ray3d; + // (undocumented) + direction: Vector3d; + distance(spacePoint: Point3d): number; + // (undocumented) + dotProductToPoint(spacePoint: Point3d): number; + fractionToPoint(fraction: number): Point3d; + // (undocumented) + static fromJSON(json?: any): Ray3d; + // (undocumented) + getDirectionRef(): Vector3d; + // (undocumented) + getOriginRef(): Point3d; + intersectionWithPlane(plane: Plane3dByOriginAndUnitNormal, result?: Point3d): number | undefined; + // (undocumented) + isAlmostEqual(other: Ray3d): boolean; + // (undocumented) + origin: Point3d; + perpendicularPartOfVectorToTarget(targetPoint: XYAndZ, result?: Vector3d): Vector3d; + // (undocumented) + pointToFraction(spacePoint: Point3d): number; + // (undocumented) + projectPointToRay(spacePoint: Point3d): Point3d; + set(origin: Point3d, direction: Vector3d): void; + setFrom(source: Ray3d): void; + setFromJSON(json?: any): void; + toJSON(): any; + toRigidZFrame(): Transform | undefined; + transformInPlace(transform: Transform): void; + // (undocumented) + tryNormalizeInPlaceWithAreaWeight(a: number): boolean; + trySetDirectionMagnitudeInPlace(magnitude?: number): boolean; +} + +// @public +class RecurseToCurvesGeometryHandler extends GeometryHandler { + // (undocumented) + handleArc3d(_g: Arc3d): any; + // (undocumented) + handleBagOfCurves(g: BagOfCurves): any; + // (undocumented) + handleBezierCurve3d(_g: BezierCurve3d): any; + // (undocumented) + handleBezierCurve3dH(_g: BezierCurve3dH): any; + // (undocumented) + handleBox(_g: Box): any; + // (undocumented) + handleBSplineCurve3d(_g: BSplineCurve3d): any; + // (undocumented) + handleBSplineCurve3dH(_g: BSplineCurve3dH): any; + // (undocumented) + handleBSplineSurface3d(_g: BSplineSurface3d): any; + // (undocumented) + handleBSplineSurface3dH(_g: BSplineSurface3dH): any; + // (undocumented) + handleChildren(g: GeometryQuery): any; + // (undocumented) + handleCone(_g: Cone): any; + // (undocumented) + handleCoordinateXYZ(_g: CoordinateXYZ): any; + // (undocumented) + handleCurveCollection(_g: CurveCollection): any; + // (undocumented) + handleIndexedPolyface(_g: IndexedPolyface): any; + // (undocumented) + handleLinearSweep(_g: LinearSweep): any; + // (undocumented) + handleLineSegment3d(_g: LineSegment3d): any; + // (undocumented) + handleLineString3d(_g: LineString3d): any; + // (undocumented) + handleLoop(g: Loop): any; + // (undocumented) + handleParityRegion(g: ParityRegion): any; + // (undocumented) + handlePath(g: Path): any; + // (undocumented) + handlePointString3d(_g: PointString3d): any; + // (undocumented) + handleRotationalSweep(_g: RotationalSweep): any; + // (undocumented) + handleRuledSweep(_g: RuledSweep): any; + // (undocumented) + handleSphere(_g: Sphere): any; + // (undocumented) + handleTorusPipe(_g: TorusPipe): any; + // (undocumented) + handleTransitionSpiral(_g: TransitionSpiral3d): any; + // (undocumented) + handleUnionRegion(g: UnionRegion): any; +} + +// @public +class RecursiveCurveProcessor { + protected constructor(); + // (undocumented) + announceBagOfCurves(data: BagOfCurves, _indexInParent?: number): void; + announceCurvePrimitive(_data: CurvePrimitive, _indexInParent?: number): void; + announceLoop(data: Loop, _indexInParent?: number): void; + announceParityRegion(data: ParityRegion, _indexInParent?: number): void; + announcePath(data: Path, _indexInParent?: number): void; + announceUnexpected(_data: AnyCurve, _indexInParent: number): void; + announceUnionRegion(data: UnionRegion, _indexInParent?: number): void; +} + +// @public +class RecursiveCurveProcessorWithStack extends RecursiveCurveProcessor { + protected constructor(); + // (undocumented) + protected _stack: CurveCollection[]; + // (undocumented) + announceBagOfCurves(data: BagOfCurves, _indexInParent?: number): void; + announceCurvePrimitive(_data: CurvePrimitive, _indexInParent?: number): void; + announceLoop(data: Loop, indexInParent?: number): void; + announceParityRegion(data: ParityRegion, _indexInParent?: number): void; + announcePath(data: Path, indexInParent?: number): void; + announceUnexpected(_data: AnyCurve, _indexInParent: number): void; + announceUnionRegion(data: UnionRegion, indexInParent?: number): void; + // (undocumented) + enter(data: CurveCollection): void; + // (undocumented) + leave(): CurveCollection | undefined; +} + +// @public (undocumented) +class RotationalSweep extends SolidPrimitive { + // (undocumented) + clone(): RotationalSweep; + // (undocumented) + cloneAxisRay(): Ray3d; + // (undocumented) + cloneTransformed(transform: Transform): RotationalSweep; + // (undocumented) + constantVSection(vFraction: number): CurveCollection | undefined; + // (undocumented) + static create(contour: CurveCollection, axis: Ray3d, sweepAngle: Angle, capped: boolean): RotationalSweep | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + getCurves(): CurveCollection; + // (undocumented) + getFractionalRotationTransform(vFraction: number, result?: Transform): Transform; + // (undocumented) + getSweep(): Angle; + // (undocumented) + getSweepContourRef(): SweepContour; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public (undocumented) +class RuledSweep extends SolidPrimitive { + // (undocumented) + clone(): RuledSweep; + // (undocumented) + cloneContours(): CurveCollection[]; + // (undocumented) + cloneSweepContours(): SweepContour[]; + // (undocumented) + cloneTransformed(transform: Transform): RuledSweep; + // (undocumented) + constantVSection(vFraction: number): CurveCollection | undefined; + // (undocumented) + static create(contours: CurveCollection[], capped: boolean): RuledSweep | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + static mutatePartners(collectionA: CurveCollection, collectionB: CurveCollection, primitiveMutator: CurvePrimitiveMutator): CurveCollection | undefined; + // (undocumented) + sweepContoursRef(): SweepContour[]; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public +class Segment1d { + clone(): Segment1d; + static create(x0?: number, x1?: number, result?: Segment1d): Segment1d; + fractionToPoint(fraction: number): number; + isAlmostEqual(other: Segment1d): boolean; + readonly isExact01: boolean; + // (undocumented) + readonly isIn01: boolean; + reverseInPlace(): void; + set(x0: number, x1: number): void; + setFrom(other: Segment1d): void; + shift(dx: number): void; + // (undocumented) + x0: number; + // (undocumented) + x1: number; +} + +// @public (undocumented) +class SmallSystem { + // (undocumented) + static linearSystem2d(ux: number, vx: number, // first row of matrix + uy: number, vy: number, // second row of matrix + cx: number, cy: number, // right side + result: Vector2d): boolean; + static linearSystem3d(axx: number, axy: number, axz: number, // first row of matrix + ayx: number, ayy: number, ayz: number, // second row of matrix + azx: number, azy: number, azz: number, // second row of matrix + cx: number, cy: number, cz: number, // right side + result?: Vector3d): Vector3d | undefined; + static lineSegment2dXYTransverseIntersectionUnbounded(a0: Point2d, a1: Point2d, b0: Point2d, b1: Point2d, result: Vector2d): boolean; + static lineSegment3dClosestApproachUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, result: Vector2d): boolean; + static lineSegment3dHXYClosestPointUnbounded(hA0: Point4d, hA1: Point4d, spacePoint: Point4d): number | undefined; + static lineSegment3dHXYTransverseIntersectionUnbounded(hA0: Point4d, hA1: Point4d, hB0: Point4d, hB1: Point4d, result?: Vector2d): Vector2d | undefined; + static lineSegment3dXYClosestPointUnbounded(pointA0: Point3d, pointA1: Point3d, spacePoint: Point3d): number | undefined; + static lineSegment3dXYTransverseIntersectionUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, result: Vector2d): boolean; +} + +// @public (undocumented) +class SmoothTransformBetweenFrusta { + static create(cornerA: Point3d[], cornerB: Point3d[]): SmoothTransformBetweenFrusta | undefined; + // (undocumented) + fractionToWorldCorners(fraction: number, result?: Point3d[]): Point3d[]; + // (undocumented) + interpolateLocalCorners(fraction: number, result?: Point3d[]): Point3d[]; +} + +// @public +class SolidPrimitive extends GeometryQuery { + protected constructor(capped: boolean); + // (undocumented) + protected _capped: boolean; + capped: boolean; + abstract constantVSection(_vFraction: number): CurveCollection | undefined; + abstract getConstructiveFrame(): Transform | undefined; + readonly isClosedVolume: boolean; +} + +// @public +class Sphere extends SolidPrimitive, implements UVSurface { + // (undocumented) + clone(): Sphere; + cloneCenter(): Point3d; + cloneLatitudeSweep(): AngleSweep; + // (undocumented) + cloneLocalToWorld(): Transform; + // (undocumented) + cloneTransformed(transform: Transform): Sphere | undefined; + cloneVectorX(): Vector3d; + cloneVectorY(): Vector3d; + cloneVectorZ(): Vector3d; + // (undocumented) + constantVSection(vFraction: number): CurveCollection | undefined; + // (undocumented) + static createCenterRadius(center: Point3d, radius: number, latitudeSweep?: AngleSweep): Sphere; + static createDgnSphere(center: Point3d, vectorX: Vector3d, vectorZ: Vector3d, radiusXY: number, radiusZ: number, latitudeSweep: AngleSweep, capped: boolean): Sphere | undefined; + static createEllipsoid(localToWorld: Transform, latitudeSweep: AngleSweep, capped: boolean): Sphere | undefined; + static createFromAxesAndScales(center: Point3d, axes: undefined | Matrix3d, radiusX: number, radiusY: number, radiusZ: number, latitudeSweep: AngleSweep | undefined, capped: boolean): Sphere | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + readonly latitudeSweepFraction: number; + maxIsoParametricDistance(): Vector2d; + strokeConstantVSection(v: number, fixedStrokeCount: number | undefined, options?: StrokeOptions): LineString3d; + // (undocumented) + trueSphereRadius(): number | undefined; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; + uFractionToRadians(u: number): number; + uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d; + uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + vFractionToRadians(v: number): number; +} + +// @public +class SphereImplicit { + constructor(r: number); + // (undocumented) + evaluateDerivativesThetaPhi(theta: number, phi: number, dxdTheta: Vector3d, dxdPhi: Vector3d): void; + // (undocumented) + evaluateImplicitFunction(x: number, y: number, z: number): number; + // (undocumented) + evaluateImplicitFunctionXYZW(wx: number, wy: number, wz: number, w: number): number; + // (undocumented) + evaluateThetaPhi(thetaRadians: number, phiRadians: number): Point3d; + // (undocumented) + radius: number; + // (undocumented) + xyzToThetaPhiR: { + phi: number; + r: number; + theta: number; + valid: boolean; + } +} + +// @public (undocumented) +enum StandardViewIndex { + // (undocumented) + Back = 6, + // (undocumented) + Bottom = 2, + // (undocumented) + Front = 5, + // (undocumented) + Iso = 7, + // (undocumented) + Left = 3, + // (undocumented) + Right = 4, + // (undocumented) + RightIso = 8, + // (undocumented) + Top = 1 +} + +// @public +class StrokeOptions { + angleTol?: Angle; + // (undocumented) + applyAngleTol(minCount: number, sweepRadians: number, defaultStepRadians: number): number; + // (undocumented) + applyChordTol(minCount: number, radius: number, sweepRadians: number): number; + // (undocumented) + applyMaxEdgeLength(minCount: number, totalLength: number): number; + // (undocumented) + applyMinStrokesPerPrimitive(minCount: number): number; + // (undocumented) + applyTolerancesToArc(radius: number, sweepRadians?: number): number; + chordTol?: number; + // (undocumented) + static createForCurves(): StrokeOptions; + // (undocumented) + static createForFacets(): StrokeOptions; + // (undocumented) + defaultCircleStrokes: number; + // (undocumented) + readonly hasMaxEdgeLength: boolean; + maxEdgeLength?: number; + minStrokesPerPrimitive?: number; + // (undocumented) + needColors?: boolean; + needConvexFacets?: boolean; + // (undocumented) + needNormals: boolean; + // (undocumented) + needParams: boolean; + shouldTriangulate: boolean; +} + +// @public +class SweepContour { + // (undocumented) + axis: Ray3d | undefined; + buildFacets(_builder: PolyfaceBuilder, options: StrokeOptions | undefined): void; + // (undocumented) + clone(): SweepContour; + // (undocumented) + cloneTransformed(transform: Transform): SweepContour | undefined; + // (undocumented) + static createForLinearSweep(contour: CurveCollection, defaultNormal?: Vector3d): SweepContour | undefined; + // (undocumented) + static createForRotation(contour: CurveCollection, axis: Ray3d): SweepContour | undefined; + // (undocumented) + curves: CurveCollection; + emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform): void; + // (undocumented) + getCurves(): CurveCollection; + // (undocumented) + isAlmostEqual(other: any): boolean; + // (undocumented) + localToWorld: Transform; + purgeFacets(): void; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public (undocumented) +class TorusImplicit { + constructor(majorRadiusR: number, minorRadiusr: number); + // (undocumented) + boxSize(): number; + // (undocumented) + evaluateDerivativesThetaPhi(theta: number, phi: number, dxdTheta: Vector3d, dxdPhi: Vector3d): void; + // (undocumented) + evaluateImplicitFunctionPoint(xyz: Point3d): number; + // (undocumented) + evaluateImplicitFunctionXYZ(x: number, y: number, z: number): number; + // (undocumented) + evaluateImplicitFunctionXYZW(x: number, y: number, z: number, w: number): number; + // (undocumented) + evaluateThetaPhi(theta: number, phi: number): Point3d; + // (undocumented) + evaluateThetaPhiDistance(theta: number, phi: number, distance: number): Point3d; + // (undocumented) + implicitFunctionScale(): number; + // (undocumented) + majorRadius: number; + // (undocumented) + minorRadius: number; + xyzToThetaPhiDistance: { + distance: number; + phi: number; + rho: number; + safePhi: boolean; + theta: number; + } +} + +// @public +class TorusPipe extends SolidPrimitive, implements UVSurface, UVSurfaceIsoParametricDistance { + protected constructor(map: Transform, radiusA: number, radiusB: number, sweep: Angle, capped: boolean); + // (undocumented) + clone(): TorusPipe; + // (undocumented) + cloneCenter(): Point3d; + // (undocumented) + cloneTransformed(transform: Transform): TorusPipe | undefined; + // (undocumented) + cloneVectorX(): Vector3d; + // (undocumented) + cloneVectorY(): Vector3d; + // (undocumented) + constantUSection(uFraction: number): CurveCollection | undefined; + // (undocumented) + constantVSection(v: number): CurveCollection | undefined; + static createDgnTorusPipe(center: Point3d, vectorX: Vector3d, vectorY: Vector3d, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean): TorusPipe | undefined; + // (undocumented) + static createInFrame(frame: Transform, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean): TorusPipe | undefined; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + extendRange(range: Range3d, transform?: Transform): void; + getConstructiveFrame(): Transform | undefined; + // (undocumented) + getIsReversed(): boolean; + // (undocumented) + getMajorRadius(): number; + // (undocumented) + getMinorRadius(): number; + // (undocumented) + getSweepAngle(): Angle; + // (undocumented) + getThetaFraction(): number; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + readonly isClosedVolume: boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + maxIsoParametricDistance(): Vector2d; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; + uvFractionToPoint(u: number, v: number, result?: Point3d): Point3d; + uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; + vFractionToRadians(v: number): number; +} + +// @public +class Transform implements BeJSONFunctions { + clone(result?: Transform): Transform; + // (undocumented) + cloneRigid(axisOrder?: AxisOrder): Transform | undefined; + static createFixedPointAndMatrix(fixedPoint: Point3d, matrix: Matrix3d, result?: Transform): Transform; + static createIdentity(result?: Transform): Transform; + static createMatrixPickupPutdown(matrix: Matrix3d, pointA: Point3d, pointB: Point3d, result?: Transform): Transform; + static createOriginAndMatrix(origin: XYZ | undefined, matrix: Matrix3d | undefined, result?: Transform): Transform; + static createOriginAndMatrixColumns(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d, result?: Transform): Transform; + static createRefs(origin: XYZ, matrix: Matrix3d, result?: Transform): Transform; + static createRowValues(qxx: number, qxy: number, qxz: number, ax: number, qyx: number, qyy: number, qyz: number, ay: number, qzx: number, qzy: number, qzz: number, az: number, result?: Transform): Transform; + static createScaleAboutPoint(fixedPoint: Point3d, scale: number, result?: Transform): Transform; + static createTranslation(translation: XYZ, result?: Transform): Transform; + static createTranslationXYZ(x?: number, y?: number, z?: number, result?: Transform): Transform; + static createZero(result?: Transform): Transform; + // (undocumented) + freeze(): void; + // (undocumented) + static fromJSON(json?: TransformProps): Transform; + getOrigin(): Point3d; + getTranslation(): Vector3d; + static readonly identity: Transform; + static initFromRange(min: Point3d, max: Point3d, npcToGlobal?: Transform, globalToNpc?: Transform): void; + // (undocumented) + inverse(): Transform | undefined; + isAlmostEqual(other: Transform): boolean; + readonly isIdentity: boolean; + // (undocumented) + static matchArrayLengths(source: any[], dest: any[], constructionFunction: () => any): number; + readonly matrix: Matrix3d; + multiplyComponentXYZ(componentIndex: number, x: number, y: number, z: number): number; + multiplyComponentXYZW(componentIndex: number, x: number, y: number, z: number, w: number): number; + // (undocumented) + multiplyInversePoint3d(point: XYAndZ, result?: Point3d): Point3d | undefined; + multiplyInversePoint3dArray(source: Point3d[], result?: Point3d[]): Point3d[] | undefined; + multiplyInversePoint3dArrayInPlace(source: Point3d[]): boolean; + multiplyPoint2d(source: XAndY, result?: Point2d): Point2d; + multiplyPoint2dArray(source: Point2d[], result?: Point2d[]): Point2d[]; + multiplyPoint3d(point: XYAndZ, result?: Point3d): Point3d; + multiplyPoint3dArray(source: Point3d[], result?: Point3d[]): Point3d[]; + multiplyPoint3dArrayInPlace(points: Point3d[]): void; + multiplyRange(range: Range3d, result?: Range3d): Range3d; + multiplyTransformMatrix3d(other: Matrix3d, result?: Transform): Transform; + multiplyTransformTransform(other: Transform, result?: Transform): Transform; + multiplyTransposeXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; + multiplyVector(vector: Vector3d, result?: Vector3d): Vector3d; + multiplyVectorXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; + multiplyXYZ(x: number, y: number, z: number, result?: Point3d): Point3d; + multiplyXYZToFloat64Array(x: number, y: number, z: number, result?: Float64Array): Float64Array; + multiplyXYZW(x: number, y: number, z: number, w: number, result?: Point4d): Point4d; + multiplyXYZWToFloat64Array(x: number, y: number, z: number, w: number, result?: Float64Array): Float64Array; + readonly origin: XYZ; + // (undocumented) + setFrom(other: Transform): void; + // (undocumented) + setFromJSON(json?: TransformProps): void; + setIdentity(): void; + setMultiplyTransformTransform(transformA: Transform, transformB: Transform): void; + setOriginAndMatrixColumns(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d): void; + // (undocumented) + toJSON(): TransformProps; +} + +// @public +class TransitionConditionalProperties { + constructor(radius0: number | undefined, radius1: number | undefined, bearing0: Angle | undefined, bearing1: Angle | undefined, arcLength: number | undefined); + // (undocumented) + bearing0: Angle | undefined; + // (undocumented) + bearing1: Angle | undefined; + clone(): TransitionConditionalProperties; + // (undocumented) + curveLength: number | undefined; + isAlmostEqual(other: TransitionConditionalProperties): boolean; + numDefinedProperties(): number; + // (undocumented) + radius0: number | undefined; + // (undocumented) + radius1: number | undefined; + tryResolveAnySingleUnknown(): boolean; +} + +// WARNING: defaultSpiralType has incomplete type information +// @public (undocumented) +class TransitionSpiral3d extends CurvePrimitive { + constructor(spiralType: string | undefined, radius01: Segment1d, bearing01: AngleSweep, activeFractionInterval: Segment1d, localToWorld: Transform, arcLength: number, properties: TransitionConditionalProperties | undefined); + // (undocumented) + activeFractionInterval: Segment1d; + // (undocumented) + static averageCurvature(radiusLimits: Segment1d): number; + static averageCurvatureR0R1(r0: number, r1: number): number; + // (undocumented) + bearing01: AngleSweep; + // (undocumented) + clone(): TransitionSpiral3d; + // (undocumented) + cloneTransformed(transform: Transform): TransitionSpiral3d; + computeStrokeCountForOptions(options?: StrokeOptions): number; + static create(spiralType: string | undefined, radius0: number | undefined, radius1: number | undefined, bearing0: Angle | undefined, bearing1: Angle | undefined, arcLength: number | undefined, fractionInterval: undefined | Segment1d, localToWorld: Transform): TransitionSpiral3d | undefined; + static createRadiusRadiusBearingBearing(radius01: Segment1d, bearing01: AngleSweep, activeFractionInterval: Segment1d, localToWorld: Transform): TransitionSpiral3d; + // (undocumented) + static curvatureToRadius(curvature: number): number; + curveLength(): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void; + // (undocumented) + emitStrokes(dest: LineString3d, options?: StrokeOptions): void; + // (undocumented) + endPoint(): Point3d; + // (undocumented) + extendRange(rangeToExtend: Range3d, transform?: Transform): void; + fractionToBearingRadians(fraction: number): number; + fractionToCurvature(fraction: number): number; + fractionToFrenetFrame(fraction: number, result?: Transform): Transform; + // (undocumented) + fractionToPoint(fraction: number, result?: Point3d): Point3d; + fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined; + // (undocumented) + fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d; + getSpiralType(): string; + // (undocumented) + static initWorkSpace(): void; + // (undocumented) + isAlmostEqual(other: GeometryQuery): boolean; + // (undocumented) + isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean; + // (undocumented) + isSameGeometryClass(other: any): boolean; + // (undocumented) + localToWorld: Transform; + readonly originalProperties: TransitionConditionalProperties | undefined; + quickLength(): number; + // (undocumented) + radius01: Segment1d; + // (undocumented) + static radius0LengthSweepRadiansToRadius1(radius0: number, arcLength: number, sweepRadians: number): number; + // (undocumented) + static radius1LengthSweepRadiansToRadius0(radius1: number, arcLength: number, sweepRadians: number): number; + // (undocumented) + static radiusRadiusLengthToSweepRadians(radius0: number, radius1: number, arcLength: number): number; + // (undocumented) + static radiusRadiusSweepRadiansToArcLength(radius0: number, radius1: number, sweepRadians: number): number; + // (undocumented) + static radiusToCurvature(radius: number): number; + // (undocumented) + refreshComputedProperties(): void; + // (undocumented) + reverseInPlace(): void; + // (undocumented) + setFrom(other: TransitionSpiral3d): TransitionSpiral3d; + // (undocumented) + startPoint(): Point3d; + // (undocumented) + tryTransformInPlace(transform: Transform): boolean; +} + +// @public (undocumented) +class Triangulator { + static createTriangulatedGraphFromLoops(loops: GrowableXYZArray[] | XAndY[][]): HalfEdgeGraph | undefined; + static createTriangulatedGraphFromSingleLoop(data: XAndY[]): HalfEdgeGraph; + static flipTriangles(graph: HalfEdgeGraph): void; + triangulateAllPositiveAreaFaces(graph: HalfEdgeGraph): void; +} + +// @public (undocumented) +class TriDiagonalSystem { + constructor(n: number); + // (undocumented) + addToB(row: number, bb: number): void; + // (undocumented) + addToRow(row: number, left: number, diag: number, right: number): void; + // (undocumented) + copy(): TriDiagonalSystem; + // (undocumented) + defactor(): boolean; + // (undocumented) + factor(): boolean; + // (undocumented) + factorAndBackSubstitute(): boolean; + // (undocumented) + factorAndBackSubstitutePointArrays(vectorB: Point3d[], vectorX: Point3d[]): boolean; + // (undocumented) + flatten(): any; + // (undocumented) + flattenWithPoints(xyzB: Point3d[]): any; + // (undocumented) + getB(row: number): number; + // (undocumented) + getX(row: number): number; + // (undocumented) + multiplyAX(): boolean; + // (undocumented) + multiplyAXPoints(pointX: Point3d[], pointB: Point3d[]): boolean; + // (undocumented) + order(): number; + // (undocumented) + reset(): void; + // (undocumented) + setB(row: number, bb: number): void; + // (undocumented) + setRow(row: number, left: number, diag: number, right: number): void; + // (undocumented) + setX(row: number, xx: number): void; +} + +// WARNING: coeffientRelTol has incomplete type information +// @public (undocumented) +class TrigPolynomial { + // (undocumented) + static readonly C: Float64Array; + // (undocumented) + static readonly CC: Float64Array; + // (undocumented) + static readonly CCminusSS: Float64Array; + // (undocumented) + static readonly CW: Float64Array; + // (undocumented) + static readonly S: Float64Array; + // (undocumented) + static readonly SC: Float64Array; + // (undocumented) + static readonly SmallAngle: number; + // (undocumented) + static solveAngles(coff: Float64Array, nominalDegree: number, referenceCoefficient: number, radians: number[]): boolean; + // (undocumented) + static solveUnitCircleEllipseIntersection(cx: number, cy: number, ux: number, uy: number, vx: number, vy: number, ellipseRadians: number[], circleRadians: number[]): boolean; + // (undocumented) + static solveUnitCircleHomogeneousEllipseIntersection(cx: number, cy: number, cw: number, ux: number, uy: number, uw: number, vx: number, vy: number, vw: number, ellipseRadians: number[], circleRadians: number[]): boolean; + // (undocumented) + static solveUnitCircleImplicitQuadricIntersection(axx: number, axy: number, ayy: number, ax: number, ay: number, a1: number, radians: number[]): boolean; + // (undocumented) + static readonly SS: Float64Array; + // (undocumented) + static readonly SW: Float64Array; + // (undocumented) + static readonly W: Float64Array; + // (undocumented) + static readonly WW: Float64Array; +} + +// @public (undocumented) +interface TrigValues { + // (undocumented) + c: number; + // (undocumented) + radians: number; + // (undocumented) + s: number; +} + +// @public +class UnionOfConvexClipPlaneSets implements Clipper { + // (undocumented) + addConvexSet(toAdd: ConvexClipPlaneSet): void; + // (undocumented) + addOutsideZClipSets(invisible: boolean, zLow?: number, zHigh?: number): void; + // (undocumented) + announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean; + announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean; + appendIntervalsFromSegment(segment: LineSegment3d, intervals: Segment1d[]): void; + classifyPointContainment(points: Point3d[], onIsOutside: boolean): number; + // (undocumented) + clone(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; + // (undocumented) + readonly convexSets: ConvexClipPlaneSet[]; + // (undocumented) + static createConvexSets(convexSets: ConvexClipPlaneSet[], result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; + // (undocumented) + static createEmpty(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; + // (undocumented) + static fromJSON(json: any, result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets; + getRangeOfAlignedPlanes(transform?: Transform, result?: Range3d): Range3d | undefined; + // (undocumented) + getRayIntersection(point: Point3d, direction: Vector3d): number | undefined; + // (undocumented) + isAlmostEqual(other: UnionOfConvexClipPlaneSets): boolean; + isAnyPointInOrOnFromSegment(segment: LineSegment3d): boolean; + // (undocumented) + isPointInside(point: Point3d): boolean; + // (undocumented) + isPointOnOrInside(point: Point3d, tolerance: number): boolean; + // (undocumented) + isSphereInside(point: Point3d, radius: number): boolean; + // (undocumented) + multiplyPlanesByMatrix(matrix: Matrix4d): void; + polygonClip(input: Point3d[], output: Point3d[][]): void; + // (undocumented) + setInvisible(invisible: boolean): void; + // (undocumented) + testRayIntersect(point: Point3d, direction: Vector3d): boolean; + // (undocumented) + toJSON(): any; + // (undocumented) + transformInPlace(transform: Transform): void; +} + +// @public +class UnionRegion extends CurveCollection { + constructor(); + // (undocumented) + protected _children: Array; + // (undocumented) + announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void; + // (undocumented) + readonly children: Array; + // (undocumented) + cloneEmptyPeer(): UnionRegion; + // (undocumented) + cloneStroked(options?: StrokeOptions): UnionRegion; + // (undocumented) + static create(...data: Array): UnionRegion; + // (undocumented) + dgnBoundaryType(): number; + // (undocumented) + dispatchToGeometryHandler(handler: GeometryHandler): any; + // (undocumented) + getChild(i: number): Loop | ParityRegion | undefined; + // (undocumented) + isSameGeometryClass(other: GeometryQuery): boolean; + // (undocumented) + tryAddChild(child: AnyCurve): boolean; +} + +// @public +class UnivariateBezier extends BezierCoffs { + constructor(data: number | Float64Array | number[]); + addSquaredSquaredBezier(coffA: Float64Array, scale: number): boolean; + allocateOrder(order: number): void; + basisFunctions(u: number, result?: Float64Array): Float64Array; + clone(compressToMinimalAllocation?: boolean): UnivariateBezier; + static create(other: BezierCoffs): UnivariateBezier; + static createArraySubset(coffs: number[] | Float64Array, index0: number, order: number, result?: UnivariateBezier): UnivariateBezier; + static createCoffs(data: number | number[] | Float64Array): UnivariateBezier; + static createProduct(bezierA: BezierCoffs, bezierB: BezierCoffs): UnivariateBezier; + deflateLeft(): void; + deflateRight(): void; + deflateRoot(root: number): number; + // (undocumented) + static deflateRoots01(bezier: UnivariateBezier): number[] | undefined; + evaluate(u: number): number; + // (undocumented) + readonly order: number; + runNewton(startFraction: number, tolerance?: number): number | undefined; + sumBasisFunctionDerivatives(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array; + sumBasisFunctions(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array; +} + +// @public +enum UVSelect { + // (undocumented) + uDirection = 0, + // (undocumented) + VDirection = 1 +} + +// @public +interface UVSurface { + uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d; + uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors; +} + +// @public +interface UVSurfaceIsoParametricDistance { + maxIsoParametricDistance(): Vector2d; +} + +// @public +class UVSurfaceOps { + static createLinestringOnUVLine(surface: UVSurface, u0: number, v0: number, u1: number, v1: number, numEdge: number, saveUV?: boolean, saveFraction?: boolean): LineString3d; +} + +// @public +class Vector2d extends XY, implements BeJSONFunctions { + constructor(x?: number, y?: number); + angleTo(vectorB: XAndY): Angle; + // (undocumented) + clone(): Vector2d; + // (undocumented) + static create(x?: number, y?: number, result?: Vector2d): Vector2d; + static createFrom(data: XAndY | Float64Array, result?: Vector2d): Vector2d; + static createOffsetBisector(unitPerpA: Vector2d, unitPerpB: Vector2d, offset: number): Vector2d | undefined; + // (undocumented) + static createPolar(r: number, theta: Angle): Vector2d; + // (undocumented) + static createStartEnd(point0: XAndY, point1: XAndY, result?: Vector2d): Vector2d; + // (undocumented) + static createZero(result?: Vector2d): Vector2d; + crossProduct(vectorB: XAndY): number; + dotProduct(vectorB: XAndY): number; + dotProductStartEnd(pointA: XAndY, pointB: XAndY): number; + fractionOfProjectionToVector(target: Vector2d, defaultFraction?: number): number; + // (undocumented) + static fromJSON(json?: XYProps): Vector2d; + interpolate(fraction: number, right: Vector2d, result?: Vector2d): Vector2d; + // (undocumented) + isParallelTo(other: Vector2d, oppositeIsParallel?: boolean): boolean; + // (undocumented) + isPerpendicularTo(other: Vector2d): boolean; + minus(vector: XAndY, result?: Vector2d): Vector2d; + negate(result?: Vector2d): Vector2d; + // (undocumented) + normalize(result?: Vector2d): Vector2d | undefined; + plus(vector: XAndY, result?: Vector2d): Vector2d; + plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Vector2d): Vector2d; + plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, vectorC: XAndY, scalarC: number, result?: Vector2d): Vector2d; + plusScaled(vector: XAndY, scaleFactor: number, result?: Vector2d): Vector2d; + // (undocumented) + rotate90CCWXY(result?: Vector2d): Vector2d; + // (undocumented) + rotate90CWXY(result?: Vector2d): Vector2d; + // (undocumented) + rotateXY(angle: Angle, result?: Vector2d): Vector2d; + // (undocumented) + safeDivideOrNull(denominator: number, result?: Vector2d): Vector2d | undefined; + scale(scale: number, result?: Vector2d): Vector2d; + scaleToLength(length: number, result?: Vector2d): Vector2d; + // (undocumented) + unitPerpendicularXY(result?: Vector2d): Vector2d; + // (undocumented) + static unitX(scale?: number): Vector2d; + // (undocumented) + static unitY(scale?: number): Vector2d; +} + +// @public +class Vector3d extends XYZ { + constructor(x?: number, y?: number, z?: number); + addCrossProductToTargetsInPlace(ax: number, ay: number, az: number, bx: number, by: number, bz: number, cx: number, cy: number, cz: number): void; + // (undocumented) + angleTo(vectorB: Vector3d): Angle; + // (undocumented) + angleToXY(vectorB: Vector3d): Angle; + clone(result?: Vector3d): Vector3d; + static create(x?: number, y?: number, z?: number, result?: Vector3d): Vector3d; + static createAdd2Scaled(vectorA: XYAndZ, scaleA: number, vectorB: XYAndZ, scaleB: number, result?: Vector3d): Vector3d; + static createAdd2ScaledXYZ(ax: number, ay: number, az: number, scaleA: number, bx: number, by: number, bz: number, scaleB: number, result?: Vector3d): Vector3d; + // (undocumented) + static createAdd3Scaled(vectorA: XYAndZ, scaleA: number, vectorB: XYAndZ, scaleB: number, vectorC: XYAndZ, scaleC: number, result?: Vector3d): Vector3d; + static createCrossProduct(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d; + static createCrossProductToPoints(origin: XYAndZ, pointA: XYAndZ, pointB: XYAndZ, result?: Vector3d): Vector3d; + static createFrom(data: XYAndZ | XAndY | Float64Array, result?: Vector3d): Vector3d; + static createPolar(r: number, theta: Angle, z?: number): Vector3d; + static createRotateVectorAroundVector(vector: Vector3d, axis: Vector3d, angle?: Angle): Vector3d | undefined; + static createSpherical(r: number, theta: Angle, phi: Angle): Vector3d; + static createStartEnd(start: XYAndZ, end: XYAndZ, result?: Vector3d): Vector3d; + // (undocumented) + static createStartEndXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, result?: Vector3d): Vector3d; + static createZero(result?: Vector3d): Vector3d; + // (undocumented) + crossProduct(vectorB: Vector3d, result?: Vector3d): Vector3d; + crossProductMagnitude(vectorB: XYAndZ): number; + crossProductMagnitudeSquared(vectorB: XYAndZ): number; + crossProductStartEnd(pointA: Point3d, pointB: Point3d, result?: Vector3d): Vector3d; + crossProductStartEndXY(pointA: Point3d, pointB: Point3d): number; + crossProductXY(vectorB: Vector3d): number; + crossProductXYZ(x: number, y: number, z: number, result?: Vector3d): Vector3d; + // (undocumented) + dotProduct(vectorB: XYAndZ): number; + dotProductStart3dEnd4d(pointA: Point3d, pointB: Point4d): number; + // (undocumented) + dotProductStartEnd(pointA: XYAndZ, pointB: XYAndZ): number; + dotProductStartEndXYZ(pointA: Point3d, x: number, y: number, z: number): number; + dotProductStartEndXYZW(pointA: Point3d, x: number, y: number, z: number, w: number): number; + dotProductXY(vectorB: Vector3d): number; + dotProductXYZ(x: number, y: number, z?: number): number; + fractionOfProjectionToVector(target: Vector3d, defaultFraction?: number): number; + // (undocumented) + static fromJSON(json?: XYZProps): Vector3d; + // (undocumented) + interpolate(fraction: number, right: Vector3d, result?: Vector3d): Vector3d; + isParallelTo(other: Vector3d, oppositeIsParallel?: boolean, returnValueIfAnInputIsZeroLength?: boolean): boolean; + isPerpendicularTo(other: Vector3d, returnValueIfAnInputIsZeroLength?: boolean): boolean; + // (undocumented) + minus(vector: XYAndZ, result?: Vector3d): Vector3d; + negate(result?: Vector3d): Vector3d; + normalize(result?: Vector3d): Vector3d | undefined; + normalizeInPlace(): boolean; + // (undocumented) + normalizeWithDefault(x: number, y: number, z: number, result?: Vector3d): Vector3d; + normalizeWithLength: { + mag: number; + v: Vector3d | undefined; + } + // (undocumented) + planarAngleTo(vector: Vector3d, planeNormal: Vector3d): Angle; + // (undocumented) + planarRadiansTo(vector: Vector3d, planeNormal: Vector3d): number; + // (undocumented) + plus(vector: XYAndZ, result?: Vector3d): Vector3d; + plus2Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYAndZ, scalarB: number, result?: Vector3d): Vector3d; + plus3Scaled(vectorA: XYAndZ, scalarA: number, vectorB: XYAndZ, scalarB: number, vectorC: XYAndZ, scalarC: number, result?: Vector3d): Vector3d; + plusScaled(vector: XYAndZ, scaleFactor: number, result?: Vector3d): Vector3d; + // (undocumented) + rotate90Around(axis: Vector3d, result?: Vector3d): Vector3d | undefined; + rotate90CCWXY(result?: Vector3d): Vector3d; + // (undocumented) + rotate90Towards(target: Vector3d, result?: Vector3d): Vector3d | undefined; + // (undocumented) + rotateXY(angle: Angle, result?: Vector3d): Vector3d; + safeDivideOrNull(denominator: number, result?: Vector3d): Vector3d | undefined; + scale(scale: number, result?: Vector3d): Vector3d; + // (undocumented) + scaleToLength(length: number, result?: Vector3d): Vector3d; + setStartEnd(point0: XYAndZ, point1: XYAndZ): void; + // (undocumented) + signedAngleTo(vector1: Vector3d, vectorW: Vector3d): Angle; + // (undocumented) + signedRadiansTo(vector1: Vector3d, vectorW: Vector3d): number; + // (undocumented) + sizedCrossProduct(vectorB: Vector3d, productLength: number, result?: Vector3d): Vector3d | undefined; + tripleProduct(vectorB: Vector3d, vectorC: Vector3d): number; + // (undocumented) + tryNormalizeInPlace(smallestMagnitude?: number): boolean; + // (undocumented) + unitCrossProduct(vectorB: Vector3d, result?: Vector3d): Vector3d | undefined; + // (undocumented) + unitCrossProductWithDefault(vectorB: Vector3d, x: number, y: number, z: number, result?: Vector3d): Vector3d; + // (undocumented) + unitPerpendicularXY(result?: Vector3d): Vector3d; + static unitX(scale?: number): Vector3d; + static unitY(scale?: number): Vector3d; + static unitZ(scale?: number): Vector3d; +} + +// @public (undocumented) +class Vector3dArray { + // (undocumented) + static cloneVector3dArray(data: XYAndZ[]): Vector3d[]; + // (undocumented) + static isAlmostEqual(dataA: undefined | Vector3d[], dataB: undefined | Vector3d[]): boolean; +} + +// @public (undocumented) +enum WeightStyle { + UnWeighted = 0, + WeightsAlreadyAppliedToCoordinates = 1, + WeightsSeparateFromCoordinates = 2 +} + +// @public (undocumented) +interface WritableLowAndHighXY { + // (undocumented) + high: WritableXAndY; + // (undocumented) + low: WritableXAndY; +} + +// @public (undocumented) +interface WritableLowAndHighXYZ { + // (undocumented) + high: WritableXYAndZ; + // (undocumented) + low: WritableXYAndZ; +} + +// @public (undocumented) +interface WritableXAndY { + // (undocumented) + x: number; + // (undocumented) + y: number; +} + +// @public (undocumented) +interface WritableXYAndZ extends XAndY, WriteableHasZ { +} + +// @public (undocumented) +interface WriteableHasZ { + // (undocumented) + z: number; +} + +// @public +class XY implements XAndY { + protected constructor(x?: number, y?: number); + static crossProductToPoints(origin: XAndY, targetA: XAndY, targetB: XAndY): number; + distance(other: XAndY): number; + distanceSquared(other: XAndY): number; + // (undocumented) + freeze(): void; + isAlmostEqual(other: XAndY, tol?: number): boolean; + // (undocumented) + isAlmostEqualMetric(other: XAndY): boolean; + isAlmostEqualXY(x: number, y: number, tol?: number): boolean; + // (undocumented) + readonly isAlmostZero: boolean; + // (undocumented) + isExactEqual(other: XAndY): boolean; + magnitude(): number; + magnitudeSquared(): number; + maxAbs(): number; + maxDiff(other: XAndY): number; + set(x?: number, y?: number): void; + setFrom(other?: XAndY): void; + setFromJSON(json?: XYProps): void; + setZero(): void; + toJSON(): XYProps; + // (undocumented) + toJSONXY(): XYProps; + unitVectorTo(target: XAndY, result?: Vector2d): Vector2d | undefined; + vectorTo(other: XAndY, result?: Vector2d): Vector2d; + x: number; + y: number; +} + +// @public +class XYZ implements XYAndZ { + protected constructor(x?: number, y?: number, z?: number); + addInPlace(other: XYAndZ): void; + addScaledInPlace(other: XYAndZ, scale: number): void; + at(index: number): number; + cloneAsPoint3d(): Point3d; + distance(other: XYAndZ): number; + distanceSquared(other: XYAndZ): number; + distanceSquaredXY(other: XAndY): number; + distanceXY(other: XAndY): number; + freeze(): void; + static hasZ(arg: any): arg is HasZ; + indexOfMaxAbs(): number; + isAlmostEqual(other: XYAndZ, tol?: number): boolean; + isAlmostEqualMetric(other: XYAndZ): boolean; + isAlmostEqualXY(other: XAndY, tol?: number): boolean; + isAlmostEqualXYZ(x: number, y: number, z: number, tol?: number): boolean; + readonly isAlmostZero: boolean; + isExactEqual(other: XYAndZ): boolean; + static isXAndY(arg: any): arg is XAndY; + static isXYAndZ(arg: any): arg is XYAndZ; + magnitude(): number; + magnitudeSquared(): number; + magnitudeSquaredXY(): number; + magnitudeXY(): number; + maxAbs(): number; + maxDiff(other: XYAndZ): number; + scaledVectorTo(other: XYAndZ, scale: number, result?: Vector3d): Vector3d; + scaleInPlace(scale: number): void; + set(x?: number, y?: number, z?: number): void; + setFrom(other: Float64Array | XAndY | XYAndZ): void; + setFromJSON(json?: XYZProps): void; + setFromPoint3d(other: Point3d): void; + setFromVector3d(other: Vector3d): void; + setZero(): void; + toFloat64Array(): Float64Array; + toJSON(): XYZProps; + // (undocumented) + toJSONXYZ(): XYZProps; + unitVectorTo(target: XYAndZ, result?: Vector3d): Vector3d | undefined; + vectorTo(other: XYAndZ, result?: Vector3d): Vector3d; + // (undocumented) + x: number; + // (undocumented) + y: number; + // (undocumented) + z: number; +} + +// @public +class YawPitchRollAngles { + constructor(yaw?: Angle, pitch?: Angle, roll?: Angle); + clone(): YawPitchRollAngles; + static createDegrees(yawDegrees: number, pitchDegrees: number, rollDegrees: number): YawPitchRollAngles; + static createFromMatrix3d(matrix: Matrix3d, result?: YawPitchRollAngles): YawPitchRollAngles | undefined; + static createRadians(yawRadians: number, pitchRadians: number, rollRadians: number): YawPitchRollAngles; + freeze(): void; + // (undocumented) + static fromJSON(json?: YawPitchRollProps): YawPitchRollAngles; + isAlmostEqual(other: YawPitchRollAngles): boolean; + // (undocumented) + isIdentity(allowPeriodShift?: boolean): boolean; + maxAbsDegrees(): number; + // (undocumented) + maxAbsRadians(): number; + maxDiffRadians(other: YawPitchRollAngles): number; + // (undocumented) + pitch: Angle; + // (undocumented) + roll: Angle; + setFrom(other: YawPitchRollAngles): void; + // (undocumented) + setFromJSON(json?: YawPitchRollProps): void; + sumSquaredDegrees(): number; + sumSquaredRadians(): number; + toJSON(): YawPitchRollProps; + toMatrix3d(result?: Matrix3d): Matrix3d; + static tryFromTransform: { + angles: YawPitchRollAngles | undefined; + origin: Point3d; + } + // (undocumented) + yaw: Angle; +} + +// @public +interface YawPitchRollProps { + // (undocumented) + pitch?: AngleProps; + // (undocumented) + roll?: AngleProps; + // (undocumented) + yaw?: AngleProps; +} + +// WARNING: Unsupported export: OptionalGrowableFloat64Array +// WARNING: Unsupported export: BlockComparisonFunction +// WARNING: Unsupported export: HasZ +// WARNING: Unsupported export: XAndY +// WARNING: Unsupported export: XYAndZ +// WARNING: Unsupported export: LowAndHighXY +// WARNING: Unsupported export: LowAndHighXYZ +// WARNING: Unsupported export: XYZProps +// WARNING: Unsupported export: XYProps +// WARNING: Unsupported export: Matrix3dProps +// WARNING: Unsupported export: TransformProps +// WARNING: Unsupported export: Range3dProps +// WARNING: Unsupported export: Range2dProps +// WARNING: Unsupported export: Range1dProps +// WARNING: Unsupported export: AngleProps +// WARNING: Unsupported export: AngleSweepProps +// WARNING: Unsupported export: Point4dProps +// WARNING: Unsupported export: Matrix4dProps +// WARNING: Unsupported export: AnyCurve +// WARNING: Unsupported export: AnyRegion +// WARNING: Unsupported export: AnnounceNumberNumberCurvePrimitive +// WARNING: Unsupported export: AnnounceNumberNumber +// WARNING: Unsupported export: AnnounceCurvePrimitive +// WARNING: Unsupported export: CurvePrimitiveMutator +// WARNING: Unsupported export: NodeFunction +// WARNING: Unsupported export: NodeToNumberFunction +// WARNING: Unsupported export: HalfEdgeToBooleanFunction +// WARNING: Unsupported export: HalfEdgeAndMaskToBooleanFunction +// WARNING: Unsupported export: GraphNodeFunction +// (No @packagedocumentation comment for this package) diff --git a/common/api/imodeljs-backend.api.ts b/common/api/imodeljs-backend.api.ts index 5656b4d..8cef078 100644 --- a/common/api/imodeljs-backend.api.ts +++ b/common/api/imodeljs-backend.api.ts @@ -1,2786 +1,2845 @@ -// @public -enum AccessMode { - // (undocumented) - Exclusive = 2, - // (undocumented) - Shared = 1 -} - -// @public -class AnnotationElement2d extends GraphicalElement2d { - constructor(props: GeometricElement2dProps, iModel: IModelDb); -} - -// @public -interface AppActivityMonitor { - isIdle: boolean; -} - -// @public -class AutoPush { - constructor(iModel: IModelDb, params: AutoPushParams, accessTokenManager: IAccessTokenManager, activityMonitor?: AppActivityMonitor); - autoSchedule: boolean; - cancel(): void; - readonly durationOfLastPushMillis: number; - readonly endOfLastPushMillis: number; - event: BeEvent; - readonly iModel: IModelDb; - readonly lastError: any | undefined; - // (undocumented) - reserveCodes(): Promise; - // (undocumented) - scheduleNextAutoPushIfNecessary(): void; - scheduleNextPush(intervalSeconds?: number): void; - readonly state: AutoPushState; - static validateAutoPushParams(params: any): void; -} - -// @public -enum AutoPushEventType { - // (undocumented) - PushCancelled = 3, - // (undocumented) - PushFailed = 2, - // (undocumented) - PushFinished = 1, - // (undocumented) - PushStarted = 0 -} - -// @public -interface AutoPushParams { - activityContext: ActivityLoggingContext; - autoSchedule: boolean; - pushIntervalSecondsMax: number; - pushIntervalSecondsMin: number; -} - -// @public -enum AutoPushState { - // (undocumented) - NotRunning = 0, - // (undocumented) - Pushing = 2, - // (undocumented) - Scheduled = 1 -} - -// @public -class AuxCoordSystem extends DefinitionElement, implements AuxCoordSystemProps { - constructor(props: AuxCoordSystemProps, iModel: IModelDb); - // (undocumented) - description?: string; - // (undocumented) - type: number; -} - -// @public -class AuxCoordSystem2d extends AuxCoordSystem, implements AuxCoordSystem2dProps { - constructor(props: AuxCoordSystem2dProps, iModel: IModelDb); - // (undocumented) - angle: number; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - origin?: Point2d; -} - -// @public -class AuxCoordSystem3d extends AuxCoordSystem, implements AuxCoordSystem3dProps { - constructor(props: AuxCoordSystem3dProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - origin?: Point3d; - // (undocumented) - pitch: number; - // (undocumented) - roll: number; - // (undocumented) - yaw: number; -} - -// @public -class AuxCoordSystemSpatial extends AuxCoordSystem3d { - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; -} - -// @public -class BackendActivityMonitor implements AppActivityMonitor { - constructor(idleIntervalSeconds?: number); - // (undocumented) - idleIntervalSeconds: number; - // (undocumented) - readonly isIdle: boolean; -} - -// @public -class BisCore extends Schema { - static registerSchema(): void; -} - -// @public -class BriefcaseEntry { - briefcaseId: number; - changeSetId: string; - changeSetIndex?: number; - conflictError?: ConflictingCodesError; - readonly currentChangeSetId: string; - readonly currentChangeSetIndex: number; - fileId?: string; - // (undocumented) - getDebugInfo(): any; - getKey(): string; - readonly hasReversedChanges: boolean; - imodelClientContext?: string; - // (undocumented) - iModelDb: IModelDb | undefined; - iModelId: GuidString; - isOpen: boolean; - isStandalone: boolean; - // WARNING: The type "IModelJsNative.DgnDb" needs to be exported by the package (e.g. added to index.ts) - nativeDb: IModelJsNative.DgnDb; - readonly onBeforeClose: BeEvent<() => void>; - readonly onBeforeVersionUpdate: BeEvent<() => void>; - readonly onChangesetApplied: BeEvent<() => void>; - openParams?: OpenParams; - pathname: string; - reversedChangeSetId?: string; - reversedChangeSetIndex?: number; - userId?: string; -} - -// @public -class BriefcaseId { - constructor(value?: number); - // (undocumented) - static readonly Illegal: number; - // (undocumented) - readonly isMaster: boolean; - // (undocumented) - readonly isStandaloneId: boolean; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - static readonly Master: number; - // (undocumented) - static readonly Standalone: number; - // (undocumented) - toString(): string; - // (undocumented) - readonly value: number; -} - -// @public -class BriefcaseManager { - static applyStandaloneChangeSets(briefcase: BriefcaseEntry, changeSetTokens: ChangeSetToken[], processOption: ChangeSetApplyOption): ChangeSetStatus; - // (undocumented) - static readonly cacheDir: string; - static close(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, keepBriefcase: KeepBriefcase): Promise; - static closeStandalone(briefcase: BriefcaseEntry): void; - static readonly connectClient: ConnectClient; - static create(actx: ActivityLoggingContext, accessToken: AccessToken, contextId: string, iModelName: string, args: CreateIModelProps): Promise; - static createStandalone(fileName: string, args: CreateIModelProps): BriefcaseEntry; - static createStandaloneChangeSet(briefcase: BriefcaseEntry): ChangeSetToken; - // (undocumented) - static deleteAllBriefcases(actx: ActivityLoggingContext, accessToken: AccessToken, iModelId: GuidString): Promise; - static deleteClosed(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; - static downloadChangeSets(actx: ActivityLoggingContext, accessToken: AccessToken, iModelId: GuidString, fromChangeSetId: string, toChangeSetId: string): Promise; - static dumpChangeSet(briefcase: BriefcaseEntry, changeSetToken: ChangeSetToken): void; - static findBriefcaseByToken(iModelToken: IModelToken): BriefcaseEntry | undefined; - // (undocumented) - static getChangeCachePathName(iModelId: GuidString): string; - // (undocumented) - static getChangedElementsPathName(iModelId: GuidString): string; - // (undocumented) - static getChangeSetsPath(iModelId: GuidString): string; - static imodelClient: IModelClient; - static open(actx: ActivityLoggingContext, accessToken: AccessToken, contextId: string, iModelId: GuidString, openParams: OpenParams, version: IModelVersion): Promise; - static openStandalone(pathname: string, openMode: OpenMode, enableTransactions: boolean): BriefcaseEntry; - static pullAndMergeChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, mergeToVersion?: IModelVersion): Promise; - static purgeCache(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; - static pushChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, description: string, relinquishCodesLocks?: boolean): Promise; - // (undocumented) - static reinstateChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, reinstateToVersion?: IModelVersion): Promise; - // (undocumented) - static reverseChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, reverseToVersion: IModelVersion): Promise; -} - -// @public -class CachedECSqlStatement { - constructor(stmt: ECSqlStatement); - // (undocumented) - statement: ECSqlStatement; - // (undocumented) - useCount: number; -} - -// @public -class CachedSqliteStatement { - constructor(stmt: SqliteStatement); - // (undocumented) - statement: SqliteStatement; - // (undocumented) - useCount: number; -} - -// @public (undocumented) -class Callout extends DetailingSymbol, implements CalloutProps { - constructor(props: CalloutProps, iModel: IModelDb); -} - -// @public -class Category extends DefinitionElement, implements CategoryProps { - constructor(props: CategoryProps, iModel: IModelDb); - myDefaultSubCategoryId(): Id64String; - // (undocumented) - rank: Rank; - setDefaultAppearance(props: SubCategoryAppearance.Props): void; - // (undocumented) - toJSON(): CategoryProps; -} - -// @public -class CategoryOwnsSubCategories extends ElementOwnsChildElements { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class CategorySelector extends DefinitionElement, implements CategorySelectorProps { - constructor(props: CategorySelectorProps, iModel: IModelDb); - categories: string[]; - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, categories: Id64Array): CategorySelector; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, categories: Id64Array): Id64String; - // (undocumented) - toJSON(): CategorySelectorProps; -} - -// @public -class ChangedElementsDb implements IDisposable { - constructor(); - closeDb(): void; - static createDb(briefcase: IModelDb, pathName: string): ChangedElementsDb; - // (undocumented) - dispose(): void; - getChangedElements(startChangesetId: string, endChangesetId: string): ChangedElements | undefined; - readonly isOpen: boolean; - isProcessed(changesetId: string): boolean; - // WARNING: The type "IModelJsNative.ChangedElementsECDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly nativeDb: IModelJsNative.ChangedElementsECDb; - static openDb(pathName: string, openMode?: ECDbOpenMode): ChangedElementsDb; - processChangesets(accessToken: AccessToken, briefcase: IModelDb, rulesetId: string, startChangesetId: string, endChangesetId: string, filterSpatial?: boolean): Promise; -} - -// @public -class ChangeSetToken { - constructor(id: string, parentId: string, index: number, pathname: string, containsSchemaChanges: boolean, pushDate?: string | undefined); - // (undocumented) - containsSchemaChanges: boolean; - // (undocumented) - id: string; - // (undocumented) - index: number; - // (undocumented) - parentId: string; - // (undocumented) - pathname: string; - // (undocumented) - pushDate?: string | undefined; -} - -// @public -interface ChangeSummary { - // (undocumented) - changeSet: { - description: string; - parentWsgId: GuidString; - pushDate: string; - userCreated: GuidString; - wsgId: GuidString; - } - // (undocumented) - id: Id64String; -} - -// @public (undocumented) -class ChangeSummaryExtractContext { - constructor(accessToken: AccessToken, iModel: IModelDb); - // (undocumented) - readonly accessToken: AccessToken; - // (undocumented) - readonly iModel: IModelDb; - // (undocumented) - readonly iModelId: GuidString; -} - -// @public -interface ChangeSummaryExtractOptions { - currentVersionOnly?: boolean; - startVersion?: IModelVersion; -} - -// @public -class ChangeSummaryManager { - static attachChangeCache(iModel: IModelDb): void; - static buildPropertyValueChangesECSql(iModel: IModelDb, instanceChangeInfo: { - id: Id64String; - summaryId: Id64String; - changedInstance: { - id: Id64String; - className: string; - }; - }, changedValueState: ChangedValueState, changedPropertyNames?: string[]): string; - static detachChangeCache(iModel: IModelDb): void; - // (undocumented) - static downloadChangeSets(actx: ActivityLoggingContext, ctx: ChangeSummaryExtractContext, startChangeSetId: GuidString, endChangeSetId: GuidString): Promise; - static extractChangeSummaries(actx: ActivityLoggingContext, accessToken: AccessToken, iModel: IModelDb, options?: ChangeSummaryExtractOptions): Promise; - static getChangedPropertyValueNames(iModel: IModelDb, instanceChangeId: Id64String): string[]; - static isChangeCacheAttached(iModel: IModelDb): boolean; - static queryChangeSummary(iModel: IModelDb, changeSummaryId: Id64String): ChangeSummary; - static queryInstanceChange(iModel: IModelDb, instanceChangeId: Id64String): InstanceChange; -} - -// @public -class ClassRegistry { - static findRegisteredClass(classFullName: string): typeof Entity | undefined; - static getClass(fullName: string, iModel: IModelDb): typeof Entity; - // (undocumented) - static getRegisteredSchema(domainName: string): Schema | undefined; - // (undocumented) - static getSchemaBaseClass(): typeof Schema; - // (undocumented) - static isNotFoundError(err: any): boolean; - // (undocumented) - static makeMetaDataNotFoundError(className: string): IModelError; - // (undocumented) - static register(entityClass: typeof Entity, schema: Schema): void; - static registerModule(moduleObj: any, schema: Schema): void; - // (undocumented) - static registerSchema(schema: Schema): void; -} - -// @public -class CodeSpecs { - constructor(imodel: IModelDb); - getById(codeSpecId: Id64String): CodeSpec; - getByName(name: string): CodeSpec; - hasId(codeSpecId: Id64String): boolean; - hasName(name: string): boolean; - insert(codeSpec: CodeSpec): Id64String; - load(id: Id64String): CodeSpec; - queryId(name: string): Id64String; -} - -// @public (undocumented) -class ConcurrencyControl { -} - -// @public -class DefinitionElement extends InformationContentElement, implements DefinitionElementProps { - constructor(props: ElementProps, iModel: IModelDb); - isPrivate: boolean; - // (undocumented) - toJSON(): DefinitionElementProps; -} - -// @public -class DefinitionModel extends InformationModel { - static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; -} - -// @public -class DefinitionPartition extends InformationPartitionElement { -} - -// @public (undocumented) -class DetailCallout extends Callout { - constructor(props: CalloutProps, iModel: IModelDb); -} - -// @public (undocumented) -class DetailingSymbol extends GraphicalElement2d { - constructor(props: GeometricElement2dProps, iModel: IModelDb); -} - -// @public -class DictionaryModel extends DefinitionModel { -} - -// @public -class DisplayStyle extends DefinitionElement, implements DisplayStyleProps { - protected constructor(props: DisplayStyleProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - readonly settings: DisplayStyleSettings; -} - -// @public -class DisplayStyle2d extends DisplayStyle { - constructor(props: DisplayStyleProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string): DisplayStyle2d; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string): Id64String; - // (undocumented) - readonly settings: DisplayStyleSettings; -} - -// @public -class DisplayStyle3d extends DisplayStyle { - constructor(props: DisplayStyleProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, options?: DisplayStyleCreationOptions): DisplayStyle3d; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, options?: DisplayStyleCreationOptions): Id64String; - // (undocumented) - readonly settings: DisplayStyle3dSettings; -} - -// @public -interface DisplayStyleCreationOptions { - // (undocumented) - analysisStyle?: AnalysisStyleProps; - // (undocumented) - backgroundColor?: ColorDef; - // (undocumented) - contextRealityModels?: ContextRealityModelProps[]; - // (undocumented) - scheduleScript?: object; - // (undocumented) - viewFlags?: ViewFlags; -} - -// @public -class Document extends InformationContentElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class DocumentCarrier extends InformationCarrierElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class DocumentListModel extends InformationModel { - static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; -} - -// @public -class DocumentPartition extends InformationPartitionElement { -} - -// @public -class Drawing extends Document { - constructor(props: ElementProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - static insert(iModelDb: IModelDb, documentListModelId: Id64String, name: string): Id64String; -} - -// @public -class DrawingCategory extends Category { - constructor(opts: ElementProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string): DrawingCategory; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - static getCodeSpecName(): string; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, defaultAppearance: SubCategoryAppearance.Props): Id64String; - static queryCategoryIdByName(iModel: IModelDb, scopeModelId: Id64String, categoryName: string): Id64String | undefined; -} - -// @public -class DrawingGraphic extends GraphicalElement2d { - constructor(props: GeometricElement2dProps, iModel: IModelDb); -} - -// @public -class DrawingGraphicRepresentsElement extends ElementRefersToElements { -} - -// @public -class DrawingGraphicRepresentsFunctionalElement extends DrawingGraphicRepresentsElement { -} - -// @public -class DrawingModel extends GraphicalModel2d { -} - -// @public -class DrawingViewDefinition extends ViewDefinition2d { - constructor(props: ViewDefinition2dProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, baseModelId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range2d): DrawingViewDefinition; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, baseModelId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range2d): Id64String; -} - -// @public -class DriverBundleElement extends InformationContentElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class ECDb implements IDisposable { - constructor(); - abandonChanges(): void; - closeDb(): void; - createDb(pathName: string): void; - dispose(): void; - importSchema(pathName: string): void; - readonly isOpen: boolean; - // WARNING: The type "IModelJsNative.ECDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly nativeDb: IModelJsNative.ECDb; - openDb(pathName: string, openMode?: ECDbOpenMode): void; - prepareSqliteStatement(sql: string): SqliteStatement; - prepareStatement(ecsql: string): ECSqlStatement; - saveChanges(changeSetName?: string): void; - withPreparedSqliteStatement(sql: string, cb: (stmt: SqliteStatement) => T): T; - withPreparedStatement(ecsql: string, cb: (stmt: ECSqlStatement) => T): T; -} - -// @public -enum ECDbOpenMode { - FileUpgrade = 2, - // (undocumented) - Readonly = 0, - // (undocumented) - Readwrite = 1 -} - -// @public -interface ECEnumValue { - // (undocumented) - key: string; - // (undocumented) - name: string; - // (undocumented) - schema: string; - // (undocumented) - value: number | string; -} - -// @public (undocumented) -class ECSchemaXmlContext { - constructor(); - // (undocumented) - addSchemaPath(searchPath: string): void; - // (undocumented) - readSchemaFromXmlFile(filePath: string): any; - // WARNING: The type "IModelJsNative.ECSchemaXmlContext.SchemaLocaterCallback" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setSchemaLocater(locater: IModelJsNative.ECSchemaXmlContext.SchemaLocaterCallback): void; -} - -// @public -class ECSqlBinder { - // WARNING: The type "IModelJsNative.ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) - constructor(binder: IModelJsNative.ECSqlBinder); - addArrayElement(): ECSqlBinder; - bind(val: any): void; - bindArray(val: any[]): void; - bindBlob(blob: string | Uint8Array | ArrayBuffer | SharedArrayBuffer): void; - bindBoolean(val: boolean): void; - bindDateTime(isoDateTimeString: string): void; - bindDouble(val: number): void; - bindGuid(val: GuidString): void; - bindId(val: Id64String): void; - bindInteger(val: number | string): void; - bindMember(memberName: string): ECSqlBinder; - bindNavigation(val: NavigationBindingValue): void; - bindNull(): void; - bindPoint2d(val: XAndY): void; - bindPoint3d(val: XYAndZ): void; - bindRange3d(val: LowAndHighXYZ): void; - bindString(val: string): void; - bindStruct(val: object): void; -} - -// @public -interface ECSqlColumnInfo { - getAccessString(): string; - getPropertyName(): string; - getRootClassAlias(): string; - getRootClassName(): string; - getRootClassTableSpace(): string; - getType(): ECSqlValueType; - isEnum(): boolean; - isGeneratedProperty(): boolean; - isSystemProperty(): boolean; -} - -// @public -class ECSqlInsertResult { - constructor(status: DbResult, id?: string | undefined); - // (undocumented) - id?: string | undefined; - // (undocumented) - status: DbResult; -} - -// @public -class ECSqlStatement implements IterableIterator, IDisposable { - // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores - [Symbol.iterator](): IterableIterator; - bindArray(parameter: number | string, val: any[]): void; - bindBlob(parameter: number | string, blob: string | Uint8Array | ArrayBuffer | SharedArrayBuffer): void; - bindBoolean(parameter: number | string, val: boolean): void; - bindDateTime(parameter: number | string, isoDateTimeString: string): void; - bindDouble(parameter: number | string, val: number): void; - bindGuid(parameter: number | string, val: GuidString): void; - bindId(parameter: number | string, val: Id64String): void; - bindInteger(parameter: number | string, val: number | string): void; - bindNavigation(parameter: number | string, val: NavigationBindingValue): void; - bindNull(parameter: number | string): void; - bindPoint2d(parameter: number | string, val: XAndY): void; - bindPoint3d(parameter: number | string, val: XYAndZ): void; - bindRange3d(parameter: number | string, val: LowAndHighXYZ): void; - bindString(parameter: number | string, val: string): void; - bindStruct(parameter: number | string, val: object): void; - bindValue(parameter: number | string, val: any): void; - bindValues(values: any[] | object): void; - clearBindings(): void; - dispose(): void; - getBinder(parameter: string | number): ECSqlBinder; - getColumnCount(): number; - getRow(): any; - getValue(columnIx: number): ECSqlValue; - readonly isPrepared: boolean; - readonly isShared: boolean; - next(): IteratorResult; - // WARNING: The type "IModelJsNative.DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "IModelJsNative.ECDb" needs to be exported by the package (e.g. added to index.ts) - prepare(db: IModelJsNative.DgnDb | IModelJsNative.ECDb, ecsql: string): void; - reset(): void; - setIsShared(b: boolean): void; - step(): DbResult; - stepForInsert(): ECSqlInsertResult; -} - -// @public -class ECSqlStatementCache { - constructor(maxCount?: number); - // (undocumented) - add(str: string, stmt: ECSqlStatement): void; - // (undocumented) - clear(): void; - // (undocumented) - find(str: string): CachedECSqlStatement | undefined; - // (undocumented) - getCount(): number; - // (undocumented) - readonly maxCount: number; - // (undocumented) - release(stmt: ECSqlStatement): void; - // (undocumented) - removeUnusedStatementsIfNecessary(): void; -} - -// @public -class ECSqlValue { - // WARNING: The type "IModelJsNative.ECSqlValue" needs to be exported by the package (e.g. added to index.ts) - constructor(val: IModelJsNative.ECSqlValue); - readonly columnInfo: ECSqlColumnInfo; - getArray(): any[]; - getArrayIterator(): ECSqlValueIterator; - getBlob(): Uint8Array; - getBoolean(): boolean; - getClassNameForClassId(): string; - getDateTime(): string; - getDouble(): number; - getEnum(): ECEnumValue[] | undefined; - getGeometry(): any; - getGuid(): GuidString; - getId(): Id64String; - getInteger(): number; - getNavigation(): NavigationValue; - getString(): string; - getStruct(): any; - getStructIterator(): ECSqlValueIterator; - getXAndY(): XAndY; - getXYAndZ(): XYAndZ; - readonly isNull: boolean; - readonly value: any; -} - -// @public -class ECSqlValueIterator implements IterableIterator { - // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores - // (undocumented) - [Symbol.iterator](): IterableIterator; - // WARNING: The type "IModelJsNative.ECSqlValueIterator" needs to be exported by the package (e.g. added to index.ts) - constructor(it: IModelJsNative.ECSqlValueIterator); - // (undocumented) - next(): IteratorResult; -} - -// @public -class Element extends Entity, implements ElementProps { - constructor(props: ElementProps, iModel: IModelDb); - buildConcurrencyControlRequest(opcode: DbOpcode): void; - readonly code: Code; - delete(): void; - federationGuid?: GuidString; - getClassMetaData(): EntityMetaData | undefined; - getDisplayLabel(): string; - getJsonProperty(nameSpace: string): any; - getToolTipMessage(): string[]; - getUserProperties(namespace: string): any; - insert(): string; - readonly jsonProperties: { - [key: string]: any; - } - readonly model: Id64String; - // (undocumented) - static onAllInputsHandled(_id: Id64String, _iModel: IModelDb): void; - // (undocumented) - static onBeforeOutputsHandled(_id: Id64String, _iModel: IModelDb): void; - // (undocumented) - static onDelete(_props: ElementProps, _iModel: IModelDb): IModelStatus; - // (undocumented) - static onDeleted(_props: ElementProps, _iModel: IModelDb): void; - // (undocumented) - static onInsert(_props: ElementProps, _iModel: IModelDb): IModelStatus; - // (undocumented) - static onInserted(_props: ElementProps, _iModel: IModelDb): void; - // (undocumented) - static onUpdate(_props: ElementProps, _iModel: IModelDb): IModelStatus; - // (undocumented) - static onUpdated(_props: ElementProps, _iModel: IModelDb): void; - parent?: RelatedElement; - removeUserProperties(nameSpace: string): void; - // (undocumented) - setJsonProperty(nameSpace: string, value: any): void; - setUserProperties(nameSpace: string, value: any): void; - toJSON(): ElementProps; - update(): void; - userLabel?: string; -} - -// @public -class ElementAspect extends Entity, implements ElementAspectProps { - constructor(props: ElementAspectProps, iModel: IModelDb); - // (undocumented) - element: RelatedElement; - // (undocumented) - toJSON(): ElementAspectProps; -} - -// @public -class ElementDrivesElement extends Relationship, implements ElementDrivesElementProps { - constructor(props: ElementDrivesElementProps, iModel: IModelDb); - // (undocumented) - static create(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, priority?: number): T; - // (undocumented) - priority: number; - // (undocumented) - status: number; -} - -// @public -interface ElementDrivesElementProps extends RelationshipProps { - // (undocumented) - priority: number; - // (undocumented) - status: number; -} - -// @public -class ElementEncapsulatesElements extends ElementOwnsChildElements { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class ElementGroupsMembers extends ElementRefersToElements { - constructor(props: ElementGroupsMembersProps, iModel: IModelDb); - // (undocumented) - static create(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, memberPriority?: number): T; - // (undocumented) - memberPriority: number; -} - -// @public -interface ElementGroupsMembersProps extends RelationshipProps { - // (undocumented) - memberPriority: number; -} - -// @public -class ElementMultiAspect extends ElementAspect { -} - -// @public -class ElementOwnsChildElements extends RelatedElement { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public (undocumented) -class ElementPropertyFormatter { - constructor(iModel: IModelDb); - formatProperties(elem: Element): any; -} - -// @public -class ElementRefersToElements extends Relationship { - static create(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): T; - static insert(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): Id64String; -} - -// @public -class ElementUniqueAspect extends ElementAspect { -} - -// @public (undocumented) -class ElevationCallout extends Callout { - constructor(props: CalloutProps, iModel: IModelDb); -} - -// @public -class EmbeddedFileLink extends LinkElement { -} - -// @public -class Entity implements EntityProps { - constructor(props: EntityProps, iModel: IModelDb); - // (undocumented) - [propName: string]: any; - buildConcurrencyControlRequest(_opcode: DbOpcode): void; - static readonly classFullName: string; - readonly className: string; - clone(): this; - forEachProperty(func: PropertyCallback, includeCustom?: boolean): void; - id: Id64String; - iModel: IModelDb; - static schema: Schema; - readonly schemaName: string; - // (undocumented) - toJSON(): EntityProps; -} - -// @public -enum ExclusiveAccessOption { - CreateNewBriefcase = 1, - TryReuseOpenBriefcase = 2 -} - -// @public (undocumented) -class Functional extends Schema { - // (undocumented) - static importSchema(activityLoggingContext: ActivityLoggingContext, iModelDb: IModelDb, accessToken?: AccessToken): Promise; - // (undocumented) - static registerSchema(): void; -} - -// @public -class FunctionalBreakdownElement extends FunctionalElement { - constructor(props: FunctionalElementProps, iModel: IModelDb); -} - -// @public -class FunctionalComponentElement extends FunctionalElement { - constructor(props: FunctionalElementProps, iModel: IModelDb); -} - -// @public (undocumented) -class FunctionalComposite extends FunctionalBreakdownElement { - constructor(props: FunctionalElementProps, iModel: IModelDb); -} - -// @public -class FunctionalElement extends RoleElement, implements FunctionalElementProps { - constructor(props: FunctionalElementProps, iModel: IModelDb); -} - -// @public -class FunctionalElementIsOfType extends RelatedElement { - constructor(id: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class FunctionalModel extends RoleModel { - constructor(props: ModelProps, iModel: IModelDb); - static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; -} - -// @public -class FunctionalPartition extends InformationPartitionElement { - constructor(props: InformationPartitionElementProps, iModel: IModelDb); -} - -// @public -class FunctionalType extends TypeDefinitionElement { - constructor(props: TypeDefinitionElementProps, iModel: IModelDb); -} - -// @public (undocumented) -class Generic extends Schema { - // (undocumented) - static registerSchema(): void; -} - -// @public -class GeometricElement extends Element, implements GeometricElementProps { - constructor(props: GeometricElementProps, iModel: IModelDb); - // (undocumented) - calculateRange3d(): AxisAlignedBox3d; - category: Id64String; - geom?: GeometryStreamProps; - getPlacementTransform(): Transform; - is2d(): this is GeometricElement2d; - is3d(): this is GeometricElement3d; - toJSON(): GeometricElementProps; -} - -// @public -class GeometricElement2d extends GeometricElement, implements GeometricElement2dProps { - constructor(props: GeometricElement2dProps, iModel: IModelDb); - // (undocumented) - placement: Placement2d; - // (undocumented) - toJSON(): GeometricElement2dProps; - // (undocumented) - typeDefinition?: TypeDefinition; -} - -// @public -class GeometricElement3d extends GeometricElement, implements GeometricElement3dProps { - constructor(props: GeometricElement3dProps, iModel: IModelDb); - // (undocumented) - placement: Placement3d; - // (undocumented) - toJSON(): GeometricElement3dProps; - // (undocumented) - typeDefinition?: TypeDefinition; -} - -// @public -class GeometricModel extends Model { - queryExtents(): AxisAlignedBox3d; -} - -// @public -class GeometricModel2d extends GeometricModel, implements GeometricModel2dProps { - // (undocumented) - globalOrigin?: Point2d; -} - -// @public -class GeometricModel3d extends GeometricModel { -} - -// @public -class GeometryPart extends DefinitionElement, implements GeometryPartProps { - constructor(props: GeometryPartProps, iModel: IModelDb); - // (undocumented) - bbox: ElementAlignedBox3d; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - geom?: GeometryStreamProps; - toJSON(): GeometryPartProps; -} - -// @public (undocumented) -class Graphic3d extends GraphicalElement3d { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class GraphicalElement2d extends GeometricElement2d { - constructor(props: GeometricElement2dProps, iModel: IModelDb); -} - -// @public -class GraphicalElement2dIsOfType extends RelatedElement { - constructor(id: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class GraphicalElement3d extends GeometricElement3d { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class GraphicalModel2d extends GeometricModel2d { -} - -// @public -class GraphicalType2d extends TypeDefinitionElement { - constructor(props: ElementProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; -} - -// @public (undocumented) -class Group extends GroupInformationElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class GroupInformationElement extends InformationReferenceElement { -} - -// @public -class GroupInformationModel extends InformationModel { -} - -// @public -class GroupInformationPartition extends InformationPartitionElement { -} - -// @public (undocumented) -class GroupModel extends GroupInformationModel { - constructor(props: ModelProps, iModel: IModelDb); -} - -// @public (undocumented) -class IModelDb { -} - -// @public -class IModelHost { - static readonly appAssetsDir: string | undefined; - // (undocumented) - static backendVersion: string; - // (undocumented) - static configuration?: IModelHostConfiguration; - // (undocumented) - static loadNative(region: number, dir?: string): void; - static readonly onAfterStartup: BeEvent<() => void>; - static readonly onBeforeShutdown: BeEvent<() => void>; - // (undocumented) - static readonly platform: typeof IModelJsNative; - static shutdown(): void; - static startup(configuration?: IModelHostConfiguration): void; -} - -// @public -class IModelHostConfiguration { - appAssetsDir?: string; - briefcaseCacheDir: string; - imodelClient?: IModelClient; - nativePlatform?: any; -} - -// @public (undocumented) -class IModelImporter { - constructor(sourceDb: IModelDb, targetDb: IModelDb); - // (undocumented) - protected _excludedCodeSpecIds: Set; - // (undocumented) - protected _excludedCodeSpecNames: Set; - // (undocumented) - protected _excludedElementClassNames: Set; - // (undocumented) - protected _excludedElementIds: Set; - // (undocumented) - addCodeSpecId(sourceId: Id64String, targetId: Id64String): void; - // (undocumented) - addElementId(sourceId: Id64String, targetId: Id64String): void; - // (undocumented) - dispose(): void; - // (undocumented) - excludeCodeSpec(codeSpecName: string): void; - // (undocumented) - excludeElementClass(classFullName: string): void; - // (undocumented) - excludeElementId(elementId: Id64String): void; - // (undocumented) - excludeSubject(subjectPath: string): void; - // (undocumented) - findCodeSpecId(sourceId: Id64String): Id64String; - // (undocumented) - findElementId(sourceId: Id64String): Id64String; - // (undocumented) - import(): void; - // (undocumented) - importCodeSpec(sourceId: Id64String): Id64String; - // (undocumented) - importCodeSpecs(): void; - // (undocumented) - importElement(sourceElementId: Id64String): Id64String; - // (undocumented) - importFonts(): void; - // (undocumented) - importModel(sourceModeledElementId: Id64String): void; - // (undocumented) - importModelContents(modelId: Id64String): void; - // (undocumented) - importModels(modeledElementClass: string): void; - // (undocumented) - importRelationships(): void; - // (undocumented) - static resolveSubjectId(iModelDb: IModelDb, subjectPath: string): Id64String | undefined; -} - -// @public -class IModelJsExpressServer { - // WARNING: The type "ExpressApp" needs to be exported by the package (e.g. added to index.ts) - constructor(app: ExpressApp, protocol: WebAppRpcProtocol); - // WARNING: The type "ExpressApp" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected _app: ExpressApp; - // (undocumented) - protected _configureHeaders(): void; - // (undocumented) - protected _configureMiddleware(): void; - // (undocumented) - protected _configureRoutes(): void; - // WARNING: The type "HttpServer" needs to be exported by the package (e.g. added to index.ts) - initialize(port: number | string): Promise; -} - -// @public -class IModelJsFs { - static appendFileSync(path: string, str: string): void; - static copySync(src: string, dest: string, opts?: any): void; - static existsSync(path: string): boolean; - static lstatSync(path: string): IModelJsFsStats | undefined; - static mkdirSync(path: string): void; - static readdirSync(path: string): string[]; - // (undocumented) - static readFileSync(path: string): string | Buffer; - static removeSync(path: string): void; - static rmdirSync(path: string): void; - static unlinkSync(path: string): void; - static writeFileSync(path: string, str: string, wflag?: string): void; -} - -// @public -class IModelJsFsStats { - constructor(size: number, atimeMs: number, mtimeMs: number, birthtimeMs: number, isDirectory: boolean, isFile: boolean, isSocket: boolean, isSymbolicLink: boolean, isReadOnly: boolean); - // (undocumented) - atimeMs: number; - // (undocumented) - birthtimeMs: number; - // (undocumented) - isDirectory: boolean; - // (undocumented) - isFile: boolean; - // (undocumented) - isReadOnly: boolean; - // (undocumented) - isSocket: boolean; - // (undocumented) - isSymbolicLink: boolean; - // (undocumented) - mtimeMs: number; - // (undocumented) - size: number; -} - -// WARNING: Unsupported export: version -// WARNING: Unsupported export: logger -// WARNING: Unsupported export: TxnIdString -// @public -module IModelJsNative { - interface BriefcaseManagerOnConflictPolicy { - deleteVsUpdate: number; - updateVsDelete: number; - updateVsUpdate: number; - } - - // (undocumented) - class BriefcaseManagerResourcesRequest { - // (undocumented) - isEmpty(): boolean; - // (undocumented) - reset(): void; - // (undocumented) - toJSON(): string; - } - - // (undocumented) - class ChangedElementsECDb implements IDisposable { - constructor(); - // (undocumented) - closeDb(): void; - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createDb(db: DgnDb, dbName: string): DbResult; - // (undocumented) - dispose(): void; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getChangedElements(startChangesetId: string, endChangesetId: string): ErrorStatusOrResult; - // (undocumented) - isOpen(): boolean; - // (undocumented) - isProcessed(changesetId: string): boolean; - // (undocumented) - openDb(dbName: string, mode: OpenMode, upgradeProfiles?: boolean): DbResult; - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - processChangesets(db: DgnDb, changesets: string, rulesetId: string, filterSpatial: boolean): DbResult; - } - - class DgnDb { - constructor(); - // (undocumented) - abandonChanges(): DbResult; - // (undocumented) - abandonCreateChangeSet(): void; - // (undocumented) - addPendingChangeSet(changeSetId: string): DbResult; - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - appendBriefcaseManagerResourcesRequest(reqOut: BriefcaseManagerResourcesRequest, reqIn: BriefcaseManagerResourcesRequest): void; - // (undocumented) - applyChangeSets(changeSets: string, processOptions: ChangeSetApplyOption): ChangeSetStatus; - // (undocumented) - attachChangeCache(changeCachePath: string): DbResult; - // (undocumented) - beginMultiTxnOperation(): DbResult; - // (undocumented) - briefcaseManagerEndBulkOperation(): RepositoryStatus; - // (undocumented) - briefcaseManagerStartBulkOperation(): RepositoryStatus; - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - buildBriefcaseManagerResourcesRequestForElement(req: BriefcaseManagerResourcesRequest, elemId: string, opcode: DbOpcode): RepositoryStatus; - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - buildBriefcaseManagerResourcesRequestForLinkTableRelationship(req: BriefcaseManagerResourcesRequest, relKey: string, opcode: DbOpcode): RepositoryStatus; - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - buildBriefcaseManagerResourcesRequestForModel(req: BriefcaseManagerResourcesRequest, modelId: string, opcode: DbOpcode): RepositoryStatus; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - cancelTo(txnId: TxnIdString): IModelStatus; - // (undocumented) - closeIModel(): void; - // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createChangeCache(changeCacheFile: ECDb, changeCachePath: string): DbResult; - // (undocumented) - createIModel(accessToken: string, appVersion: string, projectId: GuidString, fileName: string, props: string): DbResult; - // (undocumented) - createStandaloneIModel(fileName: string, props: string): DbResult; - // (undocumented) - deleteElement(elemIdJson: string): IModelStatus; - // (undocumented) - deleteElementAspect(aspectIdJson: string): IModelStatus; - // (undocumented) - deleteLinkTableRelationship(props: string): DbResult; - // (undocumented) - deleteModel(modelIdJson: string): IModelStatus; - // (undocumented) - detachChangeCache(): number; - // (undocumented) - dumpChangeSet(changeSet: string): void; - // (undocumented) - embedFont(fontProps: string): string; - // (undocumented) - enableTxnTesting(): void; - // (undocumented) - endMultiTxnOperation(): DbResult; - // (undocumented) - executeTest(testName: string, params: string): string; - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - extractBriefcaseManagerResourcesRequest(reqOut: BriefcaseManagerResourcesRequest, reqIn: BriefcaseManagerResourcesRequest, locks: boolean, codes: boolean): void; - // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - extractBulkResourcesRequest(req: BriefcaseManagerResourcesRequest, locks: boolean, codes: boolean): void; - // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - extractChangeSummary(changeCacheFile: ECDb, changesetFilePath: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - extractCodes(): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - extractCodesFromFile(changeSets: string): ErrorStatusOrResult; - // (undocumented) - finishCreateChangeSet(): ChangeSetStatus; - // (undocumented) - static getAssetsDir(): string; - // (undocumented) - getBriefcaseId(): number; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getCurrentTxnId(): TxnIdString; - // (undocumented) - getDbGuid(): GuidString; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getECClassMetaData(schema: string, className: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getElement(opts: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getElementPropertiesForDisplay(id: string): ErrorStatusOrResult; - // (undocumented) - getGeoCoordinatesFromIModelCoordinates(points: string): string; - // (undocumented) - getIModelCoordinatesFromGeoCoordinates(points: string): string; - // (undocumented) - getIModelProps(): string; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getModel(opts: string): ErrorStatusOrResult; - // (undocumented) - getMultiTxnOperationDepth(): number; - // (undocumented) - getParentChangeSetId(): string; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getPendingChangeSets(): ErrorStatusOrResult; - // (undocumented) - getRedoString(): string; - // (undocumented) - getReversedChangeSetId(): string | undefined; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getSchema(name: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getSchemaItem(schemaName: string, itemName: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getTileContent(treeId: string, tileId: string, callback: (result: ErrorStatusOrResult) => void): void; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getTileTree(id: string, callback: (result: ErrorStatusOrResult) => void): void; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getTxnDescription(txnId: TxnIdString): string; - // (undocumented) - getUndoString(): string; - // (undocumented) - hasFatalTxnError(): boolean; - // (undocumented) - hasUnsavedChanges(): boolean; - // (undocumented) - importFunctionalSchema(): DbResult; - // (undocumented) - importSchema(schemaPathname: string): DbResult; - // (undocumented) - inBulkOperation(): boolean; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - insertCodeSpec(name: string, specType: number, scopeReq: number): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - insertElement(elemProps: string): ErrorStatusOrResult; - // (undocumented) - insertElementAspect(aspectProps: string): IModelStatus; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - insertLinkTableRelationship(props: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - insertModel(modelProps: string): ErrorStatusOrResult; - // (undocumented) - isChangeCacheAttached(): boolean; - // (undocumented) - isOpen(): boolean; - // (undocumented) - isRedoPossible(): boolean; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - isTxnIdValid(txnId: TxnIdString): boolean; - // (undocumented) - isUndoPossible(): boolean; - // (undocumented) - logTxnError(fatal: boolean): void; - // (undocumented) - openIModel(accessToken: string, appVersion: string, projectId: GuidString, dbName: string, mode: OpenMode): DbResult; - // (undocumented) - openIModelFile(dbName: string, mode: OpenMode): DbResult; - // (undocumented) - queryFileProperty(props: string, wantString: boolean): string | Uint8Array | undefined; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - queryFirstTxnId(): TxnIdString; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - queryModelExtents(options: string): ErrorStatusOrResult; - // (undocumented) - queryNextAvailableFileProperty(props: string): number; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - queryNextTxnId(txnId: TxnIdString): TxnIdString; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - queryPreviousTxnId(txnId: TxnIdString): TxnIdString; - // (undocumented) - readFontMap(): string; - // (undocumented) - reinstateTxn(): IModelStatus; - // (undocumented) - removePendingChangeSet(changeSetId: string): DbResult; - // (undocumented) - reverseAll(): IModelStatus; - // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - reverseTo(txnId: TxnIdString): IModelStatus; - // (undocumented) - reverseTxns(numOperations: number): IModelStatus; - // (undocumented) - saveChanges(description?: string): DbResult; - // (undocumented) - saveFileProperty(props: string, strValue: string | undefined, blobVal: Uint8Array | undefined): number; - // (undocumented) - setAsMaster(guid?: GuidString): DbResult; - // (undocumented) - setBriefcaseId(idValue: number): DbResult; - // WARNING: The type "BriefcaseManagerOnConflictPolicy" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setBriefcaseManagerOptimisticConcurrencyControlPolicy(conflictPolicy: BriefcaseManagerOnConflictPolicy): RepositoryStatus; - // (undocumented) - setBriefcaseManagerPessimisticConcurrencyControlPolicy(): RepositoryStatus; - // (undocumented) - setDbGuid(guid: GuidString): DbResult; - // (undocumented) - setIModelDb(iModelDb?: IModelDb): void; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - startCreateChangeSet(): ErrorStatusOrResult; - // (undocumented) - updateElement(elemProps: string): IModelStatus; - // (undocumented) - updateElementAspect(aspectProps: string): IModelStatus; - // (undocumented) - updateIModelProps(props: string): void; - // (undocumented) - updateLinkTableRelationship(props: string): DbResult; - // (undocumented) - updateModel(modelProps: string): IModelStatus; - // (undocumented) - updateProjectExtents(newExtentsJson: string): void; - } - - // (undocumented) - class DisableNativeAssertions implements IDisposable { - constructor(); - // (undocumented) - dispose(): void; - } - - // (undocumented) - class ECDb implements IDisposable { - constructor(); - // (undocumented) - abandonChanges(): DbResult; - // (undocumented) - closeDb(): void; - // (undocumented) - createDb(dbName: string): DbResult; - // (undocumented) - dispose(): void; - // (undocumented) - importSchema(schemaPathName: string): DbResult; - // (undocumented) - isOpen(): boolean; - // (undocumented) - openDb(dbName: string, mode: OpenMode, upgradeProfiles?: boolean): DbResult; - // (undocumented) - saveChanges(changesetName?: string): DbResult; - } - - // (undocumented) - class ECPresentationManager implements IDisposable { - constructor(); - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addRuleset(serializedRuleset: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - clearRulesets(): ErrorStatusOrResult; - // (undocumented) - dispose(): void; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getRulesets(rulesetId: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getRulesetVariableValue(rulesetId: string, variableId: string, type: string): ErrorStatusOrResult; - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - handleRequest(db: DgnDb, options: string, callback: (result: ErrorStatusOrResult) => void): void; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - removeRuleset(rulesetId: string, hash: string): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setRulesetVariableValue(rulesetId: string, variableId: string, type: string, value: any): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setupLocaleDirectories(directories: string[]): ErrorStatusOrResult; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setupRulesetDirectories(directories: string[]): ErrorStatusOrResult; - } - - // (undocumented) - enum ECPresentationStatus { - // (undocumented) - Error = 1, - // (undocumented) - InvalidArgument = 2, - // (undocumented) - Success = 0 - } - - // (undocumented) - class ECSchemaXmlContext { - constructor(); - // (undocumented) - addSchemaPath(path: string): void; - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readSchemaFromXmlFile(filePath: string): ErrorStatusOrResult; - // WARNING: The type "ECSchemaXmlContext.SchemaLocaterCallback" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setSchemaLocater(locater: ECSchemaXmlContext.SchemaLocaterCallback): void; - } - - // (undocumented) - class ECSqlBinder { - constructor(); - // WARNING: The type "ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addArrayElement(): ECSqlBinder; - // (undocumented) - bindBlob(base64String: string | Uint8Array | ArrayBuffer | SharedArrayBuffer): DbResult; - // (undocumented) - bindBoolean(val: boolean): DbResult; - // (undocumented) - bindDateTime(isoString: string): DbResult; - // (undocumented) - bindDouble(val: number): DbResult; - // (undocumented) - bindGuid(guidStr: GuidString): DbResult; - // (undocumented) - bindId(hexStr: Id64String): DbResult; - // (undocumented) - bindInteger(val: number | string): DbResult; - // WARNING: The type "ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - bindMember(memberName: string): ECSqlBinder; - // (undocumented) - bindNavigation(navIdHexStr: Id64String, relClassName?: string, relClassTableSpace?: string): DbResult; - // (undocumented) - bindNull(): DbResult; - // (undocumented) - bindPoint2d(x: number, y: number): DbResult; - // (undocumented) - bindPoint3d(x: number, y: number, z: number): DbResult; - // (undocumented) - bindString(val: string): DbResult; - } - - // (undocumented) - class ECSqlColumnInfo { - constructor(); - // (undocumented) - getAccessString(): string; - // (undocumented) - getPropertyName(): string; - // (undocumented) - getRootClassAlias(): string; - // (undocumented) - getRootClassName(): string; - // (undocumented) - getRootClassTableSpace(): string; - // (undocumented) - getType(): number; - // (undocumented) - isEnum(): boolean; - // (undocumented) - isGeneratedProperty(): boolean; - // (undocumented) - isSystemProperty(): boolean; - } - - // (undocumented) - class ECSqlStatement implements IDisposable { - constructor(); - // (undocumented) - clearBindings(): DbResult; - // (undocumented) - dispose(): void; - // WARNING: The type "ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getBinder(param: number | string): ECSqlBinder; - // (undocumented) - getColumnCount(): number; - // WARNING: The type "ECSqlValue" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getValue(columnIndex: number): ECSqlValue; - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - prepare(db: DgnDb | ECDb, ecsql: string): StatusCodeWithMessage; - // (undocumented) - reset(): DbResult; - // (undocumented) - step(): DbResult; - // (undocumented) - stepForInsert: { - id: string; - status: DbResult; - } - } - - // (undocumented) - class ECSqlValue { - constructor(); - // WARNING: The type "ECSqlValueIterator" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getArrayIterator(): ECSqlValueIterator; - // (undocumented) - getBlob(): Uint8Array; - // (undocumented) - getBoolean(): boolean; - // (undocumented) - getClassNameForClassId(): string; - // WARNING: The type "ECSqlColumnInfo" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getColumnInfo(): ECSqlColumnInfo; - // (undocumented) - getDateTime(): string; - // (undocumented) - getDouble(): number; - // (undocumented) - getEnum(): Array<{ - schema: string; - name: string; - key: string; - value: number | string; - }> | undefined; - // (undocumented) - getGeometry(): string; - // (undocumented) - getGuid(): GuidString; - // (undocumented) - getId(): Id64String; - // (undocumented) - getInt(): number; - // (undocumented) - getInt64(): number; - // (undocumented) - getNavigation: { - id: Id64String; - relClassName?: string; - } - // (undocumented) - getPoint2d: { - x: number; - y: number; - } - // (undocumented) - getPoint3d: { - x: number; - y: number; - z: number; - } - // (undocumented) - getString(): string; - // WARNING: The type "ECSqlValueIterator" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getStructIterator(): ECSqlValueIterator; - // (undocumented) - isNull(): boolean; - } - - // (undocumented) - class ECSqlValueIterator { - constructor(); - // WARNING: The type "ECSqlValue" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getCurrent(): ECSqlValue; - // (undocumented) - moveNext(): boolean; - } - - interface ErrorStatusOrResult { - error?: StatusCodeWithMessage; - result?: ResultType; - } - - // (undocumented) - class ImportContext implements IDisposable { - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - constructor(sourceDb: DgnDb, targetDb: DgnDb); - // (undocumented) - addCodeSpecId(sourceId: Id64String, targetId: Id64String): BentleyStatus; - // (undocumented) - addElementId(sourceId: Id64String, targetId: Id64String): BentleyStatus; - // (undocumented) - cloneElement(sourceId: Id64String): ElementProps; - // (undocumented) - dispose(): void; - // (undocumented) - findCodeSpecId(sourceId: Id64String): Id64String; - // (undocumented) - findElementId(sourceId: Id64String): Id64String; - // (undocumented) - importCodeSpec(sourceId: Id64String): Id64String; - // (undocumented) - importFont(sourceId: number): number; - } - - // (undocumented) - function initializeRegion(region: number): void; - - // (undocumented) - class SnapRequest { - constructor(); - // (undocumented) - cancelSnap(): void; - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - doSnap(db: DgnDb, request: any, callback: (result: ErrorStatusOrResult) => void): void; - } - - // (undocumented) - class SqliteStatement implements IDisposable { - constructor(); - // (undocumented) - bindBlob(param: number | string, val: Uint8Array | ArrayBuffer | SharedArrayBuffer): DbResult; - // (undocumented) - bindDouble(param: number | string, val: number): DbResult; - // (undocumented) - bindGuid(param: number | string, guidStr: GuidString): DbResult; - // (undocumented) - bindId(param: number | string, hexStr: Id64String): DbResult; - // (undocumented) - bindInteger(param: number | string, val: number | string): DbResult; - // (undocumented) - bindNull(param: number | string): DbResult; - // (undocumented) - bindString(param: number | string, val: string): DbResult; - // (undocumented) - clearBindings(): DbResult; - // (undocumented) - dispose(): void; - // (undocumented) - getColumnCount(): number; - // (undocumented) - getColumnName(columnIndex: number): string; - // (undocumented) - getColumnType(columnIndex: number): number; - // (undocumented) - getValueBlob(columnIndex: number): Uint8Array; - // (undocumented) - getValueDouble(columnIndex: number): number; - // (undocumented) - getValueGuid(columnIndex: number): GuidString; - // (undocumented) - getValueId(columnIndex: number): Id64String; - // (undocumented) - getValueInteger(columnIndex: number): number; - // (undocumented) - getValueString(columnIndex: number): string; - // (undocumented) - isReadonly(): boolean; - // (undocumented) - isValueNull(columnIndex: number): boolean; - // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - prepare(db: DgnDb | ECDb, sql: string): StatusCodeWithMessage; - // (undocumented) - reset(): DbResult; - // (undocumented) - step(): DbResult; - } - -} - -// @public -class InformationCarrierElement extends Element { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class InformationContentElement extends Element { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class InformationModel extends Model { -} - -// @public -class InformationPartitionElement extends InformationContentElement, implements InformationPartitionElementProps { - constructor(props: InformationPartitionElementProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeElementId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - description?: string; -} - -// @public -class InformationRecordElement extends InformationContentElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class InformationRecordModel extends InformationModel { -} - -// @public -class InformationRecordPartition extends InformationPartitionElement { -} - -// @public -class InformationReferenceElement extends InformationContentElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -interface InstanceChange { - // (undocumented) - changedInstance: { - className: string; - id: Id64String; - } - // (undocumented) - id: Id64String; - // (undocumented) - isIndirect: boolean; - // (undocumented) - opCode: ChangeOpCode; - // (undocumented) - summaryId: Id64String; -} - -// @public -enum KeepBriefcase { - // (undocumented) - No = 0, - // (undocumented) - Yes = 1 -} - -// @public -class KnownLocations { - static readonly nativeAssetsDir: string; - static readonly packageAssetsDir: string; - static readonly tmpdir: string; -} - -// @public -class LightLocation extends SpatialLocationElement, implements LightLocationProps { - constructor(props: LightLocationProps, iModel: IModelDb); - enabled: boolean; -} - -// @public -class LineStyle extends DefinitionElement, implements LineStyleProps { - constructor(props: LineStyleProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - data: string; - // (undocumented) - description?: string; -} - -// WARNING: Unsupported export: Strokes -// WARNING: Unsupported export: Symbols -// WARNING: Unsupported export: Components -// @public -module LineStyleDefinition { - interface ComponentProps { - id: number; - offset?: number; - type: ComponentType; - } - - enum ComponentType { - Compound = 2, - Internal = 6, - PointSymbol = 1, - RasterImage = 7, - StrokePattern = 3, - StrokePoint = 4 - } - - interface CompoundProps { - // (undocumented) - comps: Components; - } - - enum PointSymbolFlags { - Is3d = 1, - None = 0, - NoScale = 2 - } - - interface PointSymbolProps { - baseX?: number; - baseY?: number; - baseZ?: number; - geomPartId: Id64String; - scale?: number; - sizeX?: number; - sizeY?: number; - sizeZ?: number; - symFlags?: PointSymbolFlags; - } - - interface RasterImageProps { - descr: string; - flags?: number; - imageId?: number; - trueWidth?: number; - x: number; - y: number; - } - - enum StrokeCap { - Arc = 30, - Closed = 0, - Decagon = 5, - Extended = 2, - Hexagon = 3, - Octagon = 4, - Open = 1 - } - - enum StrokeMode { - Dash = 1, - FirstInvert = 8, - Gap = 0, - LastInvert = 16, - Ray = 2, - Scale = 4 - } - - enum StrokePatternOptions { - AutoPhase = 1, - CenterStretch = 32, - Iteration = 8, - None = 0, - Segment = 16 - } - - interface StrokePatternProps { - descr: string; - maxIter?: number; - options?: StrokePatternOptions; - phase?: number; - strokes: Strokes; - } - - interface StrokePointProps { - descr: string; - lcId: number; - lcType?: ComponentType; - symbols: Symbols; - } - - interface StrokeProps { - capMode?: StrokeCap; - endWidth?: number; - length: number; - orgWidth?: number; - strokeMode?: StrokeMode; - widthMode?: StrokeWidth; - } - - enum StrokeWidth { - Full = 3, - Left = 1, - None = 0, - Right = 2 - } - - enum StyleFlags { - Continuous = 8, - None = 0, - NoSnap = 4, - Physical = 128 - } - - interface StyleProps { - compId: number; - compType: ComponentType; - flags?: StyleFlags; - unitDef?: number; - } - - enum SymbolOptions { - AbsoluteRotation = 64, - AdjustRotation = 32, - Center = 3, - CurveEnd = 8, - CurveOrigin = 4, - CurveVertex = 16, - End = 2, - NoClip = 512, - None = 0, - NoPartial = 1024, - NoScale = 256, - Origin = 1, - ProjectOrigin = 2048, - UseColor = 16384, - UseWeight = 32768 - } - - interface SymbolProps { - angle?: number; - mod1?: SymbolOptions; - strokeNum?: number; - symId: number; - symType?: ComponentType; - xOffset?: number; - yOffset?: number; - } - - class Utils { - // WARNING: The type "CompoundProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - static createCompoundComponent(iModel: IModelDb, props: CompoundProps): StyleProps | undefined; - // WARNING: The type "PointSymbolProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - static createPointSymbolComponent(iModel: IModelDb, props: PointSymbolProps): StyleProps | undefined; - // WARNING: The type "RasterImageProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - static createRasterComponent(iModel: IModelDb, props: RasterImageProps, image: Uint8Array): StyleProps | undefined; - // WARNING: The type "StrokePatternProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - static createStrokePatternComponent(iModel: IModelDb, props: StrokePatternProps): StyleProps | undefined; - // WARNING: The type "StrokePointProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - static createStrokePointComponent(iModel: IModelDb, props: StrokePointProps): StyleProps | undefined; - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - static createStyle(imodel: IModelDb, scopeModelId: Id64String, name: string, props: StyleProps): Id64String; - static getOrCreateContinuousStyle(imodel: IModelDb, scopeModelId: Id64String, width?: number): Id64String; - static getOrCreateLinePixelsStyle(imodel: IModelDb, scopeModelId: Id64String, linePixels: LinePixels): Id64String; - static queryStyle(imodel: IModelDb, scopeModelId: Id64String, name: string): Id64String | undefined; - } - -} - -// @public -class LinkElement extends InformationReferenceElement { - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; -} - -// @public -class LinkModel extends InformationModel { -} - -// @public -class LinkPartition extends InformationPartitionElement { -} - -// @public -class MetaDataRegistry { - add(classFullName: string, metaData: EntityMetaData): void; - find(classFullName: string): EntityMetaData | undefined; -} - -// @public -class Model extends Entity, implements ModelProps { - constructor(props: ModelProps, iModel: IModelDb); - buildConcurrencyControlRequest(opcode: DbOpcode): void; - // (undocumented) - getJsonProperty(name: string): any; - getUserProperties(namespace: string): any; - // (undocumented) - isPrivate: boolean; - // (undocumented) - isTemplate: boolean; - // (undocumented) - readonly jsonProperties: any; - // (undocumented) - readonly modeledElement: RelatedElement; - // (undocumented) - readonly name: string; - // (undocumented) - static onDelete(_props: ModelProps): IModelStatus; - // (undocumented) - static onDeleted(_props: ModelProps): void; - // (undocumented) - static onInsert(_props: ModelProps): IModelStatus; - // (undocumented) - static onInserted(_id: string): void; - // (undocumented) - static onUpdate(_props: ModelProps): IModelStatus; - // (undocumented) - static onUpdated(_props: ModelProps): void; - // (undocumented) - readonly parentModel: Id64String; - removeUserProperties(nameSpace: string): void; - // (undocumented) - setJsonProperty(name: string, value: any): void; - setUserProperties(nameSpace: string, value: any): void; - toJSON(): ModelProps; -} - -// @public -class ModelSelector extends DefinitionElement, implements ModelSelectorProps { - constructor(props: ModelSelectorProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, models: Id64Array): ModelSelector; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, models: Id64Array): Id64String; - models: string[]; - // (undocumented) - toJSON(): ModelSelectorProps; -} - -// @public -class OpenParams { - constructor( - openMode: OpenMode, - accessMode?: AccessMode | undefined, - syncMode?: SyncMode | undefined, - exclusiveAccessOption?: ExclusiveAccessOption | undefined); - readonly accessMode?: AccessMode | undefined; - equals(other: OpenParams): boolean; - readonly exclusiveAccessOption?: ExclusiveAccessOption | undefined; - static fixedVersion(accessMode?: AccessMode, exclusiveAccessOption?: ExclusiveAccessOption): OpenParams; - readonly isStandalone: boolean; - readonly openMode: OpenMode; - static pullAndPush(exclusiveAccessOption?: ExclusiveAccessOption): OpenParams; - static pullOnly(accessMode?: AccessMode, exclusiveAccessOption?: ExclusiveAccessOption): OpenParams; - static standalone(openMode: OpenMode): OpenParams; - readonly syncMode?: SyncMode | undefined; -} - -// @public -class OrthographicViewDefinition extends SpatialViewDefinition { - constructor(props: SpatialViewDefinitionProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, modelSelectorId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range3d, standardView?: StandardViewIndex): OrthographicViewDefinition; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, modelSelectorId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range3d, standardView?: StandardViewIndex): Id64String; - setRange(range: Range3d): void; -} - -// @public -class PhysicalElement extends SpatialElement { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class PhysicalElementAssemblesElements extends ElementOwnsChildElements { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class PhysicalElementFulfillsFunction extends ElementRefersToElements { -} - -// @public -class PhysicalElementIsOfType extends RelatedElement { - constructor(id: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class PhysicalModel extends SpatialModel { - static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; -} - -// @public (undocumented) -class PhysicalObject extends PhysicalElement { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class PhysicalPartition extends InformationPartitionElement { -} - -// @public -class PhysicalType extends TypeDefinitionElement { - constructor(props: TypeDefinitionElementProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; -} - -// @public (undocumented) -class PlanCallout extends Callout { - constructor(props: CalloutProps, iModel: IModelDb); -} - -// @public -class Platform { - static readonly electron: any; - static readonly imodeljsMobile: any; - static readonly isDesktop: boolean; - static readonly isMobile: boolean; - static readonly isNodeJs: boolean; - // (undocumented) - static load(dir?: string): typeof IModelJsNative; - static readonly platformName: string; -} - -// @public -class RecipeDefinitionElement extends DefinitionElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class Relationship extends Entity, implements RelationshipProps { - constructor(props: RelationshipProps, iModel: IModelDb); - buildConcurrencyControlRequest(opcode: DbOpcode): void; - delete(): void; - // (undocumented) - static getInstance(iModel: IModelDb, criteria: Id64String | SourceAndTarget): T; - insert(): Id64String; - // (undocumented) - static onDeletedDependency(_props: RelationshipProps, _iModel: IModelDb): void; - // (undocumented) - static onRootChanged(_props: RelationshipProps, _iModel: IModelDb): void; - // (undocumented) - static onValidateOutput(_props: RelationshipProps, _iModel: IModelDb): void; - // (undocumented) - readonly sourceId: Id64String; - // (undocumented) - readonly targetId: Id64String; - // (undocumented) - toJSON(): RelationshipProps; - update(): void; -} - -// @public -interface RelationshipProps extends EntityProps, SourceAndTarget { -} - -// @public -class Relationships { - constructor(iModel: IModelDb); - createInstance(props: RelationshipProps): Relationship; - deleteInstance(props: RelationshipProps): void; - getInstance(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T; - getInstanceProps(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T; - insertInstance(props: RelationshipProps): Id64String; - updateInstance(props: RelationshipProps): void; -} - -// @public (undocumented) -class RenderMaterial { -} - -// @public -class RenderMaterialOwnsRenderMaterials extends ElementOwnsChildElements { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class RepositoryLink extends UrlLink { -} - -// @public -class RepositoryModel extends DefinitionModel { -} - -// @public -class RoleElement extends Element { -} - -// @public -class RoleModel extends Model { -} - -// @public -class Schema { - static getClass(className: string, iModel: IModelDb): typeof Entity | undefined; - // (undocumented) - readonly name: string; -} - -// @public -class Schemas { - static getRegisteredSchema(schemaName: string): Schema | undefined; - // (undocumented) - static isRegistered(schema: Schema): boolean; - static registerSchema(schema: Schema): void; - static unregisterSchema(schemaName: string): void; -} - -// @public (undocumented) -class SectionCallout extends Callout { - constructor(props: CalloutProps, iModel: IModelDb); -} - -// @public -class SectionDrawing extends Drawing { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class SectionDrawingModel extends DrawingModel { -} - -// @public -class Sheet extends Document, implements SheetProps { - constructor(props: SheetProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - height: number; - // (undocumented) - scale?: number; - // (undocumented) - sheetTemplate?: Id64String; - // (undocumented) - width: number; -} - -// @public -class SheetBorderTemplate extends Document, implements SheetBorderTemplateProps { - constructor(props: SheetBorderTemplateProps, iModel: IModelDb); - // (undocumented) - height?: number; - // (undocumented) - width?: number; -} - -// @public -class SheetModel extends GraphicalModel2d { -} - -// @public -class SheetTemplate extends Document, implements SheetTemplateProps { - constructor(props: SheetTemplateProps, iModel: IModelDb); - // (undocumented) - border?: Id64String; - // (undocumented) - height?: number; - // (undocumented) - width?: number; -} - -// @public -class SheetViewDefinition extends ViewDefinition2d { -} - -// @public -interface SourceAndTarget { - // (undocumented) - sourceId: Id64String; - // (undocumented) - targetId: Id64String; -} - -// @public -class SpatialCategory extends Category { - constructor(opts: ElementProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string): SpatialCategory; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - static getCodeSpecName(): string; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, defaultAppearance: SubCategoryAppearance.Props): Id64String; - static queryCategoryIdByName(iModel: IModelDb, scopeModelId: Id64String, categoryName: string): Id64String | undefined; -} - -// @public -class SpatialElement extends GeometricElement3d { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public (undocumented) -class SpatialLocation extends SpatialLocationElement { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class SpatialLocationElement extends SpatialElement { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class SpatialLocationIsOfType extends RelatedElement { - constructor(id: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class SpatialLocationModel extends SpatialModel { -} - -// @public -class SpatialLocationPartition extends InformationPartitionElement { -} - -// @public -class SpatialLocationType extends TypeDefinitionElement { - constructor(props: TypeDefinitionElementProps, iModel: IModelDb); - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; -} - -// @public -class SpatialModel extends GeometricModel3d { -} - -// @public -class SpatialViewDefinition extends ViewDefinition3d, implements SpatialViewDefinitionProps { - constructor(props: SpatialViewDefinitionProps, iModel: IModelDb); - loadModelSelector(): ModelSelector; - modelSelectorId: Id64String; - // (undocumented) - toJSON(): SpatialViewDefinitionProps; -} - -// @public -class SqliteStatement implements IterableIterator, IDisposable { - // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores - [Symbol.iterator](): IterableIterator; - bindValue(parameter: number | string, value: any): void; - bindValues(values: any[] | object): void; - clearBindings(): void; - dispose(): void; - getColumnCount(): number; - getRow(): any; - getValue(columnIx: number): SqliteValue; - readonly isPrepared: boolean; - readonly isReadonly: boolean; - readonly isShared: boolean; - next(): IteratorResult; - // WARNING: The type "IModelJsNative.DgnDb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "IModelJsNative.ECDb" needs to be exported by the package (e.g. added to index.ts) - prepare(db: IModelJsNative.DgnDb | IModelJsNative.ECDb, sql: string): void; - reset(): void; - setIsShared(b: boolean): void; - step(): DbResult; -} - -// @public -class SqliteStatementCache { - constructor(maxCount?: number); - // (undocumented) - add(str: string, stmt: SqliteStatement): void; - // (undocumented) - clear(): void; - // (undocumented) - find(str: string): CachedSqliteStatement | undefined; - // (undocumented) - getCount(): number; - // (undocumented) - readonly maxCount: number; - // (undocumented) - release(stmt: SqliteStatement): void; - // (undocumented) - removeUnusedStatementsIfNecessary(): void; -} - -// @public -class SqliteValue { - // WARNING: The type "IModelJsNative.SqliteStatement" needs to be exported by the package (e.g. added to index.ts) - constructor(stmt: IModelJsNative.SqliteStatement, colIndex: number); - readonly columnName: string; - getBlob(): Uint8Array; - getDouble(): number; - getGuid(): GuidString; - getId(): Id64String; - getInteger(): number; - getString(): string; - readonly isNull: boolean; - readonly type: SqliteValueType; - readonly value: any; -} - -// @public -enum SqliteValueType { - // (undocumented) - Blob = 4, - // (undocumented) - Double = 2, - // (undocumented) - Integer = 1, - // (undocumented) - Null = 5, - // (undocumented) - String = 3 -} - -// @public -interface StringParam { - // (undocumented) - guid?: GuidString; - // (undocumented) - id?: Id64String; -} - -// @public -class SubCategory extends DefinitionElement, implements SubCategoryProps { - constructor(props: SubCategoryProps, iModel: IModelDb); - appearance: SubCategoryAppearance; - static create(iModelDb: IModelDb, parentCategoryId: Id64String, name: string, appearance: SubCategoryAppearance.Props): SubCategory; - static createCode(iModel: IModelDb, parentCategoryId: CodeScopeProps, codeValue: string): Code; - description?: string; - getCategoryId(): Id64String; - getSubCategoryId(): Id64String; - getSubCategoryName(): string; - static insert(iModelDb: IModelDb, parentCategoryId: Id64String, name: string, appearance: SubCategoryAppearance.Props): Id64String; - readonly isDefaultSubCategory: boolean; - // (undocumented) - toJSON(): SubCategoryProps; -} - -// @public -class Subject extends InformationReferenceElement, implements SubjectProps { - constructor(props: SubjectProps, iModel: IModelDb); - static create(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, description?: string): Subject; - static createCode(iModelDb: IModelDb, parentSubjectId: CodeScopeProps, codeValue: string): Code; - // (undocumented) - description?: string; - static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, description?: string): Id64String; -} - -// @public -class SubjectOwnsPartitionElements extends ElementOwnsChildElements { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -class SubjectOwnsSubjects extends ElementOwnsChildElements { - constructor(parentId: Id64String, relClassName?: string); - // (undocumented) - static classFullName: string; -} - -// @public -enum SyncMode { - // (undocumented) - FixedVersion = 1, - // (undocumented) - PullAndPush = 3, - // (undocumented) - PullOnly = 2 -} - -// @public -class TemplateRecipe2d extends RecipeDefinitionElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class TemplateRecipe3d extends RecipeDefinitionElement { - constructor(props: ElementProps, iModel: IModelDb); -} - -// @public -class TemplateViewDefinition2d extends ViewDefinition2d { -} - -// @public -class TemplateViewDefinition3d extends ViewDefinition3d { -} - -// @public -class TextAnnotation2d extends AnnotationElement2d { - constructor(props: GeometricElement2dProps, iModel: IModelDb); -} - -// @public -class TextAnnotation3d extends GraphicalElement3d { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class Texture extends DefinitionElement, implements TextureProps { - constructor(props: TextureProps, iModel: IModelDb); - static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: string, width: number, height: number, description: string, flags: TextureFlags): Texture; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, name: string): Code; - // (undocumented) - data: string; - // (undocumented) - description?: string; - // (undocumented) - flags: TextureFlags; - // (undocumented) - format: ImageSourceFormat; - // (undocumented) - height: number; - static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: string, width: number, height: number, description: string, flags: TextureFlags): Id64String; - // (undocumented) - toJSON(): TextureProps; - // (undocumented) - width: number; -} - -// @public (undocumented) -class TitleText extends DetailingSymbol { - constructor(props: GeometricElement2dProps, iModel: IModelDb); -} - -// @public (undocumented) -enum TxnAction { - // (undocumented) - Abandon = 2, - // (undocumented) - Commit = 1, - // (undocumented) - Merge = 5, - // (undocumented) - None = 0, - // (undocumented) - Reinstate = 4, - // (undocumented) - Reverse = 3 -} - -// @public -class TxnManager { - constructor(_iModel: IModelDb); - // (undocumented) - protected _onAllInputsHandled(elClassName: string, elId: Id64String): void; - // (undocumented) - protected _onBeforeOutputsHandled(elClassName: string, elId: Id64String): void; - // (undocumented) - protected _onBeginValidate(): void; - // (undocumented) - protected _onDeletedDependency(props: RelationshipProps): void; - // (undocumented) - protected _onEndValidate(): void; - // (undocumented) - protected _onRootChanged(props: RelationshipProps): void; - // (undocumented) - protected _onValidateOutput(props: RelationshipProps): void; - beginMultiTxnOperation(): DbResult; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - cancelTo(txnId: IModelJsNative.TxnIdString): IModelStatus; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - describeChangeSet(endTxnId?: IModelJsNative.TxnIdString): string; - endMultiTxnOperation(): DbResult; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - getCurrentTxnId(): IModelJsNative.TxnIdString; - getMultiTxnOperationDepth(): number; - getRedoString(): string; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - getTxnDescription(txnId: IModelJsNative.TxnIdString): string; - getUndoString(): string; - readonly hasFatalError: boolean; - readonly hasLocalChanges: boolean; - readonly hasPendingTxns: boolean; - readonly hasUnsavedChanges: boolean; - readonly isRedoPossible: boolean; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - isTxnIdValid(txnId: IModelJsNative.TxnIdString): boolean; - readonly isUndoPossible: boolean; - readonly onAfterUndoRedo: BeEvent<(_action: TxnAction) => void>; - readonly onBeforeUndoRedo: BeEvent<() => void>; - readonly onChangesApplied: BeEvent<() => void>; - readonly onCommit: BeEvent<() => void>; - readonly onCommitted: BeEvent<() => void>; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - queryFirstTxnId(): IModelJsNative.TxnIdString; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - queryNextTxnId(txnId: IModelJsNative.TxnIdString): IModelJsNative.TxnIdString; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - queryPreviousTxnId(txnId: IModelJsNative.TxnIdString): IModelJsNative.TxnIdString; - reinstateTxn(): IModelStatus; - reportError(error: ValidationError): void; - reverseAll(): IModelStatus; - reverseSingleTxn(): IModelStatus; - // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) - reverseTo(txnId: IModelJsNative.TxnIdString): IModelStatus; - reverseTxns(numOperations: number): IModelStatus; - readonly validationErrors: ValidationError[]; -} - -// @public -class TypeDefinitionElement extends DefinitionElement, implements TypeDefinitionElementProps { - constructor(props: TypeDefinitionElementProps, iModel: IModelDb); - // (undocumented) - recipe?: RelatedElement; -} - -// @public -class UrlLink extends LinkElement { -} - -// @public -interface ValidationError { - errorType: string; - fatal: boolean; - message?: string; -} - -// @public -class ViewAttachment extends GraphicalElement2d, implements ViewAttachmentProps { - constructor(props: ViewAttachmentProps, iModel: IModelDb); - // (undocumented) - view: RelatedElement; -} - -// @public (undocumented) -class ViewAttachmentLabel extends DetailingSymbol, implements ViewAttachmentLabelProps { - constructor(props: ViewAttachmentLabelProps, iModel: IModelDb); -} - -// @public -class ViewDefinition extends DefinitionElement, implements ViewDefinitionProps { - protected constructor(props: ViewDefinitionProps, iModel: IModelDb); - categorySelectorId: Id64String; - static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; - displayStyleId: Id64String; - isDrawingView(): this is DrawingViewDefinition; - isSpatialView(): this is SpatialViewDefinition; - isView2d(): this is ViewDefinition2d; - isView3d(): this is ViewDefinition3d; - loadCategorySelector(): CategorySelector; - loadDisplayStyle(): DisplayStyle; - // (undocumented) - toJSON(): ViewDefinitionProps; -} - -// @public -class ViewDefinition2d extends ViewDefinition, implements ViewDefinition2dProps { - constructor(props: ViewDefinition2dProps, iModel: IModelDb); - angle: Angle; - baseModelId: Id64String; - delta: Point2d; - loadDisplayStyle2d(): DisplayStyle2d; - origin: Point2d; - // (undocumented) - toJSON(): ViewDefinition2dProps; -} - -// @public -class ViewDefinition3d extends ViewDefinition, implements ViewDefinition3dProps { - constructor(props: ViewDefinition3dProps, iModel: IModelDb); - angles: YawPitchRollAngles; - camera: Camera; - cameraOn: boolean; - extents: Vector3d; - loadDisplayStyle3d(): DisplayStyle3d; - origin: Point3d; - // (undocumented) - toJSON(): ViewDefinition3dProps; -} - -// @public -class VolumeElement extends SpatialLocationElement { - constructor(props: GeometricElement3dProps, iModel: IModelDb); -} - -// @public -class WebMercatorModel extends SpatialModel { -} - -// WARNING: Unsupported export: AutoPushEventHandler -// WARNING: Unsupported export: SchemaKey -// WARNING: Unsupported export: SchemaMatchType -// WARNING: Unsupported export: ChangeSetDescriber -// (No @packagedocumentation comment for this package) +// @public +enum AccessMode { + // (undocumented) + Exclusive = 2, + // (undocumented) + Shared = 1 +} + +// @public +class AnnotationElement2d extends GraphicalElement2d { + constructor(props: GeometricElement2dProps, iModel: IModelDb); +} + +// @public +interface AppActivityMonitor { + isIdle: boolean; +} + +// @public +class AutoPush { + constructor(iModel: IModelDb, params: AutoPushParams, accessTokenManager: IAccessTokenManager, activityMonitor?: AppActivityMonitor); + autoSchedule: boolean; + cancel(): void; + readonly durationOfLastPushMillis: number; + readonly endOfLastPushMillis: number; + event: BeEvent; + readonly iModel: IModelDb; + readonly lastError: any | undefined; + // (undocumented) + reserveCodes(): Promise; + // (undocumented) + scheduleNextAutoPushIfNecessary(): void; + scheduleNextPush(intervalSeconds?: number): void; + readonly state: AutoPushState; + static validateAutoPushParams(params: any): void; +} + +// @public +enum AutoPushEventType { + // (undocumented) + PushCancelled = 3, + // (undocumented) + PushFailed = 2, + // (undocumented) + PushFinished = 1, + // (undocumented) + PushStarted = 0 +} + +// @public +interface AutoPushParams { + activityContext: ActivityLoggingContext; + autoSchedule: boolean; + pushIntervalSecondsMax: number; + pushIntervalSecondsMin: number; +} + +// @public +enum AutoPushState { + // (undocumented) + NotRunning = 0, + // (undocumented) + Pushing = 2, + // (undocumented) + Scheduled = 1 +} + +// @public +class AuxCoordSystem extends DefinitionElement, implements AuxCoordSystemProps { + constructor(props: AuxCoordSystemProps, iModel: IModelDb); + // (undocumented) + description?: string; + // (undocumented) + type: number; +} + +// @public +class AuxCoordSystem2d extends AuxCoordSystem, implements AuxCoordSystem2dProps { + constructor(props: AuxCoordSystem2dProps, iModel: IModelDb); + // (undocumented) + angle: number; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + origin?: Point2d; +} + +// @public +class AuxCoordSystem3d extends AuxCoordSystem, implements AuxCoordSystem3dProps { + constructor(props: AuxCoordSystem3dProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + origin?: Point3d; + // (undocumented) + pitch: number; + // (undocumented) + roll: number; + // (undocumented) + yaw: number; +} + +// @public +class AuxCoordSystemSpatial extends AuxCoordSystem3d { + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; +} + +// @public +class BackendActivityMonitor implements AppActivityMonitor { + constructor(idleIntervalSeconds?: number); + // (undocumented) + idleIntervalSeconds: number; + // (undocumented) + readonly isIdle: boolean; +} + +// @public +class BisCore extends Schema { + static registerSchema(): void; +} + +// @public +class BriefcaseEntry { + briefcaseId: number; + changeSetId: string; + changeSetIndex?: number; + conflictError?: ConflictingCodesError; + readonly currentChangeSetId: string; + readonly currentChangeSetIndex: number; + fileId?: string; + // (undocumented) + getDebugInfo(): any; + getKey(): string; + readonly hasReversedChanges: boolean; + imodelClientContext?: string; + // (undocumented) + iModelDb: IModelDb | undefined; + iModelId: GuidString; + isOpen: boolean; + isStandalone: boolean; + // WARNING: The type "IModelJsNative.DgnDb" needs to be exported by the package (e.g. added to index.ts) + nativeDb: IModelJsNative.DgnDb; + readonly onBeforeClose: BeEvent<() => void>; + readonly onBeforeVersionUpdate: BeEvent<() => void>; + readonly onChangesetApplied: BeEvent<() => void>; + openParams?: OpenParams; + pathname: string; + reversedChangeSetId?: string; + reversedChangeSetIndex?: number; + userId?: string; +} + +// @public +class BriefcaseId { + constructor(value?: number); + // (undocumented) + static readonly Illegal: number; + // (undocumented) + readonly isMaster: boolean; + // (undocumented) + readonly isStandaloneId: boolean; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + static readonly Master: number; + // (undocumented) + static readonly Standalone: number; + // (undocumented) + toString(): string; + // (undocumented) + readonly value: number; +} + +// @public +class BriefcaseManager { + static applyStandaloneChangeSets(briefcase: BriefcaseEntry, changeSetTokens: ChangeSetToken[], processOption: ChangeSetApplyOption): ChangeSetStatus; + // (undocumented) + static readonly cacheDir: string; + static close(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, keepBriefcase: KeepBriefcase): Promise; + static closeStandalone(briefcase: BriefcaseEntry): void; + static readonly connectClient: ConnectClient; + static create(actx: ActivityLoggingContext, accessToken: AccessToken, contextId: string, iModelName: string, args: CreateIModelProps): Promise; + static createStandalone(fileName: string, args: CreateIModelProps): BriefcaseEntry; + static createStandaloneChangeSet(briefcase: BriefcaseEntry): ChangeSetToken; + // (undocumented) + static deleteAllBriefcases(actx: ActivityLoggingContext, accessToken: AccessToken, iModelId: GuidString): Promise; + static deleteClosed(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; + static downloadChangeSets(actx: ActivityLoggingContext, accessToken: AccessToken, iModelId: GuidString, fromChangeSetId: string, toChangeSetId: string): Promise; + static dumpChangeSet(briefcase: BriefcaseEntry, changeSetToken: ChangeSetToken): void; + static findBriefcaseByToken(iModelToken: IModelToken): BriefcaseEntry | undefined; + // (undocumented) + static getChangeCachePathName(iModelId: GuidString): string; + // (undocumented) + static getChangedElementsPathName(iModelId: GuidString): string; + // (undocumented) + static getChangeSetsPath(iModelId: GuidString): string; + static imodelClient: IModelClient; + static open(actx: ActivityLoggingContext, accessToken: AccessToken, contextId: string, iModelId: GuidString, openParams: OpenParams, version: IModelVersion): Promise; + static openStandalone(pathname: string, openMode: OpenMode, enableTransactions: boolean): BriefcaseEntry; + static pullAndMergeChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, mergeToVersion?: IModelVersion): Promise; + static purgeCache(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; + static pushChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, description: string, relinquishCodesLocks?: boolean): Promise; + // (undocumented) + static reinstateChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, reinstateToVersion?: IModelVersion): Promise; + // (undocumented) + static reverseChanges(actx: ActivityLoggingContext, accessToken: AccessToken, briefcase: BriefcaseEntry, reverseToVersion: IModelVersion): Promise; +} + +// @public +class CachedECSqlStatement { + constructor(stmt: ECSqlStatement); + // (undocumented) + statement: ECSqlStatement; + // (undocumented) + useCount: number; +} + +// @public +class CachedSqliteStatement { + constructor(stmt: SqliteStatement); + // (undocumented) + statement: SqliteStatement; + // (undocumented) + useCount: number; +} + +// @public (undocumented) +class Callout extends DetailingSymbol, implements CalloutProps { + constructor(props: CalloutProps, iModel: IModelDb); +} + +// @public +class Category extends DefinitionElement, implements CategoryProps { + constructor(props: CategoryProps, iModel: IModelDb); + myDefaultSubCategoryId(): Id64String; + // (undocumented) + rank: Rank; + setDefaultAppearance(props: SubCategoryAppearance.Props): void; + // (undocumented) + toJSON(): CategoryProps; +} + +// @public +class CategoryOwnsSubCategories extends ElementOwnsChildElements { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class CategorySelector extends DefinitionElement, implements CategorySelectorProps { + constructor(props: CategorySelectorProps, iModel: IModelDb); + categories: string[]; + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, categories: Id64Array): CategorySelector; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, categories: Id64Array): Id64String; + // (undocumented) + toJSON(): CategorySelectorProps; +} + +// @public +class ChangedElementsDb implements IDisposable { + constructor(); + closeDb(): void; + static createDb(briefcase: IModelDb, pathName: string): ChangedElementsDb; + // (undocumented) + dispose(): void; + getChangedElements(startChangesetId: string, endChangesetId: string): ChangedElements | undefined; + readonly isOpen: boolean; + isProcessed(changesetId: string): boolean; + // WARNING: The type "IModelJsNative.ChangedElementsECDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly nativeDb: IModelJsNative.ChangedElementsECDb; + static openDb(pathName: string, openMode?: ECDbOpenMode): ChangedElementsDb; + processChangesets(accessToken: AccessToken, briefcase: IModelDb, rulesetId: string, startChangesetId: string, endChangesetId: string, filterSpatial?: boolean): Promise; +} + +// @public +class ChangeSetToken { + constructor(id: string, parentId: string, index: number, pathname: string, containsSchemaChanges: boolean, pushDate?: string | undefined); + // (undocumented) + containsSchemaChanges: boolean; + // (undocumented) + id: string; + // (undocumented) + index: number; + // (undocumented) + parentId: string; + // (undocumented) + pathname: string; + // (undocumented) + pushDate?: string | undefined; +} + +// @public +interface ChangeSummary { + // (undocumented) + changeSet: { + description: string; + parentWsgId: GuidString; + pushDate: string; + userCreated: GuidString; + wsgId: GuidString; + } + // (undocumented) + id: Id64String; +} + +// @public (undocumented) +class ChangeSummaryExtractContext { + constructor(accessToken: AccessToken, iModel: IModelDb); + // (undocumented) + readonly accessToken: AccessToken; + // (undocumented) + readonly iModel: IModelDb; + // (undocumented) + readonly iModelId: GuidString; +} + +// @public +interface ChangeSummaryExtractOptions { + currentVersionOnly?: boolean; + startVersion?: IModelVersion; +} + +// @public +class ChangeSummaryManager { + static attachChangeCache(iModel: IModelDb): void; + static buildPropertyValueChangesECSql(iModel: IModelDb, instanceChangeInfo: { + id: Id64String; + summaryId: Id64String; + changedInstance: { + id: Id64String; + className: string; + }; + }, changedValueState: ChangedValueState, changedPropertyNames?: string[]): string; + static detachChangeCache(iModel: IModelDb): void; + // (undocumented) + static downloadChangeSets(actx: ActivityLoggingContext, ctx: ChangeSummaryExtractContext, startChangeSetId: GuidString, endChangeSetId: GuidString): Promise; + static extractChangeSummaries(actx: ActivityLoggingContext, accessToken: AccessToken, iModel: IModelDb, options?: ChangeSummaryExtractOptions): Promise; + static getChangedPropertyValueNames(iModel: IModelDb, instanceChangeId: Id64String): string[]; + static isChangeCacheAttached(iModel: IModelDb): boolean; + static queryChangeSummary(iModel: IModelDb, changeSummaryId: Id64String): ChangeSummary; + static queryInstanceChange(iModel: IModelDb, instanceChangeId: Id64String): InstanceChange; +} + +// @public +class ClassRegistry { + static findRegisteredClass(classFullName: string): typeof Entity | undefined; + static getClass(fullName: string, iModel: IModelDb): typeof Entity; + // (undocumented) + static getRegisteredSchema(domainName: string): Schema | undefined; + // (undocumented) + static getSchemaBaseClass(): typeof Schema; + // (undocumented) + static isNotFoundError(err: any): boolean; + // (undocumented) + static makeMetaDataNotFoundError(className: string): IModelError; + // (undocumented) + static register(entityClass: typeof Entity, schema: Schema): void; + static registerModule(moduleObj: any, schema: Schema): void; + // (undocumented) + static registerSchema(schema: Schema): void; +} + +// @public +class CodeSpecs { + constructor(imodel: IModelDb); + getById(codeSpecId: Id64String): CodeSpec; + getByName(name: string): CodeSpec; + hasId(codeSpecId: Id64String): boolean; + hasName(name: string): boolean; + insert(codeSpec: CodeSpec): Id64String; + load(id: Id64String): CodeSpec; + queryId(name: string): Id64String; +} + +// @public (undocumented) +class ConcurrencyControl { +} + +// @public +class DefinitionElement extends InformationContentElement, implements DefinitionElementProps { + constructor(props: ElementProps, iModel: IModelDb); + isPrivate: boolean; + // (undocumented) + toJSON(): DefinitionElementProps; +} + +// @public +class DefinitionModel extends InformationModel { + static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; +} + +// @public +class DefinitionPartition extends InformationPartitionElement { +} + +// @public (undocumented) +class DetailCallout extends Callout { + constructor(props: CalloutProps, iModel: IModelDb); +} + +// @public (undocumented) +class DetailingSymbol extends GraphicalElement2d { + constructor(props: GeometricElement2dProps, iModel: IModelDb); +} + +// @public +class DictionaryModel extends DefinitionModel { +} + +// @public +class DisplayStyle extends DefinitionElement, implements DisplayStyleProps { + protected constructor(props: DisplayStyleProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + readonly settings: DisplayStyleSettings; +} + +// @public +class DisplayStyle2d extends DisplayStyle { + constructor(props: DisplayStyleProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string): DisplayStyle2d; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string): Id64String; + // (undocumented) + readonly settings: DisplayStyleSettings; +} + +// @public +class DisplayStyle3d extends DisplayStyle { + constructor(props: DisplayStyleProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, options?: DisplayStyleCreationOptions): DisplayStyle3d; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, options?: DisplayStyleCreationOptions): Id64String; + // (undocumented) + readonly settings: DisplayStyle3dSettings; +} + +// @public +interface DisplayStyleCreationOptions { + // (undocumented) + analysisStyle?: AnalysisStyleProps; + // (undocumented) + backgroundColor?: ColorDef; + // (undocumented) + contextRealityModels?: ContextRealityModelProps[]; + // (undocumented) + scheduleScript?: object; + // (undocumented) + viewFlags?: ViewFlags; +} + +// @public +class Document extends InformationContentElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class DocumentCarrier extends InformationCarrierElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class DocumentListModel extends InformationModel { + static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; +} + +// @public +class DocumentPartition extends InformationPartitionElement { +} + +// @public +class Drawing extends Document { + constructor(props: ElementProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + static insert(iModelDb: IModelDb, documentListModelId: Id64String, name: string): Id64String; +} + +// @public +class DrawingCategory extends Category { + constructor(opts: ElementProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string): DrawingCategory; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + static getCodeSpecName(): string; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, defaultAppearance: SubCategoryAppearance.Props): Id64String; + static queryCategoryIdByName(iModel: IModelDb, scopeModelId: Id64String, categoryName: string): Id64String | undefined; +} + +// @public +class DrawingGraphic extends GraphicalElement2d { + constructor(props: GeometricElement2dProps, iModel: IModelDb); +} + +// @public +class DrawingGraphicRepresentsElement extends ElementRefersToElements { +} + +// @public +class DrawingGraphicRepresentsFunctionalElement extends DrawingGraphicRepresentsElement { +} + +// @public +class DrawingModel extends GraphicalModel2d { +} + +// @public +class DrawingViewDefinition extends ViewDefinition2d { + constructor(props: ViewDefinition2dProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, baseModelId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range2d): DrawingViewDefinition; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, baseModelId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range2d): Id64String; +} + +// @public +class DriverBundleElement extends InformationContentElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class ECDb implements IDisposable, PageableECSql { + constructor(); + abandonChanges(): void; + clearStatementCache(): void; + closeDb(): void; + createDb(pathName: string): void; + dispose(): void; + getCachedStatementCount(): number; + importSchema(pathName: string): void; + readonly isOpen: boolean; + // WARNING: The type "IModelJsNative.ECDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly nativeDb: IModelJsNative.ECDb; + openDb(pathName: string, openMode?: ECDbOpenMode): void; + prepareSqliteStatement(sql: string): SqliteStatement; + prepareStatement(ecsql: string): ECSqlStatement; + query(ecsql: string, bindings?: any[] | object, options?: PageOptions): AsyncIterableIterator; + queryPage(ecsql: string, bindings?: any[] | object, options?: PageOptions): Promise; + queryRowCount(ecsql: string, bindings?: any[] | object): Promise; + saveChanges(changeSetName?: string): void; + withPreparedSqliteStatement(sql: string, cb: (stmt: SqliteStatement) => T): T; + withPreparedStatement(ecsql: string, cb: (stmt: ECSqlStatement) => T): T; +} + +// @public +enum ECDbOpenMode { + FileUpgrade = 2, + // (undocumented) + Readonly = 0, + // (undocumented) + Readwrite = 1 +} + +// @public +interface ECEnumValue { + // (undocumented) + key: string; + // (undocumented) + name: string; + // (undocumented) + schema: string; + // (undocumented) + value: number | string; +} + +// @public (undocumented) +class ECSchemaXmlContext { + constructor(); + // (undocumented) + addSchemaPath(searchPath: string): void; + // (undocumented) + readSchemaFromXmlFile(filePath: string): any; + // WARNING: The type "IModelJsNative.ECSchemaXmlContext.SchemaLocaterCallback" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setSchemaLocater(locater: IModelJsNative.ECSchemaXmlContext.SchemaLocaterCallback): void; +} + +// @public +class ECSqlBinder { + // WARNING: The type "IModelJsNative.ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) + constructor(binder: IModelJsNative.ECSqlBinder); + addArrayElement(): ECSqlBinder; + bind(val: any): void; + bindArray(val: any[]): void; + bindBlob(blob: string | Uint8Array | ArrayBuffer | SharedArrayBuffer): void; + bindBoolean(val: boolean): void; + bindDateTime(isoDateTimeString: string): void; + bindDouble(val: number): void; + bindGuid(val: GuidString): void; + bindId(val: Id64String): void; + bindInteger(val: number | string): void; + bindMember(memberName: string): ECSqlBinder; + bindNavigation(val: NavigationBindingValue): void; + bindNull(): void; + bindPoint2d(val: XAndY): void; + bindPoint3d(val: XYAndZ): void; + bindRange3d(val: LowAndHighXYZ): void; + bindString(val: string): void; + bindStruct(val: object): void; +} + +// @public +interface ECSqlColumnInfo { + getAccessString(): string; + getPropertyName(): string; + getRootClassAlias(): string; + getRootClassName(): string; + getRootClassTableSpace(): string; + getType(): ECSqlValueType; + isEnum(): boolean; + isGeneratedProperty(): boolean; + isSystemProperty(): boolean; +} + +// @public +class ECSqlInsertResult { + constructor(status: DbResult, id?: string | undefined); + // (undocumented) + id?: string | undefined; + // (undocumented) + status: DbResult; +} + +// @public +class ECSqlStatement implements IterableIterator, IDisposable { + // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores + [Symbol.iterator](): IterableIterator; + bindArray(parameter: number | string, val: any[]): void; + bindBlob(parameter: number | string, blob: string | Uint8Array | ArrayBuffer | SharedArrayBuffer): void; + bindBoolean(parameter: number | string, val: boolean): void; + bindDateTime(parameter: number | string, isoDateTimeString: string): void; + bindDouble(parameter: number | string, val: number): void; + bindGuid(parameter: number | string, val: GuidString): void; + bindId(parameter: number | string, val: Id64String): void; + bindInteger(parameter: number | string, val: number | string): void; + bindNavigation(parameter: number | string, val: NavigationBindingValue): void; + bindNull(parameter: number | string): void; + bindPoint2d(parameter: number | string, val: XAndY): void; + bindPoint3d(parameter: number | string, val: XYAndZ): void; + bindRange3d(parameter: number | string, val: LowAndHighXYZ): void; + bindString(parameter: number | string, val: string): void; + bindStruct(parameter: number | string, val: object): void; + bindValue(parameter: number | string, val: any): void; + bindValues(values: any[] | object): void; + clearBindings(): void; + dispose(): void; + getBinder(parameter: string | number): ECSqlBinder; + getColumnCount(): number; + getRow(): any; + getValue(columnIx: number): ECSqlValue; + readonly isPrepared: boolean; + readonly isShared: boolean; + next(): IteratorResult; + // WARNING: The type "IModelJsNative.DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "IModelJsNative.ECDb" needs to be exported by the package (e.g. added to index.ts) + prepare(db: IModelJsNative.DgnDb | IModelJsNative.ECDb, ecsql: string): void; + reset(): void; + setIsShared(b: boolean): void; + step(): DbResult; + stepAsync(): Promise; + stepForInsert(): ECSqlInsertResult; + stepForInsertAsync(): Promise; +} + +// @public +class ECSqlStatementCache { + constructor(maxCount?: number); + // (undocumented) + add(str: string, stmt: ECSqlStatement): void; + // (undocumented) + clear(): void; + // (undocumented) + find(str: string): CachedECSqlStatement | undefined; + // (undocumented) + getCount(): number; + // (undocumented) + readonly maxCount: number; + // (undocumented) + release(stmt: ECSqlStatement): void; + // (undocumented) + removeUnusedStatementsIfNecessary(): void; + // (undocumented) + replace(str: string, stmt: ECSqlStatement): void; +} + +// @public +class ECSqlValue { + // WARNING: The type "IModelJsNative.ECSqlValue" needs to be exported by the package (e.g. added to index.ts) + constructor(val: IModelJsNative.ECSqlValue); + readonly columnInfo: ECSqlColumnInfo; + getArray(): any[]; + getArrayIterator(): ECSqlValueIterator; + getBlob(): Uint8Array; + getBoolean(): boolean; + getClassNameForClassId(): string; + getDateTime(): string; + getDouble(): number; + getEnum(): ECEnumValue[] | undefined; + getGeometry(): any; + getGuid(): GuidString; + getId(): Id64String; + getInteger(): number; + getNavigation(): NavigationValue; + getString(): string; + getStruct(): any; + getStructIterator(): ECSqlValueIterator; + getXAndY(): XAndY; + getXYAndZ(): XYAndZ; + readonly isNull: boolean; + readonly value: any; +} + +// @public +class ECSqlValueIterator implements IterableIterator { + // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores + // (undocumented) + [Symbol.iterator](): IterableIterator; + // WARNING: The type "IModelJsNative.ECSqlValueIterator" needs to be exported by the package (e.g. added to index.ts) + constructor(it: IModelJsNative.ECSqlValueIterator); + // (undocumented) + next(): IteratorResult; +} + +// @public +class Element extends Entity, implements ElementProps { + constructor(props: ElementProps, iModel: IModelDb); + buildConcurrencyControlRequest(opcode: DbOpcode): void; + readonly code: Code; + delete(): void; + federationGuid?: GuidString; + getClassMetaData(): EntityMetaData | undefined; + getDisplayLabel(): string; + getJsonProperty(nameSpace: string): any; + getToolTipMessage(): string[]; + getUserProperties(namespace: string): any; + insert(): string; + readonly jsonProperties: { + [key: string]: any; + } + readonly model: Id64String; + // (undocumented) + static onAllInputsHandled(_id: Id64String, _iModel: IModelDb): void; + // (undocumented) + static onBeforeOutputsHandled(_id: Id64String, _iModel: IModelDb): void; + // (undocumented) + static onDelete(_props: ElementProps, _iModel: IModelDb): IModelStatus; + // (undocumented) + static onDeleted(_props: ElementProps, _iModel: IModelDb): void; + // (undocumented) + static onInsert(_props: ElementProps, _iModel: IModelDb): IModelStatus; + // (undocumented) + static onInserted(_props: ElementProps, _iModel: IModelDb): void; + // (undocumented) + static onUpdate(_props: ElementProps, _iModel: IModelDb): IModelStatus; + // (undocumented) + static onUpdated(_props: ElementProps, _iModel: IModelDb): void; + parent?: RelatedElement; + removeUserProperties(nameSpace: string): void; + // (undocumented) + setJsonProperty(nameSpace: string, value: any): void; + setUserProperties(nameSpace: string, value: any): void; + toJSON(): ElementProps; + update(): void; + userLabel?: string; +} + +// @public +class ElementAspect extends Entity, implements ElementAspectProps { + constructor(props: ElementAspectProps, iModel: IModelDb); + // (undocumented) + element: RelatedElement; + // (undocumented) + toJSON(): ElementAspectProps; +} + +// @public +class ElementDrivesElement extends Relationship, implements ElementDrivesElementProps { + constructor(props: ElementDrivesElementProps, iModel: IModelDb); + // (undocumented) + static create(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, priority?: number): T; + // (undocumented) + priority: number; + // (undocumented) + status: number; +} + +// @public +interface ElementDrivesElementProps extends RelationshipProps { + // (undocumented) + priority: number; + // (undocumented) + status: number; +} + +// @public +class ElementEncapsulatesElements extends ElementOwnsChildElements { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class ElementGroupsMembers extends ElementRefersToElements { + constructor(props: ElementGroupsMembersProps, iModel: IModelDb); + // (undocumented) + static create(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, memberPriority?: number): T; + // (undocumented) + memberPriority: number; +} + +// @public +interface ElementGroupsMembersProps extends RelationshipProps { + // (undocumented) + memberPriority: number; +} + +// @public +class ElementMultiAspect extends ElementAspect { +} + +// @public +class ElementOwnsChildElements extends RelatedElement { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public (undocumented) +class ElementPropertyFormatter { + constructor(iModel: IModelDb); + formatProperties(elem: Element): any; +} + +// @public +class ElementRefersToElements extends Relationship { + static create(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): T; + static insert(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): Id64String; +} + +// @public +class ElementUniqueAspect extends ElementAspect { +} + +// @public (undocumented) +class ElevationCallout extends Callout { + constructor(props: CalloutProps, iModel: IModelDb); +} + +// @public +class EmbeddedFileLink extends LinkElement { +} + +// @public +class Entity implements EntityProps { + constructor(props: EntityProps, iModel: IModelDb); + // (undocumented) + [propName: string]: any; + buildConcurrencyControlRequest(_opcode: DbOpcode): void; + static readonly classFullName: string; + readonly className: string; + clone(): this; + forEachProperty(func: PropertyCallback, includeCustom?: boolean): void; + id: Id64String; + iModel: IModelDb; + static schema: Schema; + readonly schemaName: string; + // (undocumented) + toJSON(): EntityProps; +} + +// @public +enum ExclusiveAccessOption { + CreateNewBriefcase = 1, + TryReuseOpenBriefcase = 2 +} + +// @beta +interface ExportGraphicsInfo { + color: number; + elementId: Id64String; + mesh: ExportGraphicsMesh; +} + +// @beta +interface ExportGraphicsMesh { + indices: Int32Array; + normals: Float32Array; + params: Float32Array; + points: Float64Array; +} + +// @beta +interface ExportGraphicsProps { + angleTol?: number; + chordTol?: number; + elementIdArray: Id64Array; + maxEdgeLength?: number; + onGraphics: ExportGraphicsFunction; +} + +// @public (undocumented) +class Functional extends Schema { + // (undocumented) + static importSchema(activityLoggingContext: ActivityLoggingContext, iModelDb: IModelDb, accessToken?: AccessToken): Promise; + // (undocumented) + static registerSchema(): void; +} + +// @public +class FunctionalBreakdownElement extends FunctionalElement { + constructor(props: FunctionalElementProps, iModel: IModelDb); +} + +// @public +class FunctionalComponentElement extends FunctionalElement { + constructor(props: FunctionalElementProps, iModel: IModelDb); +} + +// @public (undocumented) +class FunctionalComposite extends FunctionalBreakdownElement { + constructor(props: FunctionalElementProps, iModel: IModelDb); +} + +// @public +class FunctionalElement extends RoleElement, implements FunctionalElementProps { + constructor(props: FunctionalElementProps, iModel: IModelDb); +} + +// @public +class FunctionalElementIsOfType extends RelatedElement { + constructor(id: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class FunctionalModel extends RoleModel { + constructor(props: ModelProps, iModel: IModelDb); + static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; +} + +// @public +class FunctionalPartition extends InformationPartitionElement { + constructor(props: InformationPartitionElementProps, iModel: IModelDb); +} + +// @public +class FunctionalType extends TypeDefinitionElement { + constructor(props: TypeDefinitionElementProps, iModel: IModelDb); +} + +// @public (undocumented) +class Generic extends Schema { + // (undocumented) + static registerSchema(): void; +} + +// @public +class GeometricElement extends Element, implements GeometricElementProps { + constructor(props: GeometricElementProps, iModel: IModelDb); + // (undocumented) + calculateRange3d(): AxisAlignedBox3d; + category: Id64String; + geom?: GeometryStreamProps; + getPlacementTransform(): Transform; + is2d(): this is GeometricElement2d; + is3d(): this is GeometricElement3d; + toJSON(): GeometricElementProps; +} + +// @public +class GeometricElement2d extends GeometricElement, implements GeometricElement2dProps { + constructor(props: GeometricElement2dProps, iModel: IModelDb); + // (undocumented) + placement: Placement2d; + // (undocumented) + toJSON(): GeometricElement2dProps; + // (undocumented) + typeDefinition?: TypeDefinition; +} + +// @public +class GeometricElement3d extends GeometricElement, implements GeometricElement3dProps { + constructor(props: GeometricElement3dProps, iModel: IModelDb); + // (undocumented) + placement: Placement3d; + // (undocumented) + toJSON(): GeometricElement3dProps; + // (undocumented) + typeDefinition?: TypeDefinition; +} + +// @public +class GeometricModel extends Model { + queryExtents(): AxisAlignedBox3d; +} + +// @public +class GeometricModel2d extends GeometricModel, implements GeometricModel2dProps { + // (undocumented) + globalOrigin?: Point2d; +} + +// @public +class GeometricModel3d extends GeometricModel { +} + +// @public +class GeometryPart extends DefinitionElement, implements GeometryPartProps { + constructor(props: GeometryPartProps, iModel: IModelDb); + // (undocumented) + bbox: ElementAlignedBox3d; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + geom?: GeometryStreamProps; + toJSON(): GeometryPartProps; +} + +// @public (undocumented) +class Graphic3d extends GraphicalElement3d { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class GraphicalElement2d extends GeometricElement2d { + constructor(props: GeometricElement2dProps, iModel: IModelDb); +} + +// @public +class GraphicalElement2dIsOfType extends RelatedElement { + constructor(id: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class GraphicalElement3d extends GeometricElement3d { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class GraphicalModel2d extends GeometricModel2d { +} + +// @public +class GraphicalType2d extends TypeDefinitionElement { + constructor(props: ElementProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; +} + +// @public (undocumented) +class Group extends GroupInformationElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class GroupInformationElement extends InformationReferenceElement { +} + +// @public +class GroupInformationModel extends InformationModel { +} + +// @public +class GroupInformationPartition extends InformationPartitionElement { +} + +// @public (undocumented) +class GroupModel extends GroupInformationModel { + constructor(props: ModelProps, iModel: IModelDb); +} + +// @public (undocumented) +class IModelDb { +} + +// @public +class IModelHost { + static readonly appAssetsDir: string | undefined; + // (undocumented) + static backendVersion: string; + // (undocumented) + static configuration?: IModelHostConfiguration; + // (undocumented) + static loadNative(region: number, dir?: string): void; + static readonly onAfterStartup: BeEvent<() => void>; + static readonly onBeforeShutdown: BeEvent<() => void>; + // (undocumented) + static readonly platform: typeof IModelJsNative; + static shutdown(): void; + static startup(configuration?: IModelHostConfiguration): void; + static readonly tileContentRequestTimeout: number; + static readonly tileTreeRequestTimeout: number; + static readonly useTileContentThreadPool: boolean; +} + +// @public +class IModelHostConfiguration { + appAssetsDir?: string; + briefcaseCacheDir: string; + static defaultTileRequestTimeout: number; + imodelClient?: IModelClient; + nativePlatform?: any; + tileContentRequestTimeout: number; + tileTreeRequestTimeout: number; + useTileContentThreadPool: boolean; +} + +// @public (undocumented) +class IModelImporter { + constructor(sourceDb: IModelDb, targetDb: IModelDb); + // (undocumented) + protected _excludedCodeSpecIds: Set; + // (undocumented) + protected _excludedCodeSpecNames: Set; + // (undocumented) + protected _excludedElementClassNames: Set; + // (undocumented) + protected _excludedElementIds: Set; + // (undocumented) + addCodeSpecId(sourceId: Id64String, targetId: Id64String): void; + // (undocumented) + addElementId(sourceId: Id64String, targetId: Id64String): void; + // (undocumented) + dispose(): void; + // (undocumented) + excludeCodeSpec(codeSpecName: string): void; + // (undocumented) + excludeElementClass(classFullName: string): void; + // (undocumented) + excludeElementId(elementId: Id64String): void; + // (undocumented) + excludeSubject(subjectPath: string): void; + // (undocumented) + findCodeSpecId(sourceId: Id64String): Id64String; + // (undocumented) + findElementId(sourceId: Id64String): Id64String; + // (undocumented) + import(): void; + // (undocumented) + importCodeSpec(sourceId: Id64String): Id64String; + // (undocumented) + importCodeSpecs(): void; + // (undocumented) + importElement(sourceElementId: Id64String): Id64String; + // (undocumented) + importFonts(): void; + // (undocumented) + importModel(sourceModeledElementId: Id64String): void; + // (undocumented) + importModelContents(modelId: Id64String): void; + // (undocumented) + importModels(modeledElementClass: string): void; + // (undocumented) + importRelationships(): void; + // (undocumented) + static resolveSubjectId(iModelDb: IModelDb, subjectPath: string): Id64String | undefined; +} + +// @public +class IModelJsExpressServer { + // WARNING: The type "ExpressApp" needs to be exported by the package (e.g. added to index.ts) + constructor(app: ExpressApp, protocol: WebAppRpcProtocol); + // WARNING: The type "ExpressApp" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected _app: ExpressApp; + // (undocumented) + protected _configureHeaders(): void; + // (undocumented) + protected _configureMiddleware(): void; + // (undocumented) + protected _configureRoutes(): void; + // WARNING: The type "HttpServer" needs to be exported by the package (e.g. added to index.ts) + initialize(port: number | string): Promise; +} + +// @public +class IModelJsFs { + static appendFileSync(path: string, str: string): void; + static copySync(src: string, dest: string, opts?: any): void; + static existsSync(path: string): boolean; + static lstatSync(path: string): IModelJsFsStats | undefined; + static mkdirSync(path: string): void; + static readdirSync(path: string): string[]; + // (undocumented) + static readFileSync(path: string): string | Buffer; + static removeSync(path: string): void; + static rmdirSync(path: string): void; + static unlinkSync(path: string): void; + static writeFileSync(path: string, str: string, wflag?: string): void; +} + +// @public +class IModelJsFsStats { + constructor(size: number, atimeMs: number, mtimeMs: number, birthtimeMs: number, isDirectory: boolean, isFile: boolean, isSocket: boolean, isSymbolicLink: boolean, isReadOnly: boolean); + // (undocumented) + atimeMs: number; + // (undocumented) + birthtimeMs: number; + // (undocumented) + isDirectory: boolean; + // (undocumented) + isFile: boolean; + // (undocumented) + isReadOnly: boolean; + // (undocumented) + isSocket: boolean; + // (undocumented) + isSymbolicLink: boolean; + // (undocumented) + mtimeMs: number; + // (undocumented) + size: number; +} + +// WARNING: Unsupported export: version +// WARNING: Unsupported export: logger +// WARNING: Unsupported export: TxnIdString +// @public +module IModelJsNative { + interface BriefcaseManagerOnConflictPolicy { + deleteVsUpdate: number; + updateVsDelete: number; + updateVsUpdate: number; + } + + // (undocumented) + class BriefcaseManagerResourcesRequest { + // (undocumented) + isEmpty(): boolean; + // (undocumented) + reset(): void; + // (undocumented) + toJSON(): string; + } + + // (undocumented) + class ChangedElementsECDb implements IDisposable { + constructor(); + // (undocumented) + closeDb(): void; + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createDb(db: DgnDb, dbName: string): DbResult; + // (undocumented) + dispose(): void; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getChangedElements(startChangesetId: string, endChangesetId: string): ErrorStatusOrResult; + // (undocumented) + isOpen(): boolean; + // (undocumented) + isProcessed(changesetId: string): boolean; + // (undocumented) + openDb(dbName: string, mode: OpenMode, upgradeProfiles?: boolean): DbResult; + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + processChangesets(db: DgnDb, changesets: string, rulesetId: string, filterSpatial: boolean): DbResult; + } + + class DgnDb { + constructor(); + // (undocumented) + abandonChanges(): DbResult; + // (undocumented) + abandonCreateChangeSet(): void; + // (undocumented) + addPendingChangeSet(changeSetId: string): DbResult; + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + appendBriefcaseManagerResourcesRequest(reqOut: BriefcaseManagerResourcesRequest, reqIn: BriefcaseManagerResourcesRequest): void; + // (undocumented) + applyChangeSets(changeSets: string, processOptions: ChangeSetApplyOption): ChangeSetStatus; + // (undocumented) + attachChangeCache(changeCachePath: string): DbResult; + // (undocumented) + beginMultiTxnOperation(): DbResult; + // (undocumented) + briefcaseManagerEndBulkOperation(): RepositoryStatus; + // (undocumented) + briefcaseManagerStartBulkOperation(): RepositoryStatus; + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + buildBriefcaseManagerResourcesRequestForElement(req: BriefcaseManagerResourcesRequest, elemId: string, opcode: DbOpcode): RepositoryStatus; + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + buildBriefcaseManagerResourcesRequestForLinkTableRelationship(req: BriefcaseManagerResourcesRequest, relKey: string, opcode: DbOpcode): RepositoryStatus; + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + buildBriefcaseManagerResourcesRequestForModel(req: BriefcaseManagerResourcesRequest, modelId: string, opcode: DbOpcode): RepositoryStatus; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + cancelTo(txnId: TxnIdString): IModelStatus; + // (undocumented) + closeIModel(): void; + // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createChangeCache(changeCacheFile: ECDb, changeCachePath: string): DbResult; + // (undocumented) + createIModel(accessToken: string, appVersion: string, projectId: GuidString, fileName: string, props: string): DbResult; + // (undocumented) + createStandaloneIModel(fileName: string, props: string): DbResult; + // (undocumented) + deleteElement(elemIdJson: string): IModelStatus; + // (undocumented) + deleteElementAspect(aspectIdJson: string): IModelStatus; + // (undocumented) + deleteLinkTableRelationship(props: string): DbResult; + // (undocumented) + deleteModel(modelIdJson: string): IModelStatus; + // (undocumented) + detachChangeCache(): number; + // (undocumented) + dumpChangeSet(changeSet: string): void; + // (undocumented) + embedFont(fontProps: string): string; + // (undocumented) + enableTxnTesting(): void; + // (undocumented) + endMultiTxnOperation(): DbResult; + // (undocumented) + executeTest(testName: string, params: string): string; + // (undocumented) + exportGraphics(exportProps: ExportGraphicsProps): DbResult; + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + extractBriefcaseManagerResourcesRequest(reqOut: BriefcaseManagerResourcesRequest, reqIn: BriefcaseManagerResourcesRequest, locks: boolean, codes: boolean): void; + // WARNING: The type "BriefcaseManagerResourcesRequest" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + extractBulkResourcesRequest(req: BriefcaseManagerResourcesRequest, locks: boolean, codes: boolean): void; + // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + extractChangeSummary(changeCacheFile: ECDb, changesetFilePath: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + extractCodes(): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + extractCodesFromFile(changeSets: string): ErrorStatusOrResult; + // (undocumented) + finishCreateChangeSet(): ChangeSetStatus; + // (undocumented) + static getAssetsDir(): string; + // (undocumented) + getBriefcaseId(): number; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getCurrentTxnId(): TxnIdString; + // (undocumented) + getDbGuid(): GuidString; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getECClassMetaData(schema: string, className: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getElement(opts: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getElementPropertiesForDisplay(id: string): ErrorStatusOrResult; + // (undocumented) + getGeoCoordinatesFromIModelCoordinates(points: string): string; + // (undocumented) + getIModelCoordinatesFromGeoCoordinates(points: string): string; + // (undocumented) + getIModelProps(): string; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getModel(opts: string): ErrorStatusOrResult; + // (undocumented) + getMultiTxnOperationDepth(): number; + // (undocumented) + getParentChangeSetId(): string; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getPendingChangeSets(): ErrorStatusOrResult; + // (undocumented) + getRedoString(): string; + // (undocumented) + getReversedChangeSetId(): string | undefined; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getSchema(name: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getSchemaItem(schemaName: string, itemName: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getTileContent(treeId: string, tileId: string, callback: (result: ErrorStatusOrResult) => void): void; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getTileTree(id: string, callback: (result: ErrorStatusOrResult) => void): void; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getTxnDescription(txnId: TxnIdString): string; + // (undocumented) + getUndoString(): string; + // (undocumented) + hasFatalTxnError(): boolean; + // (undocumented) + hasUnsavedChanges(): boolean; + // (undocumented) + importFunctionalSchema(): DbResult; + // (undocumented) + importSchema(schemaPathname: string): DbResult; + // (undocumented) + inBulkOperation(): boolean; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + insertCodeSpec(name: string, specType: number, scopeReq: number): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + insertElement(elemProps: string): ErrorStatusOrResult; + // (undocumented) + insertElementAspect(aspectProps: string): IModelStatus; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + insertLinkTableRelationship(props: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + insertModel(modelProps: string): ErrorStatusOrResult; + // (undocumented) + isChangeCacheAttached(): boolean; + // (undocumented) + isOpen(): boolean; + // (undocumented) + isRedoPossible(): boolean; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + isTxnIdValid(txnId: TxnIdString): boolean; + // (undocumented) + isUndoPossible(): boolean; + // (undocumented) + logTxnError(fatal: boolean): void; + // (undocumented) + openIModel(accessToken: string, appVersion: string, projectId: GuidString, dbName: string, mode: OpenMode): DbResult; + // (undocumented) + openIModelFile(dbName: string, mode: OpenMode): DbResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "IModelDb.TileContentState" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + pollTileContent(treeId: string, tileId: string): ErrorStatusOrResult; + // (undocumented) + queryFileProperty(props: string, wantString: boolean): string | Uint8Array | undefined; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + queryFirstTxnId(): TxnIdString; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + queryModelExtents(options: string): ErrorStatusOrResult; + // (undocumented) + queryNextAvailableFileProperty(props: string): number; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + queryNextTxnId(txnId: TxnIdString): TxnIdString; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + queryPreviousTxnId(txnId: TxnIdString): TxnIdString; + // (undocumented) + readFontMap(): string; + // (undocumented) + reinstateTxn(): IModelStatus; + // (undocumented) + removePendingChangeSet(changeSetId: string): DbResult; + // (undocumented) + reverseAll(): IModelStatus; + // WARNING: The type "TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + reverseTo(txnId: TxnIdString): IModelStatus; + // (undocumented) + reverseTxns(numOperations: number): IModelStatus; + // (undocumented) + saveChanges(description?: string): DbResult; + // (undocumented) + saveFileProperty(props: string, strValue: string | undefined, blobVal: Uint8Array | undefined): number; + // (undocumented) + setAsMaster(guid?: GuidString): DbResult; + // (undocumented) + setBriefcaseId(idValue: number): DbResult; + // WARNING: The type "BriefcaseManagerOnConflictPolicy" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setBriefcaseManagerOptimisticConcurrencyControlPolicy(conflictPolicy: BriefcaseManagerOnConflictPolicy): RepositoryStatus; + // (undocumented) + setBriefcaseManagerPessimisticConcurrencyControlPolicy(): RepositoryStatus; + // (undocumented) + setDbGuid(guid: GuidString): DbResult; + // (undocumented) + setIModelDb(iModelDb?: IModelDb): void; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + startCreateChangeSet(): ErrorStatusOrResult; + // (undocumented) + updateElement(elemProps: string): IModelStatus; + // (undocumented) + updateElementAspect(aspectProps: string): IModelStatus; + // (undocumented) + updateIModelProps(props: string): void; + // (undocumented) + updateLinkTableRelationship(props: string): DbResult; + // (undocumented) + updateModel(modelProps: string): IModelStatus; + // (undocumented) + updateProjectExtents(newExtentsJson: string): void; + } + + // (undocumented) + class DisableNativeAssertions implements IDisposable { + constructor(); + // (undocumented) + dispose(): void; + } + + // (undocumented) + class ECDb implements IDisposable { + constructor(); + // (undocumented) + abandonChanges(): DbResult; + // (undocumented) + closeDb(): void; + // (undocumented) + createDb(dbName: string): DbResult; + // (undocumented) + dispose(): void; + // (undocumented) + importSchema(schemaPathName: string): DbResult; + // (undocumented) + isOpen(): boolean; + // (undocumented) + openDb(dbName: string, mode: OpenMode, upgradeProfiles?: boolean): DbResult; + // (undocumented) + saveChanges(changesetName?: string): DbResult; + } + + // (undocumented) + class ECPresentationManager implements IDisposable { + constructor(); + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addRuleset(serializedRuleset: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + clearRulesets(): ErrorStatusOrResult; + // (undocumented) + dispose(): void; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getRulesets(rulesetId: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getRulesetVariableValue(rulesetId: string, variableId: string, type: string): ErrorStatusOrResult; + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + handleRequest(db: DgnDb, options: string, callback: (result: ErrorStatusOrResult) => void): void; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + removeRuleset(rulesetId: string, hash: string): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setRulesetVariableValue(rulesetId: string, variableId: string, type: string, value: any): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setupLocaleDirectories(directories: string[]): ErrorStatusOrResult; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECPresentationStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setupRulesetDirectories(directories: string[]): ErrorStatusOrResult; + } + + // (undocumented) + enum ECPresentationStatus { + // (undocumented) + Error = 1, + // (undocumented) + InvalidArgument = 2, + // (undocumented) + Success = 0 + } + + // (undocumented) + class ECSchemaXmlContext { + constructor(); + // (undocumented) + addSchemaPath(path: string): void; + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readSchemaFromXmlFile(filePath: string): ErrorStatusOrResult; + // WARNING: The type "ECSchemaXmlContext.SchemaLocaterCallback" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setSchemaLocater(locater: ECSchemaXmlContext.SchemaLocaterCallback): void; + } + + // (undocumented) + class ECSqlBinder { + constructor(); + // WARNING: The type "ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addArrayElement(): ECSqlBinder; + // (undocumented) + bindBlob(base64String: string | Uint8Array | ArrayBuffer | SharedArrayBuffer): DbResult; + // (undocumented) + bindBoolean(val: boolean): DbResult; + // (undocumented) + bindDateTime(isoString: string): DbResult; + // (undocumented) + bindDouble(val: number): DbResult; + // (undocumented) + bindGuid(guidStr: GuidString): DbResult; + // (undocumented) + bindId(hexStr: Id64String): DbResult; + // (undocumented) + bindInteger(val: number | string): DbResult; + // WARNING: The type "ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + bindMember(memberName: string): ECSqlBinder; + // (undocumented) + bindNavigation(navIdHexStr: Id64String, relClassName?: string, relClassTableSpace?: string): DbResult; + // (undocumented) + bindNull(): DbResult; + // (undocumented) + bindPoint2d(x: number, y: number): DbResult; + // (undocumented) + bindPoint3d(x: number, y: number, z: number): DbResult; + // (undocumented) + bindString(val: string): DbResult; + } + + // (undocumented) + class ECSqlColumnInfo { + constructor(); + // (undocumented) + getAccessString(): string; + // (undocumented) + getPropertyName(): string; + // (undocumented) + getRootClassAlias(): string; + // (undocumented) + getRootClassName(): string; + // (undocumented) + getRootClassTableSpace(): string; + // (undocumented) + getType(): number; + // (undocumented) + isEnum(): boolean; + // (undocumented) + isGeneratedProperty(): boolean; + // (undocumented) + isSystemProperty(): boolean; + } + + // (undocumented) + class ECSqlStatement implements IDisposable { + constructor(); + // (undocumented) + clearBindings(): DbResult; + // (undocumented) + dispose(): void; + // WARNING: The type "ECSqlBinder" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getBinder(param: number | string): ECSqlBinder; + // (undocumented) + getColumnCount(): number; + // WARNING: The type "ECSqlValue" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getValue(columnIndex: number): ECSqlValue; + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + prepare(db: DgnDb | ECDb, ecsql: string): StatusCodeWithMessage; + // (undocumented) + reset(): DbResult; + // (undocumented) + step(): DbResult; + // (undocumented) + stepAsync(callback: (result: DbResult) => void): void; + // (undocumented) + stepForInsert: { + id: string; + status: DbResult; + } + // (undocumented) + stepForInsertAsync(callback: (result: { + status: DbResult; + id: string; + }) => void): void; + } + + // (undocumented) + class ECSqlValue { + constructor(); + // WARNING: The type "ECSqlValueIterator" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getArrayIterator(): ECSqlValueIterator; + // (undocumented) + getBlob(): Uint8Array; + // (undocumented) + getBoolean(): boolean; + // (undocumented) + getClassNameForClassId(): string; + // WARNING: The type "ECSqlColumnInfo" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getColumnInfo(): ECSqlColumnInfo; + // (undocumented) + getDateTime(): string; + // (undocumented) + getDouble(): number; + // (undocumented) + getEnum(): Array<{ + schema: string; + name: string; + key: string; + value: number | string; + }> | undefined; + // (undocumented) + getGeometry(): string; + // (undocumented) + getGuid(): GuidString; + // (undocumented) + getId(): Id64String; + // (undocumented) + getInt(): number; + // (undocumented) + getInt64(): number; + // (undocumented) + getNavigation: { + id: Id64String; + relClassName?: string; + } + // (undocumented) + getPoint2d: { + x: number; + y: number; + } + // (undocumented) + getPoint3d: { + x: number; + y: number; + z: number; + } + // (undocumented) + getString(): string; + // WARNING: The type "ECSqlValueIterator" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getStructIterator(): ECSqlValueIterator; + // (undocumented) + isNull(): boolean; + } + + // (undocumented) + class ECSqlValueIterator { + constructor(); + // WARNING: The type "ECSqlValue" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getCurrent(): ECSqlValue; + // (undocumented) + moveNext(): boolean; + } + + interface ErrorStatusOrResult { + error?: StatusCodeWithMessage; + result?: ResultType; + } + + // (undocumented) + class ImportContext implements IDisposable { + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + constructor(sourceDb: DgnDb, targetDb: DgnDb); + // (undocumented) + addCodeSpecId(sourceId: Id64String, targetId: Id64String): BentleyStatus; + // (undocumented) + addElementId(sourceId: Id64String, targetId: Id64String): BentleyStatus; + // (undocumented) + cloneElement(sourceId: Id64String): ElementProps; + // (undocumented) + dispose(): void; + // (undocumented) + findCodeSpecId(sourceId: Id64String): Id64String; + // (undocumented) + findElementId(sourceId: Id64String): Id64String; + // (undocumented) + importCodeSpec(sourceId: Id64String): Id64String; + // (undocumented) + importFont(sourceId: number): number; + } + + // (undocumented) + function initializeRegion(region: number): void; + + // (undocumented) + class SnapRequest { + constructor(); + // (undocumented) + cancelSnap(): void; + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ErrorStatusOrResult" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + doSnap(db: DgnDb, request: any, callback: (result: ErrorStatusOrResult) => void): void; + } + + // (undocumented) + class SqliteStatement implements IDisposable { + constructor(); + // (undocumented) + bindBlob(param: number | string, val: Uint8Array | ArrayBuffer | SharedArrayBuffer): DbResult; + // (undocumented) + bindDouble(param: number | string, val: number): DbResult; + // (undocumented) + bindGuid(param: number | string, guidStr: GuidString): DbResult; + // (undocumented) + bindId(param: number | string, hexStr: Id64String): DbResult; + // (undocumented) + bindInteger(param: number | string, val: number | string): DbResult; + // (undocumented) + bindNull(param: number | string): DbResult; + // (undocumented) + bindString(param: number | string, val: string): DbResult; + // (undocumented) + clearBindings(): DbResult; + // (undocumented) + dispose(): void; + // (undocumented) + getColumnCount(): number; + // (undocumented) + getColumnName(columnIndex: number): string; + // (undocumented) + getColumnType(columnIndex: number): number; + // (undocumented) + getValueBlob(columnIndex: number): Uint8Array; + // (undocumented) + getValueDouble(columnIndex: number): number; + // (undocumented) + getValueGuid(columnIndex: number): GuidString; + // (undocumented) + getValueId(columnIndex: number): Id64String; + // (undocumented) + getValueInteger(columnIndex: number): number; + // (undocumented) + getValueString(columnIndex: number): string; + // (undocumented) + isReadonly(): boolean; + // (undocumented) + isValueNull(columnIndex: number): boolean; + // WARNING: The type "DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ECDb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + prepare(db: DgnDb | ECDb, sql: string): StatusCodeWithMessage; + // (undocumented) + reset(): DbResult; + // (undocumented) + step(): DbResult; + // (undocumented) + stepAsync(callback: (result: DbResult) => void): void; + } + +} + +// @public +class InformationCarrierElement extends Element { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class InformationContentElement extends Element { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class InformationModel extends Model { +} + +// @public +class InformationPartitionElement extends InformationContentElement, implements InformationPartitionElementProps { + constructor(props: InformationPartitionElementProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeElementId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + description?: string; +} + +// @public +class InformationRecordElement extends InformationContentElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class InformationRecordModel extends InformationModel { +} + +// @public +class InformationRecordPartition extends InformationPartitionElement { +} + +// @public +class InformationReferenceElement extends InformationContentElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +interface InstanceChange { + // (undocumented) + changedInstance: { + className: string; + id: Id64String; + } + // (undocumented) + id: Id64String; + // (undocumented) + isIndirect: boolean; + // (undocumented) + opCode: ChangeOpCode; + // (undocumented) + summaryId: Id64String; +} + +// @public +enum KeepBriefcase { + // (undocumented) + No = 0, + // (undocumented) + Yes = 1 +} + +// @public +class KnownLocations { + static readonly nativeAssetsDir: string; + static readonly packageAssetsDir: string; + static readonly tmpdir: string; +} + +// @public +class LightLocation extends SpatialLocationElement, implements LightLocationProps { + constructor(props: LightLocationProps, iModel: IModelDb); + enabled: boolean; +} + +// @public +class LineStyle extends DefinitionElement, implements LineStyleProps { + constructor(props: LineStyleProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + data: string; + // (undocumented) + description?: string; +} + +// WARNING: Unsupported export: Strokes +// WARNING: Unsupported export: Symbols +// WARNING: Unsupported export: Components +// @public +module LineStyleDefinition { + interface ComponentProps { + id: number; + offset?: number; + type: ComponentType; + } + + enum ComponentType { + Compound = 2, + Internal = 6, + PointSymbol = 1, + RasterImage = 7, + StrokePattern = 3, + StrokePoint = 4 + } + + interface CompoundProps { + // (undocumented) + comps: Components; + } + + enum PointSymbolFlags { + Is3d = 1, + None = 0, + NoScale = 2 + } + + interface PointSymbolProps { + baseX?: number; + baseY?: number; + baseZ?: number; + geomPartId: Id64String; + scale?: number; + sizeX?: number; + sizeY?: number; + sizeZ?: number; + symFlags?: PointSymbolFlags; + } + + interface RasterImageProps { + descr: string; + flags?: number; + imageId?: number; + trueWidth?: number; + x: number; + y: number; + } + + enum StrokeCap { + Arc = 30, + Closed = 0, + Decagon = 5, + Extended = 2, + Hexagon = 3, + Octagon = 4, + Open = 1 + } + + enum StrokeMode { + Dash = 1, + FirstInvert = 8, + Gap = 0, + LastInvert = 16, + Ray = 2, + Scale = 4 + } + + enum StrokePatternOptions { + AutoPhase = 1, + CenterStretch = 32, + Iteration = 8, + None = 0, + Segment = 16 + } + + interface StrokePatternProps { + descr: string; + maxIter?: number; + options?: StrokePatternOptions; + phase?: number; + strokes: Strokes; + } + + interface StrokePointProps { + descr: string; + lcId: number; + lcType?: ComponentType; + symbols: Symbols; + } + + interface StrokeProps { + capMode?: StrokeCap; + endWidth?: number; + length: number; + orgWidth?: number; + strokeMode?: StrokeMode; + widthMode?: StrokeWidth; + } + + enum StrokeWidth { + Full = 3, + Left = 1, + None = 0, + Right = 2 + } + + enum StyleFlags { + Continuous = 8, + None = 0, + NoSnap = 4, + Physical = 128 + } + + interface StyleProps { + compId: number; + compType: ComponentType; + flags?: StyleFlags; + unitDef?: number; + } + + enum SymbolOptions { + AbsoluteRotation = 64, + AdjustRotation = 32, + Center = 3, + CurveEnd = 8, + CurveOrigin = 4, + CurveVertex = 16, + End = 2, + NoClip = 512, + None = 0, + NoPartial = 1024, + NoScale = 256, + Origin = 1, + ProjectOrigin = 2048, + UseColor = 16384, + UseWeight = 32768 + } + + interface SymbolProps { + angle?: number; + mod1?: SymbolOptions; + strokeNum?: number; + symId: number; + symType?: ComponentType; + xOffset?: number; + yOffset?: number; + } + + class Utils { + // WARNING: The type "CompoundProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + static createCompoundComponent(iModel: IModelDb, props: CompoundProps): StyleProps | undefined; + // WARNING: The type "PointSymbolProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + static createPointSymbolComponent(iModel: IModelDb, props: PointSymbolProps): StyleProps | undefined; + // WARNING: The type "RasterImageProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + static createRasterComponent(iModel: IModelDb, props: RasterImageProps, image: Uint8Array): StyleProps | undefined; + // WARNING: The type "StrokePatternProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + static createStrokePatternComponent(iModel: IModelDb, props: StrokePatternProps): StyleProps | undefined; + // WARNING: The type "StrokePointProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + static createStrokePointComponent(iModel: IModelDb, props: StrokePointProps): StyleProps | undefined; + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + static createStyle(imodel: IModelDb, scopeModelId: Id64String, name: string, props: StyleProps): Id64String; + static getOrCreateContinuousStyle(imodel: IModelDb, scopeModelId: Id64String, width?: number): Id64String; + static getOrCreateLinePixelsStyle(imodel: IModelDb, scopeModelId: Id64String, linePixels: LinePixels): Id64String; + static queryStyle(imodel: IModelDb, scopeModelId: Id64String, name: string): Id64String | undefined; + } + +} + +// @public +class LinkElement extends InformationReferenceElement { + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; +} + +// @public +class LinkModel extends InformationModel { +} + +// @public +class LinkPartition extends InformationPartitionElement { +} + +// @public +class MetaDataRegistry { + add(classFullName: string, metaData: EntityMetaData): void; + find(classFullName: string): EntityMetaData | undefined; +} + +// @public +class Model extends Entity, implements ModelProps { + constructor(props: ModelProps, iModel: IModelDb); + buildConcurrencyControlRequest(opcode: DbOpcode): void; + // (undocumented) + getJsonProperty(name: string): any; + getUserProperties(namespace: string): any; + // (undocumented) + isPrivate: boolean; + // (undocumented) + isTemplate: boolean; + // (undocumented) + readonly jsonProperties: any; + // (undocumented) + readonly modeledElement: RelatedElement; + // (undocumented) + readonly name: string; + // (undocumented) + static onDelete(_props: ModelProps): IModelStatus; + // (undocumented) + static onDeleted(_props: ModelProps): void; + // (undocumented) + static onInsert(_props: ModelProps): IModelStatus; + // (undocumented) + static onInserted(_id: string): void; + // (undocumented) + static onUpdate(_props: ModelProps): IModelStatus; + // (undocumented) + static onUpdated(_props: ModelProps): void; + // (undocumented) + readonly parentModel: Id64String; + removeUserProperties(nameSpace: string): void; + // (undocumented) + setJsonProperty(name: string, value: any): void; + setUserProperties(nameSpace: string, value: any): void; + toJSON(): ModelProps; +} + +// @public +class ModelSelector extends DefinitionElement, implements ModelSelectorProps { + constructor(props: ModelSelectorProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, models: Id64Array): ModelSelector; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, models: Id64Array): Id64String; + models: string[]; + // (undocumented) + toJSON(): ModelSelectorProps; +} + +// @public +class OpenParams { + constructor( + openMode: OpenMode, + accessMode?: AccessMode | undefined, + syncMode?: SyncMode | undefined, + exclusiveAccessOption?: ExclusiveAccessOption | undefined); + readonly accessMode?: AccessMode | undefined; + equals(other: OpenParams): boolean; + readonly exclusiveAccessOption?: ExclusiveAccessOption | undefined; + static fixedVersion(accessMode?: AccessMode, exclusiveAccessOption?: ExclusiveAccessOption): OpenParams; + readonly isStandalone: boolean; + readonly openMode: OpenMode; + static pullAndPush(exclusiveAccessOption?: ExclusiveAccessOption): OpenParams; + static pullOnly(accessMode?: AccessMode, exclusiveAccessOption?: ExclusiveAccessOption): OpenParams; + static standalone(openMode: OpenMode): OpenParams; + readonly syncMode?: SyncMode | undefined; +} + +// @public +class OrthographicViewDefinition extends SpatialViewDefinition { + constructor(props: SpatialViewDefinitionProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, modelSelectorId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range3d, standardView?: StandardViewIndex): OrthographicViewDefinition; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, modelSelectorId: Id64String, categorySelectorId: Id64String, displayStyleId: Id64String, range: Range3d, standardView?: StandardViewIndex): Id64String; + setRange(range: Range3d): void; +} + +// @public +class PhysicalElement extends SpatialElement { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class PhysicalElementAssemblesElements extends ElementOwnsChildElements { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class PhysicalElementFulfillsFunction extends ElementRefersToElements { +} + +// @public +class PhysicalElementIsOfType extends RelatedElement { + constructor(id: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class PhysicalModel extends SpatialModel { + static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String; +} + +// @public (undocumented) +class PhysicalObject extends PhysicalElement { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class PhysicalPartition extends InformationPartitionElement { +} + +// @public +class PhysicalType extends TypeDefinitionElement { + constructor(props: TypeDefinitionElementProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; +} + +// @public (undocumented) +class PlanCallout extends Callout { + constructor(props: CalloutProps, iModel: IModelDb); +} + +// @public +class Platform { + static readonly electron: any; + static readonly imodeljsMobile: any; + static readonly isDesktop: boolean; + static readonly isMobile: boolean; + static readonly isNodeJs: boolean; + // (undocumented) + static load(dir?: string): typeof IModelJsNative; + static readonly platformName: string; +} + +// @public +class RecipeDefinitionElement extends DefinitionElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class Relationship extends Entity, implements RelationshipProps { + constructor(props: RelationshipProps, iModel: IModelDb); + buildConcurrencyControlRequest(opcode: DbOpcode): void; + delete(): void; + // (undocumented) + static getInstance(iModel: IModelDb, criteria: Id64String | SourceAndTarget): T; + insert(): Id64String; + // (undocumented) + static onDeletedDependency(_props: RelationshipProps, _iModel: IModelDb): void; + // (undocumented) + static onRootChanged(_props: RelationshipProps, _iModel: IModelDb): void; + // (undocumented) + static onValidateOutput(_props: RelationshipProps, _iModel: IModelDb): void; + // (undocumented) + readonly sourceId: Id64String; + // (undocumented) + readonly targetId: Id64String; + // (undocumented) + toJSON(): RelationshipProps; + update(): void; +} + +// @public +interface RelationshipProps extends EntityProps, SourceAndTarget { +} + +// @public +class Relationships { + constructor(iModel: IModelDb); + createInstance(props: RelationshipProps): Relationship; + deleteInstance(props: RelationshipProps): void; + getInstance(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T; + getInstanceProps(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T; + insertInstance(props: RelationshipProps): Id64String; + updateInstance(props: RelationshipProps): void; +} + +// @public (undocumented) +class RenderMaterial { +} + +// @public +class RenderMaterialOwnsRenderMaterials extends ElementOwnsChildElements { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class RepositoryLink extends UrlLink { +} + +// @public +class RepositoryModel extends DefinitionModel { +} + +// @public +class RoleElement extends Element { +} + +// @public +class RoleModel extends Model { +} + +// @public +class Schema { + static getClass(className: string, iModel: IModelDb): typeof Entity | undefined; + // (undocumented) + readonly name: string; +} + +// @public +class Schemas { + static getRegisteredSchema(schemaName: string): Schema | undefined; + // (undocumented) + static isRegistered(schema: Schema): boolean; + static registerSchema(schema: Schema): void; + static unregisterSchema(schemaName: string): void; +} + +// @public (undocumented) +class SectionCallout extends Callout { + constructor(props: CalloutProps, iModel: IModelDb); +} + +// @public +class SectionDrawing extends Drawing { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class SectionDrawingModel extends DrawingModel { +} + +// @public +class Sheet extends Document, implements SheetProps { + constructor(props: SheetProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + height: number; + // (undocumented) + scale?: number; + // (undocumented) + sheetTemplate?: Id64String; + // (undocumented) + width: number; +} + +// @public +class SheetBorderTemplate extends Document, implements SheetBorderTemplateProps { + constructor(props: SheetBorderTemplateProps, iModel: IModelDb); + // (undocumented) + height?: number; + // (undocumented) + width?: number; +} + +// @public +class SheetModel extends GraphicalModel2d { +} + +// @public +class SheetTemplate extends Document, implements SheetTemplateProps { + constructor(props: SheetTemplateProps, iModel: IModelDb); + // (undocumented) + border?: Id64String; + // (undocumented) + height?: number; + // (undocumented) + width?: number; +} + +// @public +class SheetViewDefinition extends ViewDefinition2d { +} + +// @public +interface SourceAndTarget { + // (undocumented) + sourceId: Id64String; + // (undocumented) + targetId: Id64String; +} + +// @public +class SpatialCategory extends Category { + constructor(opts: ElementProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string): SpatialCategory; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + static getCodeSpecName(): string; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, defaultAppearance: SubCategoryAppearance.Props): Id64String; + static queryCategoryIdByName(iModel: IModelDb, scopeModelId: Id64String, categoryName: string): Id64String | undefined; +} + +// @public +class SpatialElement extends GeometricElement3d { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public (undocumented) +class SpatialLocation extends SpatialLocationElement { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class SpatialLocationElement extends SpatialElement { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class SpatialLocationIsOfType extends RelatedElement { + constructor(id: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class SpatialLocationModel extends SpatialModel { +} + +// @public +class SpatialLocationPartition extends InformationPartitionElement { +} + +// @public +class SpatialLocationType extends TypeDefinitionElement { + constructor(props: TypeDefinitionElementProps, iModel: IModelDb); + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; +} + +// @public +class SpatialModel extends GeometricModel3d { +} + +// @public +class SpatialViewDefinition extends ViewDefinition3d, implements SpatialViewDefinitionProps { + constructor(props: SpatialViewDefinitionProps, iModel: IModelDb); + loadModelSelector(): ModelSelector; + modelSelectorId: Id64String; + // (undocumented) + toJSON(): SpatialViewDefinitionProps; +} + +// @public +class SqliteStatement implements IterableIterator, IDisposable { + // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores + [Symbol.iterator](): IterableIterator; + bindValue(parameter: number | string, value: any): void; + bindValues(values: any[] | object): void; + clearBindings(): void; + dispose(): void; + getColumnCount(): number; + getRow(): any; + getValue(columnIx: number): SqliteValue; + readonly isPrepared: boolean; + readonly isReadonly: boolean; + readonly isShared: boolean; + next(): IteratorResult; + // WARNING: The type "IModelJsNative.DgnDb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "IModelJsNative.ECDb" needs to be exported by the package (e.g. added to index.ts) + prepare(db: IModelJsNative.DgnDb | IModelJsNative.ECDb, sql: string): void; + reset(): void; + setIsShared(b: boolean): void; + step(): DbResult; + stepAsync(): Promise; +} + +// @public +class SqliteStatementCache { + constructor(maxCount?: number); + // (undocumented) + add(str: string, stmt: SqliteStatement): void; + // (undocumented) + clear(): void; + // (undocumented) + find(str: string): CachedSqliteStatement | undefined; + // (undocumented) + getCount(): number; + // (undocumented) + readonly maxCount: number; + // (undocumented) + release(stmt: SqliteStatement): void; + // (undocumented) + removeUnusedStatementsIfNecessary(): void; + // (undocumented) + replace(str: string, stmt: SqliteStatement): void; +} + +// @public +class SqliteValue { + // WARNING: The type "IModelJsNative.SqliteStatement" needs to be exported by the package (e.g. added to index.ts) + constructor(stmt: IModelJsNative.SqliteStatement, colIndex: number); + readonly columnName: string; + getBlob(): Uint8Array; + getDouble(): number; + getGuid(): GuidString; + getId(): Id64String; + getInteger(): number; + getString(): string; + readonly isNull: boolean; + readonly type: SqliteValueType; + readonly value: any; +} + +// @public +enum SqliteValueType { + // (undocumented) + Blob = 4, + // (undocumented) + Double = 2, + // (undocumented) + Integer = 1, + // (undocumented) + Null = 5, + // (undocumented) + String = 3 +} + +// @public +interface StringParam { + // (undocumented) + guid?: GuidString; + // (undocumented) + id?: Id64String; +} + +// @public +class SubCategory extends DefinitionElement, implements SubCategoryProps { + constructor(props: SubCategoryProps, iModel: IModelDb); + appearance: SubCategoryAppearance; + static create(iModelDb: IModelDb, parentCategoryId: Id64String, name: string, appearance: SubCategoryAppearance.Props): SubCategory; + static createCode(iModel: IModelDb, parentCategoryId: CodeScopeProps, codeValue: string): Code; + description?: string; + getCategoryId(): Id64String; + getSubCategoryId(): Id64String; + getSubCategoryName(): string; + static insert(iModelDb: IModelDb, parentCategoryId: Id64String, name: string, appearance: SubCategoryAppearance.Props): Id64String; + readonly isDefaultSubCategory: boolean; + // (undocumented) + toJSON(): SubCategoryProps; +} + +// @public +class Subject extends InformationReferenceElement, implements SubjectProps { + constructor(props: SubjectProps, iModel: IModelDb); + static create(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, description?: string): Subject; + static createCode(iModelDb: IModelDb, parentSubjectId: CodeScopeProps, codeValue: string): Code; + // (undocumented) + description?: string; + static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, description?: string): Id64String; +} + +// @public +class SubjectOwnsPartitionElements extends ElementOwnsChildElements { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +class SubjectOwnsSubjects extends ElementOwnsChildElements { + constructor(parentId: Id64String, relClassName?: string); + // (undocumented) + static classFullName: string; +} + +// @public +enum SyncMode { + // (undocumented) + FixedVersion = 1, + // (undocumented) + PullAndPush = 3, + // (undocumented) + PullOnly = 2 +} + +// @public +class TemplateRecipe2d extends RecipeDefinitionElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class TemplateRecipe3d extends RecipeDefinitionElement { + constructor(props: ElementProps, iModel: IModelDb); +} + +// @public +class TemplateViewDefinition2d extends ViewDefinition2d { +} + +// @public +class TemplateViewDefinition3d extends ViewDefinition3d { +} + +// @public +class TextAnnotation2d extends AnnotationElement2d { + constructor(props: GeometricElement2dProps, iModel: IModelDb); +} + +// @public +class TextAnnotation3d extends GraphicalElement3d { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class Texture extends DefinitionElement, implements TextureProps { + constructor(props: TextureProps, iModel: IModelDb); + static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: string, width: number, height: number, description: string, flags: TextureFlags): Texture; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, name: string): Code; + // (undocumented) + data: string; + // (undocumented) + description?: string; + // (undocumented) + flags: TextureFlags; + // (undocumented) + format: ImageSourceFormat; + // (undocumented) + height: number; + static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: string, width: number, height: number, description: string, flags: TextureFlags): Id64String; + // (undocumented) + toJSON(): TextureProps; + // (undocumented) + width: number; +} + +// @public (undocumented) +class TitleText extends DetailingSymbol { + constructor(props: GeometricElement2dProps, iModel: IModelDb); +} + +// @public (undocumented) +enum TxnAction { + // (undocumented) + Abandon = 2, + // (undocumented) + Commit = 1, + // (undocumented) + Merge = 5, + // (undocumented) + None = 0, + // (undocumented) + Reinstate = 4, + // (undocumented) + Reverse = 3 +} + +// @public +class TxnManager { + constructor(_iModel: IModelDb); + // (undocumented) + protected _onAllInputsHandled(elClassName: string, elId: Id64String): void; + // (undocumented) + protected _onBeforeOutputsHandled(elClassName: string, elId: Id64String): void; + // (undocumented) + protected _onBeginValidate(): void; + // (undocumented) + protected _onDeletedDependency(props: RelationshipProps): void; + // (undocumented) + protected _onEndValidate(): void; + // (undocumented) + protected _onRootChanged(props: RelationshipProps): void; + // (undocumented) + protected _onValidateOutput(props: RelationshipProps): void; + beginMultiTxnOperation(): DbResult; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + cancelTo(txnId: IModelJsNative.TxnIdString): IModelStatus; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + describeChangeSet(endTxnId?: IModelJsNative.TxnIdString): string; + endMultiTxnOperation(): DbResult; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + getCurrentTxnId(): IModelJsNative.TxnIdString; + getMultiTxnOperationDepth(): number; + getRedoString(): string; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + getTxnDescription(txnId: IModelJsNative.TxnIdString): string; + getUndoString(): string; + readonly hasFatalError: boolean; + readonly hasLocalChanges: boolean; + readonly hasPendingTxns: boolean; + readonly hasUnsavedChanges: boolean; + readonly isRedoPossible: boolean; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + isTxnIdValid(txnId: IModelJsNative.TxnIdString): boolean; + readonly isUndoPossible: boolean; + readonly onAfterUndoRedo: BeEvent<(_action: TxnAction) => void>; + readonly onBeforeUndoRedo: BeEvent<() => void>; + readonly onChangesApplied: BeEvent<() => void>; + readonly onCommit: BeEvent<() => void>; + readonly onCommitted: BeEvent<() => void>; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + queryFirstTxnId(): IModelJsNative.TxnIdString; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + queryNextTxnId(txnId: IModelJsNative.TxnIdString): IModelJsNative.TxnIdString; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + queryPreviousTxnId(txnId: IModelJsNative.TxnIdString): IModelJsNative.TxnIdString; + reinstateTxn(): IModelStatus; + reportError(error: ValidationError): void; + reverseAll(): IModelStatus; + reverseSingleTxn(): IModelStatus; + // WARNING: The type "IModelJsNative.TxnIdString" needs to be exported by the package (e.g. added to index.ts) + reverseTo(txnId: IModelJsNative.TxnIdString): IModelStatus; + reverseTxns(numOperations: number): IModelStatus; + readonly validationErrors: ValidationError[]; +} + +// @public +class TypeDefinitionElement extends DefinitionElement, implements TypeDefinitionElementProps { + constructor(props: TypeDefinitionElementProps, iModel: IModelDb); + // (undocumented) + recipe?: RelatedElement; +} + +// @public +class UrlLink extends LinkElement { +} + +// @public +interface ValidationError { + errorType: string; + fatal: boolean; + message?: string; +} + +// @public +class ViewAttachment extends GraphicalElement2d, implements ViewAttachmentProps { + constructor(props: ViewAttachmentProps, iModel: IModelDb); + // (undocumented) + view: RelatedElement; +} + +// @public (undocumented) +class ViewAttachmentLabel extends DetailingSymbol, implements ViewAttachmentLabelProps { + constructor(props: ViewAttachmentLabelProps, iModel: IModelDb); +} + +// @public +class ViewDefinition extends DefinitionElement, implements ViewDefinitionProps { + protected constructor(props: ViewDefinitionProps, iModel: IModelDb); + categorySelectorId: Id64String; + static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code; + displayStyleId: Id64String; + isDrawingView(): this is DrawingViewDefinition; + isSpatialView(): this is SpatialViewDefinition; + isView2d(): this is ViewDefinition2d; + isView3d(): this is ViewDefinition3d; + loadCategorySelector(): CategorySelector; + loadDisplayStyle(): DisplayStyle; + // (undocumented) + toJSON(): ViewDefinitionProps; +} + +// @public +class ViewDefinition2d extends ViewDefinition, implements ViewDefinition2dProps { + constructor(props: ViewDefinition2dProps, iModel: IModelDb); + angle: Angle; + baseModelId: Id64String; + delta: Point2d; + loadDisplayStyle2d(): DisplayStyle2d; + origin: Point2d; + // (undocumented) + toJSON(): ViewDefinition2dProps; +} + +// @public +class ViewDefinition3d extends ViewDefinition, implements ViewDefinition3dProps { + constructor(props: ViewDefinition3dProps, iModel: IModelDb); + angles: YawPitchRollAngles; + camera: Camera; + cameraOn: boolean; + extents: Vector3d; + loadDisplayStyle3d(): DisplayStyle3d; + origin: Point3d; + // (undocumented) + toJSON(): ViewDefinition3dProps; +} + +// @public +class VolumeElement extends SpatialLocationElement { + constructor(props: GeometricElement3dProps, iModel: IModelDb); +} + +// @public +class WebMercatorModel extends SpatialModel { +} + +// WARNING: Unsupported export: AutoPushEventHandler +// WARNING: Unsupported export: SchemaKey +// WARNING: Unsupported export: SchemaMatchType +// WARNING: Unsupported export: ExportGraphicsFunction +// WARNING: Unsupported export: ChangeSetDescriber +// (No @packagedocumentation comment for this package) diff --git a/common/api/imodeljs-clients-backend.api.ts b/common/api/imodeljs-clients-backend.api.ts index 0ba93d7..57cb37e 100644 --- a/common/api/imodeljs-clients-backend.api.ts +++ b/common/api/imodeljs-clients-backend.api.ts @@ -1,120 +1,120 @@ -// @public -class AzureFileHandler implements FileHandler { - constructor(threshold?: number); - // (undocumented) - agent: https.Agent; - basename(filePath: string): string; - downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, downloadToPathname: string, fileSize?: number, progressCallback?: (progress: ProgressInfo) => void): Promise; - exists(filePath: string): boolean; - getFileSize(filePath: string): number; - isDirectory(filePath: string): boolean; - join(...paths: string[]): string; - uploadFile(alctx: ActivityLoggingContext, uploadUrlString: string, uploadFromPathname: string, progressCallback?: (progress: ProgressInfo) => void): Promise; -} - -// @public -class IOSAzureFileHandler implements FileHandler { - constructor(); - // (undocumented) - agent: any; - basename(filePath: string): string; - downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, downloadToPathname: string): Promise; - exists(filePath: string): boolean; - getFileSize(filePath: string): number; - isDirectory(filePath: string): boolean; - join(...paths: string[]): string; - uploadFile(alctx: ActivityLoggingContext, uploadUrlString: string, uploadFromPathname: string): Promise; -} - -// @public -class OidcAgentClient extends OidcBackendClient { - constructor(_agentConfiguration: OidcAgentClientConfiguration); - // (undocumented) - getToken(actx: ActivityLoggingContext): Promise; - // (undocumented) - refreshToken(actx: ActivityLoggingContext, jwt: AccessToken): Promise; -} - -// @public -interface OidcAgentClientConfiguration extends OidcBackendClientConfiguration { - // (undocumented) - serviceUserEmail: string; - // (undocumented) - serviceUserPassword: string; -} - -// @public -class OidcAgentClientV2 extends OidcBackendClient { - constructor(agentConfiguration: OidcAgentClientConfigurationV2); - // (undocumented) - getToken(actx: ActivityLoggingContext): Promise; - refreshToken(actx: ActivityLoggingContext, jwt: AccessToken): Promise; -} - -// @public -class OidcBackendClient extends OidcClient { - constructor(configuration: OidcBackendClientConfiguration); - // (undocumented) - protected _configuration: OidcBackendClientConfiguration; - // WARNING: The type "TokenSet" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected createToken(tokenSet: TokenSet, userInfo?: UserInfo): AccessToken; - // WARNING: The type "Issuer" needs to be exported by the package (e.g. added to index.ts) - discoverEndpoints(actx: ActivityLoggingContext): Promise; - // WARNING: The type "OpenIdClient" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected getClient(actx: ActivityLoggingContext): Promise; -} - -// @public -interface OidcBackendClientConfiguration { - clientId: string; - clientSecret: string; - scope: string; -} - -// @public -class OidcDelegationClient extends OidcBackendClient { - constructor(configuration: OidcDelegationClientConfiguration); - getJwtFromJwt(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; - getJwtFromSaml(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; - getSamlFromJwt(actx: ActivityLoggingContext, jwt: AccessToken): Promise; -} - -// @public (undocumented) -class OidcDeviceClient extends OidcClient, implements IOidcFrontendClient { - constructor(clientConfiguration: OidcFrontendClientConfiguration); - dispose(): void; - getAccessToken(actx: ActivityLoggingContext): Promise; - // (undocumented) - getIsSignedIn(): boolean; - initialize(actx: ActivityLoggingContext): Promise; - readonly onUserStateChanged: BeEvent<(token: AccessToken | undefined) => void>; - signIn(actx: ActivityLoggingContext): void; - signOut(actx: ActivityLoggingContext): void; -} - -// @public -class RequestHost { - static initialize(): Promise; -} - -// @public -class UrlFileHandler implements FileHandler { - constructor(); - // (undocumented) - agent: https.Agent; - basename(filePath: string): string; - // (undocumented) - downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, downloadToPathname: string, fileSize?: number, progressCallback?: (progress: ProgressInfo) => void): Promise; - exists(filePath: string): boolean; - getFileSize(filePath: string): number; - isDirectory(filePath: string): boolean; - join(...paths: string[]): string; - // (undocumented) - uploadFile(_alctx: ActivityLoggingContext, uploadUrlString: string, uploadFromPathname: string, progressCallback?: (progress: ProgressInfo) => void): Promise; -} - -// WARNING: Unsupported export: OidcDelegationClientConfiguration -// WARNING: Unsupported export: OidcAgentClientConfigurationV2 -// (No @packagedocumentation comment for this package) +// @public +class AzureFileHandler implements FileHandler { + constructor(threshold?: number); + // (undocumented) + agent: https.Agent; + basename(filePath: string): string; + downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, downloadToPathname: string, fileSize?: number, progressCallback?: (progress: ProgressInfo) => void): Promise; + exists(filePath: string): boolean; + getFileSize(filePath: string): number; + isDirectory(filePath: string): boolean; + join(...paths: string[]): string; + uploadFile(alctx: ActivityLoggingContext, uploadUrlString: string, uploadFromPathname: string, progressCallback?: (progress: ProgressInfo) => void): Promise; +} + +// @public +class IOSAzureFileHandler implements FileHandler { + constructor(); + // (undocumented) + agent: any; + basename(filePath: string): string; + downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, downloadToPathname: string): Promise; + exists(filePath: string): boolean; + getFileSize(filePath: string): number; + isDirectory(filePath: string): boolean; + join(...paths: string[]): string; + uploadFile(alctx: ActivityLoggingContext, uploadUrlString: string, uploadFromPathname: string): Promise; +} + +// @public +class OidcAgentClient extends OidcBackendClient { + constructor(_agentConfiguration: OidcAgentClientConfiguration); + // (undocumented) + getToken(actx: ActivityLoggingContext): Promise; + // (undocumented) + refreshToken(actx: ActivityLoggingContext, jwt: AccessToken): Promise; +} + +// @public +interface OidcAgentClientConfiguration extends OidcBackendClientConfiguration { + // (undocumented) + serviceUserEmail: string; + // (undocumented) + serviceUserPassword: string; +} + +// @public +class OidcAgentClientV2 extends OidcBackendClient { + constructor(agentConfiguration: OidcAgentClientConfigurationV2); + // (undocumented) + getToken(actx: ActivityLoggingContext): Promise; + refreshToken(actx: ActivityLoggingContext, jwt: AccessToken): Promise; +} + +// @public +class OidcBackendClient extends OidcClient { + constructor(configuration: OidcBackendClientConfiguration); + // (undocumented) + protected _configuration: OidcBackendClientConfiguration; + // WARNING: The type "TokenSet" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected createToken(tokenSet: TokenSet, userInfo?: UserInfo): AccessToken; + // WARNING: The type "Issuer" needs to be exported by the package (e.g. added to index.ts) + discoverEndpoints(actx: ActivityLoggingContext): Promise; + // WARNING: The type "OpenIdClient" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected getClient(actx: ActivityLoggingContext): Promise; +} + +// @public +interface OidcBackendClientConfiguration { + clientId: string; + clientSecret: string; + scope: string; +} + +// @public +class OidcDelegationClient extends OidcBackendClient { + constructor(configuration: OidcDelegationClientConfiguration); + getJwtFromJwt(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; + getJwtFromSaml(actx: ActivityLoggingContext, accessToken: AccessToken): Promise; + getSamlFromJwt(actx: ActivityLoggingContext, jwt: AccessToken): Promise; +} + +// @public (undocumented) +class OidcDeviceClient extends OidcClient, implements IOidcFrontendClient { + constructor(clientConfiguration: OidcFrontendClientConfiguration); + dispose(): void; + getAccessToken(actx: ActivityLoggingContext): Promise; + // (undocumented) + getIsSignedIn(): boolean; + initialize(actx: ActivityLoggingContext): Promise; + readonly onUserStateChanged: BeEvent<(token: AccessToken | undefined) => void>; + signIn(actx: ActivityLoggingContext): void; + signOut(actx: ActivityLoggingContext): void; +} + +// @public +class RequestHost { + static initialize(): Promise; +} + +// @public +class UrlFileHandler implements FileHandler { + constructor(); + // (undocumented) + agent: https.Agent; + basename(filePath: string): string; + // (undocumented) + downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, downloadToPathname: string, fileSize?: number, progressCallback?: (progress: ProgressInfo) => void): Promise; + exists(filePath: string): boolean; + getFileSize(filePath: string): number; + isDirectory(filePath: string): boolean; + join(...paths: string[]): string; + // (undocumented) + uploadFile(_alctx: ActivityLoggingContext, uploadUrlString: string, uploadFromPathname: string, progressCallback?: (progress: ProgressInfo) => void): Promise; +} + +// WARNING: Unsupported export: OidcDelegationClientConfiguration +// WARNING: Unsupported export: OidcAgentClientConfigurationV2 +// (No @packagedocumentation comment for this package) diff --git a/common/api/imodeljs-clients.api.ts b/common/api/imodeljs-clients.api.ts index 9912ab9..b1d9b8e 100644 --- a/common/api/imodeljs-clients.api.ts +++ b/common/api/imodeljs-clients.api.ts @@ -1,1646 +1,1657 @@ -// @public -class AccessToken extends Token { - // (undocumented) - static foreignProjectAccessTokenJsonProperty: string; - // (undocumented) - static fromForeignProjectAccessTokenJson(foreignJsonStr: string): AccessToken | undefined; - // (undocumented) - static fromJson(jsonObj: any): AccessToken | undefined; - static fromJsonWebTokenString(jwt: string, startsAt: Date, expiresAt: Date, userInfo?: UserInfo): AccessToken; - // (undocumented) - static fromSamlAssertion(samlAssertion: string): AuthorizationToken; - static fromSamlTokenString(accessTokenString: string, includesPrefix?: IncludePrefix): AccessToken; - // (undocumented) - toTokenString(includePrefix?: IncludePrefix): string; -} - -// @public -export function addSelectFileAccessKey(query: RequestQueryOptions): void; - -// @public -class AggregateResponseError extends Error { - errors: ResponseError[]; -} - -// @public -class AllCodesDeletedEvent extends BriefcaseEvent { -} - -// @public -class AllLocksDeletedEvent extends BriefcaseEvent { -} - -// @public (undocumented) -class ArgumentCheck { - // (undocumented) - static defined(argumentName: string, argument?: any): void; - // (undocumented) - static definedNumber(argumentName: string, argument?: number): void; - // (undocumented) - static nonEmptyArray(argumentName: string, argument?: any[]): void; - // (undocumented) - static valid(argumentName: string, argument?: any): void; - static validBriefcaseId(argumentName: string, argument?: number): void; - // (undocumented) - static validChangeSetId(argumentName: string, argument?: string): void; - // (undocumented) - static validGuid(argumentName: string, argument?: string): void; -} - -// @public -class AuthenticationError extends ResponseError { -} - -// @public -class AuthorizationToken extends Token { - // (undocumented) - static clone(unTypedObj: any): AuthorizationToken; - // (undocumented) - static fromSamlAssertion(samlAssertion: string): AuthorizationToken; - // (undocumented) - toTokenString(includePrefix?: IncludePrefix): string; -} - -// @public -class Briefcase extends WsgInstance { - // (undocumented) - accessMode?: BriefcaseAccessMode; - acquiredDate?: string; - briefcaseId?: number; - downloadUrl?: string; - fileDescription?: string; - fileId?: GuidString; - fileName?: string; - fileSize?: string; - // (undocumented) - iModelId?: GuidString; - isReadOnly?: boolean; - // (undocumented) - lastAccessedAt?: Date; - // (undocumented) - localPathname?: string; - mergedChangeSetId?: string; - userId?: string; -} - -// @public -enum BriefcaseAccessMode { - // (undocumented) - Exclusive = 1, - // (undocumented) - Shared = 0 -} - -// @public -class BriefcaseDeletedEvent extends BriefcaseEvent { -} - -// @public -class BriefcaseEvent extends IModelHubEvent { - briefcaseId?: number; - fromJson(obj: any): void; -} - -// @public -class BriefcaseHandler { - constructor(handler: IModelBaseHandler, fileHandler?: FileHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString): Promise; - delete(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, briefcaseId: number): Promise; - download(alctx: ActivityLoggingContext, briefcase: Briefcase, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: BriefcaseQuery): Promise; -} - -// @public -class BriefcaseQuery extends Query { - byId(id: number): this; - getId(): number | undefined; - selectDownloadUrl(): this; -} - -// @public -class ChangeSet extends WsgInstance { - briefcaseId?: number; - changesType?: ChangesType; - description?: string; - downloadUrl?: string; - fileName?: string; - fileSize?: string; - id?: string; - index?: string; - isUploaded?: boolean; - parentId?: string; - pathname?: string; - pushDate?: string; - seedFileId?: GuidString; - uploadUrl?: string; - userCreated?: string; -} - -// @public -class ChangeSetCreatedEvent extends IModelHubGlobalEvent { - // (undocumented) - briefcaseId?: number; - // (undocumented) - changeSetId?: string; - // (undocumented) - changeSetIndex?: string; - fromJson(obj: any): void; -} - -// @public -class ChangeSetHandler { - constructor(handler: IModelBaseHandler, fileHandler?: FileHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, changeSet: ChangeSet, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; - download(alctx: ActivityLoggingContext, changeSets: ChangeSet[], path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: ChangeSetQuery): Promise; -} - -// @public -class ChangeSetPostPushEvent extends BriefcaseEvent { - changeSetId?: string; - changeSetIndex?: string; - fromJson(obj: any): void; -} - -// @public -class ChangeSetPrePushEvent extends IModelHubEvent { -} - -// @public -class ChangeSetQuery extends StringIdQuery { - afterVersion(versionId: GuidString): this; - betweenChangeSets(firstChangeSetId: string, secondChangeSetId?: string): this; - betweenVersionAndChangeSet(versionId: GuidString, changeSetId: string): this; - betweenVersions(sourceVersionId: GuidString, destinationVersionId: GuidString): this; - bySeedFileId(seedFileId: GuidString): this; - // (undocumented) - protected checkValue(id: string): void; - fromId(id: string): this; - getVersionChangeSets(versionId: GuidString): this; - latest(): this; - selectDownloadUrl(): this; -} - -// @public -enum ChangesType { - Regular = 0, - Schema = 1 -} - -// @public (undocumented) -interface ClassKeyMapInfo { - classKeyPropertyName?: string; - classPropertyName?: string; - schemaPropertyName?: string; -} - -// @public -class Client { - protected constructor(); - // (undocumented) - protected _url?: string; - protected delete(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string): Promise; - getUrl(alctx: ActivityLoggingContext): Promise; - protected abstract getUrlSearchKey(): string; - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// @public -class CodeBase extends WsgInstance { - briefcaseId?: number; - codeScope?: string; - codeSpecId?: Id64String; - createdDate?: string; - queryOnly?: boolean; - state?: CodeState; -} - -// @public -class CodeEvent extends BriefcaseEvent { - codeScope?: string; - codeSpecId?: Id64String; - fromJson(obj: any): void; - state?: CodeState; - values?: string[]; -} - -// @public -class CodeHandler { - constructor(handler: IModelBaseHandler); - deleteAll(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, briefcaseId: number): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: CodeQuery): Promise; - readonly sequences: CodeSequenceHandler; - update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, codes: HubCode[], updateOptions?: CodeUpdateOptions): Promise; -} - -// @public -class CodeQuery extends Query { - byBriefcaseId(briefcaseId: number): this; - byCodes(codes: HubCode[]): this; - byCodeScope(codeScope: string): this; - byCodeSpecId(codeSpecId: Id64String): this; - readonly isMultiCodeQuery: boolean; - top(n: number): this; - unavailableCodes(briefcaseId: number): this; -} - -// @public -class CodeSequence extends WsgInstance { - codeScope?: string; - codeSpecId?: Id64String; - incrementBy?: number; - startIndex?: number; - type?: CodeSequenceType; - value?: string; - valuePattern?: string; -} - -// @public -class CodeSequenceHandler { - constructor(handler: IModelBaseHandler); - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, sequence: CodeSequence): Promise; -} - -// @public -enum CodeSequenceType { - LargestUsed = 0, - NextAvailable = 1 -} - -// @public -enum CodeState { - Available = 0, - Reserved = 1, - Retired = 3, - Used = 2 -} - -// @public -interface CodeUpdateOptions { - codesPerRequest?: number; - continueOnConflict?: boolean; - deniedCodes?: boolean; - unlimitedReporting?: boolean; -} - -// @public -class Config { - static readonly App: Config; - // WARNING: The type "ValueType" needs to be exported by the package (e.g. added to index.ts) - get(varName: string, defaultVal?: ValueType): any; - getBoolean(name: string, defaultVal?: boolean): boolean; - getContainer(): any; - getNumber(name: string, defaultVal?: number): number; - getString(name: string, defaultVal?: string): string; - getVars(): string[]; - has(varName: string): boolean; - merge(source: any): void; - remove(varName: string): void; - // WARNING: The type "ValueType" needs to be exported by the package (e.g. added to index.ts) - set(varName: string, value: ValueType): void; -} - -// @public -class ConflictingCodesError extends IModelHubError { - addCodes(error: IModelHubError): void; - conflictingCodes?: HubCode[]; - static fromError(error: IModelHubError): ConflictingCodesError | undefined; -} - -// @public -class ConflictingLocksError extends IModelHubError { - addLocks(error: IModelHubError): void; - conflictingLocks?: Lock[]; - static fromError(error: IModelHubError): ConflictingLocksError | undefined; -} - -// WARNING: configRelyingPartyUri has incomplete type information -// @public -class ConnectClient extends WsgClient { - constructor(); - getInvitedProjects(alctx: ActivityLoggingContext, token: AccessToken, queryOptions?: ConnectRequestQueryOptions): Promise; - getProject(alctx: ActivityLoggingContext, token: AccessToken, queryOptions?: ConnectRequestQueryOptions): Promise; - getProjects(alctx: ActivityLoggingContext, token: AccessToken, queryOptions?: ConnectRequestQueryOptions): Promise; - protected getRelyingPartyUrl(): string; - protected getUrlSearchKey(): string; - // (undocumented) - static readonly searchKey: string; - // (undocumented) - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// @public -interface ConnectRequestQueryOptions extends RequestQueryOptions { - isFavorite?: boolean; - isMRU?: boolean; -} - -// @public -class ConnectSettingsClient extends Client, implements SettingsAdmin { - constructor(applicationId: string); - // (undocumented) - applicationId: string; - // (undocumented) - deleteSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - // (undocumented) - deleteUserSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - getAccessToken(alctx: ActivityLoggingContext, authSamlToken: AuthorizationToken): Promise; - // (undocumented) - getSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - protected getUrlSearchKey(): string; - // (undocumented) - getUserSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - // (undocumented) - saveSetting(alctx: ActivityLoggingContext, settings: any, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - // (undocumented) - saveUserSetting(alctx: ActivityLoggingContext, settings: any, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - // (undocumented) - static readonly searchKey: string; -} - -// @public -class DefaultCodeUpdateOptionsProvider { - constructor(); - // (undocumented) - protected _defaultOptions: CodeUpdateOptions; - assignOptions(options: CodeUpdateOptions): Promise; -} - -// @public -class DefaultLockUpdateOptionsProvider { - constructor(); - // (undocumented) - protected _defaultOptions: LockUpdateOptions; - assignOptions(options: LockUpdateOptions): Promise; -} - -// @public -class DefaultRequestOptionsProvider { - constructor(); - // (undocumented) - protected _defaultOptions: RequestOptions; - assignOptions(options: RequestOptions): Promise; -} - -// @public -class DefaultWsgRequestOptionsProvider extends DefaultRequestOptionsProvider { - constructor(); -} - -// @public -class ECInstance { - // (undocumented) - [index: string]: any; - // (undocumented) - ecId: string; -} - -// @public -class ECJsonTypeMap { - static classToJson(applicationKey: string, classKey: string, classKeyMapInfo: ClassKeyMapInfo): (typedConstructor: ConstructorType) => void; - static fromJson(typedConstructor: new () => T, applicationKey: string, ecJsonInstance: any): T | undefined; - static propertyToJson(applicationKey: string, propertyAccessString: string): (object: any, propertyKey: string) => void; - static toJson(applicationKey: string, typedInstance: T): any | undefined; -} - -// @public -class EventHandler extends EventBaseHandler { - constructor(handler: IModelBaseHandler); - createListener(alctx: ActivityLoggingContext, authenticationCallback: () => Promise, subscriptionId: string, imodelId: GuidString, listener: (event: IModelHubEvent) => void): () => void; - getEvent(alctx: ActivityLoggingContext, sasToken: string, baseAddress: string, subscriptionId: string, timeout?: number): Promise; - getSASToken(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString): Promise; - readonly subscriptions: EventSubscriptionHandler; -} - -// @public -class EventSAS extends BaseEventSAS { -} - -// @public -class EventSubscription extends WsgInstance { - eventTypes?: EventType[]; -} - -// @public -class EventSubscriptionHandler { - constructor(handler: IModelBaseHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, events: EventType[]): Promise; - delete(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, eventSubscriptionId: string): Promise; - update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, subscription: EventSubscription): Promise; -} - -// @public -class FeatureEndedLogEntry extends FeatureLogEntry { - constructor(featureId: GuidString, startEntryId: GuidString, hostName: string, usageType: UsageType); - static fromStartEntry(startEntry: FeatureStartedLogEntry): FeatureEndedLogEntry; - // (undocumented) - readonly startEntryId: GuidString; -} - -// @public -class FeatureLogEntry { - constructor(featureId: GuidString, hostName: string, usageType: UsageType); - readonly featureId: GuidString; - readonly hostName: string; - productId?: number; - productVersion?: ProductVersion; - projectId?: GuidString; - readonly timestamp: string; - usageData: FeatureLogEntryAttribute[]; - readonly usageType: UsageType; - userInfo?: UsageUserInfo; -} - -// @public -interface FeatureLogEntryAttribute { - // (undocumented) - name: string; - // (undocumented) - value: any; -} - -// @public (undocumented) -interface FeatureLogEntryAttributeJson { - // (undocumented) - name: string; - // (undocumented) - value: string; -} - -// @public -interface FeatureLogEntryJson extends UsageLogEntryJson { - eDateZ: string; - ftrID: GuidString; - sDateZ: string; - uData: FeatureLogEntryAttributeJson[]; -} - -// @public -class FeatureStartedLogEntry extends FeatureLogEntry { - constructor(featureId: GuidString, hostName: string, usageType: UsageType); - readonly entryId: GuidString; -} - -// @public (undocumented) -class FileAccessKey extends WsgInstance { - // (undocumented) - permissions?: string; - // (undocumented) - requiresConfirmation?: string; - // (undocumented) - type?: string; - // (undocumented) - url?: string; -} - -// @public -interface FileHandler { - // (undocumented) - agent: https.Agent; - basename(filePath: string): string; - downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, path: string, fileSize?: number, progress?: (progress: ProgressInfo) => void): Promise; - exists(filePath: string): boolean; - getFileSize(filePath: string): number; - isDirectory(filePath: string): boolean; - join(...paths: string[]): string; - uploadFile(alctx: ActivityLoggingContext, uploadUrlString: string, path: string, progress?: (progress: ProgressInfo) => void): Promise; -} - -// @public -export function getArrayBuffer(alctx: ActivityLoggingContext, url: string): Promise; - -// @public -enum GetEventOperationType { - Destructive = 0, - Peek = 1 -} - -// @public -export function getJson(alctx: ActivityLoggingContext, url: string): Promise; - -// @public -class GlobalEventHandler extends EventBaseHandler { - constructor(handler: IModelBaseHandler); - createListener(alctx: ActivityLoggingContext, authenticationCallback: () => Promise, subscriptionInstanceId: string, listener: (event: IModelHubGlobalEvent) => void): () => void; - getEvent(alctx: ActivityLoggingContext, sasToken: string, baseAddress: string, subscriptionInstanceId: string, timeout?: number, getOperation?: GetEventOperationType): Promise; - getSASToken(alctx: ActivityLoggingContext, token: AccessToken): Promise; - readonly subscriptions: GlobalEventSubscriptionHandler; -} - -// @public -class GlobalEventSAS extends BaseEventSAS { -} - -// @public -class GlobalEventSubscription extends WsgInstance { - // (undocumented) - eventTypes?: GlobalEventType[]; - // (undocumented) - subscriptionId?: string; -} - -// @public -class GlobalEventSubscriptionHandler { - constructor(handler: IModelBaseHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, subscriptionId: GuidString, globalEvents: GlobalEventType[]): Promise; - delete(alctx: ActivityLoggingContext, token: AccessToken, subscriptionInstanceId: string): Promise; - update(alctx: ActivityLoggingContext, token: AccessToken, subscription: GlobalEventSubscription): Promise; -} - -// @public -class HardiModelDeleteEvent extends IModelHubGlobalEvent { -} - -// @public -class HubCode extends CodeBase { - value?: string; -} - -// @public -class HubIModel extends WsgInstance { - createdDate?: string; - description?: string; - id?: GuidString; - iModelTemplate?: string; - initialized?: boolean; - name?: string; - userCreated?: string; -} - -// @public -class HubUserInfo extends WsgInstance { - email?: string; - firstName?: string; - id?: string; - lastName?: string; -} - -// @public -interface IAccessTokenManager { - getAccessToken(actx: ActivityLoggingContext): Promise; -} - -// @public (undocumented) -class IModelBankClient extends IModelClient { - constructor(url: string, handler: FileHandler | undefined); -} - -// @public (undocumented) -class IModelBankFileSystemContextClient implements ContextManagerClient { - constructor(baseUri: string); - // (undocumented) - baseUri: string; - // (undocumented) - createContext(alctx: ActivityLoggingContext, accessToken: AccessToken, name: string): Promise; - // (undocumented) - deleteContext(alctx: ActivityLoggingContext, accessToken: AccessToken, contextId: string): Promise; - // (undocumented) - queryContextByName(alctx: ActivityLoggingContext, accessToken: AccessToken, projectName: string): Promise; -} - -// @public (undocumented) -class IModelBankHandler extends IModelBaseHandler { - constructor(url: string, handler: FileHandler | undefined, keepAliveDuration?: number); - // (undocumented) - getUrl(_actx: ActivityLoggingContext, excludeApiVersion?: boolean): Promise; - // (undocumented) - protected getUrlSearchKey(): string; -} - -// WARNING: configRelyingPartyUri has incomplete type information -// @public -class IModelBaseHandler extends WsgClient { - constructor(keepAliveDuration?: number, fileHandler?: FileHandler); - // (undocumented) - protected _agent: any; - // (undocumented) - protected _fileHandler: FileHandler | undefined; - // (undocumented) - protected _url?: string; - delete(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string): Promise; - deleteInstance(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string, instance?: T, requestOptions?: WsgRequestOptions): Promise; - // (undocumented) - formatProjectIdForUrl(projectId: string): string; - getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; - getAgent(): any; - // WARNING: The type "CustomRequestOptions" needs to be exported by the package (e.g. added to index.ts) - getCustomRequestOptions(): CustomRequestOptions; - // (undocumented) - getFileHandler(): FileHandler | undefined; - getInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions?: RequestQueryOptions): Promise; - protected getRelyingPartyUrl(): string; - getUrl(alctx: ActivityLoggingContext): Promise; - protected getUrlSearchKey(): string; - postInstance(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instance: T, requestOptions?: WsgRequestOptions): Promise; - postInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instances: T[], requestOptions?: WsgRequestOptions): Promise; - postQuery(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions: RequestQueryOptions): Promise; - // (undocumented) - static readonly searchKey: string; - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// @public -class IModelClient { - constructor(baseHandler: IModelBaseHandler, fileHandler?: FileHandler); - // (undocumented) - protected _handler: IModelBaseHandler; - readonly briefcases: BriefcaseHandler; - readonly changeSets: ChangeSetHandler; - readonly codes: CodeHandler; - readonly events: EventHandler; - readonly globalEvents: GlobalEventHandler; - readonly iModel: IModelHandler; - readonly iModels: IModelsHandler; - readonly locks: LockHandler; - // WARNING: The type "CustomRequestOptions" needs to be exported by the package (e.g. added to index.ts) - readonly requestOptions: CustomRequestOptions; - setFileHandler(fileHandler: FileHandler): void; - readonly thumbnails: ThumbnailHandler; - readonly users: UserInfoHandler; - readonly versions: VersionHandler; -} - -// @public -class IModelCreatedEvent extends IModelHubGlobalEvent { -} - -// @public -class IModelDeletedEvent extends IModelHubEvent { -} - -// @public (undocumented) -interface IModelFileSystemContextProps { - // (undocumented) - description: string; - // (undocumented) - id: string; - // (undocumented) - name: string; -} - -// @public -class IModelHandler { - constructor(handler: IModelsHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, name: string, path?: string, description?: string, progressCallback?: (progress: ProgressInfo) => void, timeOutInMilliseconds?: number): Promise; - delete(alctx: ActivityLoggingContext, token: AccessToken, contextId: string): Promise; - download(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, contextId: string): Promise; - getInitializationState(alctx: ActivityLoggingContext, token: AccessToken, contextId: string): Promise; - update(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, imodel: HubIModel): Promise; -} - -// @public -class IModelHubClient extends IModelClient { - constructor(fileHandler?: FileHandler, iModelBaseHandler?: IModelBaseHandler); - getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; -} - -// @public -class IModelHubClientError extends IModelHubError { - static browser(): IModelHubClientError; - static fileHandler(): IModelHubClientError; - static fileNotFound(): IModelHubClientError; - static fromId(id: IModelHubStatus, message: string): IModelHubClientError; - static invalidArgument(argumentName: string): IModelHubClientError; - static missingDownloadUrl(argumentName: string): IModelHubClientError; - static undefinedArgument(argumentName: string): IModelHubClientError; -} - -// @public -class IModelHubError extends WsgError { - constructor(errorNumber: number | HttpStatus, message?: string, getMetaData?: GetMetaDataFunction); - data: any; - static fromId(id: IModelHubStatus, message: string): IModelHubError; - getLogLevel(): LogFunction; - log(): void; - static parse(response: any, log?: boolean): ResponseError; - static shouldRetry(error: any, response: any): boolean; -} - -// @public -class IModelHubEvent extends IModelHubBaseEvent { - fromJson(obj: any): void; - iModelId?: GuidString; -} - -// @public -class IModelHubGlobalEvent extends IModelHubBaseEvent { - fromJson(obj: any): void; - iModelId?: GuidString; - projectId?: string; -} - -// @public -class IModelQuery extends InstanceIdQuery { - byName(name: string): this; -} - -// @public -class IModelsHandler { - constructor(handler: IModelBaseHandler, fileHandler?: FileHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, name: string, path?: string, description?: string, progressCallback?: (progress: ProgressInfo) => void, timeOutInMilliseconds?: number): Promise; - delete(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, imodelId: GuidString): Promise; - download(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, query?: IModelQuery): Promise; - getInitializationState(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString): Promise; - update(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, imodel: HubIModel): Promise; -} - -// @public -class ImsActiveSecureTokenClient extends Client { - constructor(); - getToken(alctx: ActivityLoggingContext, user: string, password: string, appId?: string): Promise; - protected getUrlSearchKey(): string; - // (undocumented) - static readonly searchKey: string; - // (undocumented) - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// @public -class ImsDelegationSecureTokenClient extends Client { - constructor(); - getToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken, relyingPartyUri?: string, appId?: string): Promise; - protected getUrlSearchKey(): string; - // (undocumented) - static readonly searchKey: string; - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// @public -class ImsFederatedAuthenticationClient extends Client { - constructor(); - protected getUrlSearchKey(): string; - static parseTokenResponse(authTokenResponse: string): AuthorizationToken | undefined; - // (undocumented) - static readonly searchKey: string; -} - -// @public (undocumented) -enum IncludePrefix { - // (undocumented) - No = 1, - // (undocumented) - Yes = 0 -} - -// @public -enum InitializationState { - CodeTooLong = 5, - Failed = 3, - NotStarted = 1, - OutdatedFile = 4, - Scheduled = 2, - SeedFileIsBriefcase = 6, - Successful = 0 -} - -// @public -class InstanceIdQuery extends Query { - // (undocumented) - protected _byId?: GuidString; - byId(id: GuidString): this; - getId(): string | undefined; -} - -// @public -interface IOidcFrontendClient extends IDisposable { - getAccessToken(actx: ActivityLoggingContext): Promise; - initialize(actx: ActivityLoggingContext): Promise; - readonly onUserStateChanged: BeEvent<(token: AccessToken | undefined) => void>; - signIn(actx: ActivityLoggingContext): void; - signOut(actx: ActivityLoggingContext): void; -} - -// @public -class LargeThumbnail extends Thumbnail { -} - -// @public -class Lock extends LockBase { - objectId?: Id64String; -} - -// @public -class LockBase extends WsgInstance { - briefcaseId?: number; - lockLevel?: LockLevel; - lockType?: LockType; - releasedWithChangeSet?: string; - releasedWithChangeSetIndex?: string; - seedFileId?: GuidString; -} - -// @public -class LockEvent extends BriefcaseEvent { - fromJson(obj: any): void; - lockLevel?: LockLevel; - lockType?: LockType; - objectIds?: Id64String[]; - releasedWithChangeSet?: string; -} - -// @public -class LockHandler { - constructor(handler: IModelBaseHandler); - deleteAll(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, briefcaseId: number): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: LockQuery): Promise; - update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, locks: Lock[], updateOptions?: LockUpdateOptions): Promise; -} - -// @public -enum LockLevel { - Exclusive = 2, - None = 0, - Shared = 1 -} - -// @public -class LockQuery extends Query { - byBriefcaseId(briefcaseId: number): this; - byLockLevel(lockLevel: LockLevel): this; - byLocks(locks: Lock[]): this; - byLockType(lockType: LockType): this; - byObjectId(objectId: Id64String): this; - byReleasedWithChangeSet(changeSetId: string): this; - byReleasedWithChangeSetIndex(changeSetIndex: number): this; - readonly isMultiLockQuery: boolean; - top(n: number): this; - unavailableLocks(briefcaseId: number, lastChangeSetIndex: string): this; -} - -// @public -enum LockType { - CodeSpecs = 4, - Db = 0, - Element = 2, - Model = 1, - Schemas = 3 -} - -// @public -interface LockUpdateOptions { - continueOnConflict?: boolean; - deniedLocks?: boolean; - locksPerRequest?: number; - unlimitedReporting?: boolean; -} - -// @public (undocumented) -class LogEntryConverter { - // (undocumented) - static toFeatureLogJson(entries: FeatureLogEntry[]): FeatureLogEntryJson[]; - // (undocumented) - static toUsageLogJson(entry: UsageLogEntry): UsageLogEntryJson; -} - -// @public -interface LogPostingResponse { - // (undocumented) - message: string; - // (undocumented) - requestId: GuidString; - // (undocumented) - status: BentleyStatus; - // (undocumented) - time: number; -} - -// @public -class MultiCode extends CodeBase { - // (undocumented) - values?: string[]; -} - -// @public -class MultiLock extends LockBase { - // (undocumented) - objectIds?: Id64String[]; -} - -// @public -class NamedVersionCreatedEvent extends IModelHubGlobalEvent { - // (undocumented) - changeSetId?: string; - fromJson(obj: any): void; - // (undocumented) - versionId?: GuidString; - // (undocumented) - versionName?: string; -} - -// @public (undocumented) -class OidcClient extends Client { - constructor(); - protected getUrlSearchKey(): string; - // (undocumented) - static readonly searchKey: string; -} - -// @public -interface OidcFrontendClientConfiguration { - clientId: string; - postSignoutRedirectUri?: string; - redirectUri: string; - scope: string; -} - -// @public -export function ParseEvent(response: Response): IModelHubEvent; - -// @public -export function ParseGlobalEvent(response: Response, handler?: IModelBaseHandler, sasToken?: string): IModelHubGlobalEvent; - -// @public -class Permission extends WsgInstance { - // (undocumented) - categoryId?: number; - // (undocumented) - description?: string; - // (undocumented) - name?: string; - // (undocumented) - serviceGprId?: number; -} - -// @public -interface ProductVersion { - // (undocumented) - major: number; - // (undocumented) - minor: number; - // (undocumented) - sub1?: number; - // (undocumented) - sub2?: number; -} - -// @public (undocumented) -interface ProgressInfo { - // (undocumented) - loaded: number; - // (undocumented) - percent?: number; - // (undocumented) - total?: number; -} - -// @public -class Project extends WsgInstance { - // (undocumented) - allowExternalTeamMembers?: boolean; - // (undocumented) - assetId?: string; - // (undocumented) - countryCode?: string; - // (undocumented) - dataLocationId?: string; - // (undocumented) - industry?: string; - // (undocumented) - isRbacEnabled?: boolean; - // (undocumented) - lastModifiedDate?: string; - // (undocumented) - latitude?: string; - // (undocumented) - location?: string; - // (undocumented) - longitude?: string; - // (undocumented) - name?: string; - // (undocumented) - number?: string; - // (undocumented) - registeredDate?: string; - // (undocumented) - status?: number; - // (undocumented) - timeZoneLocation?: string; - // (undocumented) - type?: string; - // (undocumented) - ultimateRefId?: string; -} - -// @public -class Query { - // (undocumented) - protected _query: RequestQueryOptions; - protected addFilter(filter: string, operator?: "and" | "or"): void; - protected addSelect(select: string): this; - filter(filter: string): this; - getQueryOptions(): RequestQueryOptions; - orderBy(orderBy: string): this; - resetQueryOptions(): void; - select(select: string): this; - skip(n: number): this; - top(n: number): this; -} - -// @public -class RbacProject extends WsgInstance { -} - -// @public (undocumented) -interface RbacRequestQueryOptions extends RequestQueryOptions { - // (undocumented) - rbacOnly?: boolean; -} - -// @public (undocumented) -class RbacUser extends WsgInstance { -} - -// @public -class RealityData extends WsgInstance { - // (undocumented) - accuracyInMeters?: string; - // (undocumented) - classification?: string; - containerName?: string; - // (undocumented) - copyright?: string; - // (undocumented) - createdTimestamp?: string; - // (undocumented) - creatorId?: string; - // (undocumented) - dataLocationGuid?: string; - // (undocumented) - dataSet?: string; - // (undocumented) - description?: string; - // (undocumented) - footprint?: string; - // (undocumented) - group?: number; - // (undocumented) - id?: string; - // (undocumented) - listable?: string; - // (undocumented) - metadataUrl?: string; - // (undocumented) - modifiedTimestamp?: string; - // (undocumented) - name?: string; - // (undocumented) - organizationId?: string; - // (undocumented) - ownedBy?: string; - // (undocumented) - resolutionInMeters?: string; - // (undocumented) - rootDocument?: string; - // (undocumented) - size?: string; - // (undocumented) - streamed?: string; - // (undocumented) - termsOfUse?: string; - // (undocumented) - thumbnailDocument?: string; - // (undocumented) - type?: string; - // (undocumented) - ultimateId?: string; - // (undocumented) - version?: string; - // (undocumented) - visibility?: string; -} - -// WARNING: configRelyingPartyUri has incomplete type information -// @public -class RealityDataServicesClient extends WsgClient { - constructor(); - cleanTilesetUrl(url: string): string; - getBlobStringUrl(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string, name: string): Promise; - getBlobUrl(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string): Promise; - getFileAccessKey(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string, name: string): Promise; - getModelData(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string, name: string): Promise; - getRealityData(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string): Promise; - getRealityDataInProject(alctx: ActivityLoggingContext, token: AccessToken, projectId: string): Promise; - getRealityDataInProjectOverlapping(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, range: Range2d): Promise; - getRealityDataUrl(alctx: ActivityLoggingContext, projectId: string, tilesId: string): Promise; - protected getRelyingPartyUrl(): string; - getRootDocumentJson(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string): Promise; - getTileContent(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string, name: string): Promise; - getTileDataBlobUrl(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string): Promise; - getTileJson(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string, name: string): Promise; - protected getUrlSearchKey(): string; - // (undocumented) - static readonly searchKey: string; -} - -// @public -export function request(alctx: ActivityLoggingContext, url: string, options: RequestOptions): Promise; - -// @public (undocumented) -interface RequestBasicCredentials { - // (undocumented) - password: string; - // (undocumented) - user: string; -} - -// @public (undocumented) -class RequestGlobalOptions { - // (undocumented) - static HTTPS_PROXY?: https.Agent; -} - -// @public (undocumented) -interface RequestOptions { - // (undocumented) - accept?: string; - // (undocumented) - agent?: https.Agent; - // (undocumented) - auth?: RequestBasicCredentials; - // (undocumented) - body?: any; - // (undocumented) - buffer?: any; - // (undocumented) - errorCallback?: (response: any) => ResponseError; - // (undocumented) - headers?: any; - // (undocumented) - method: string; - // (undocumented) - parser?: any; - // (undocumented) - progressCallback?: (progress: ProgressInfo) => void; - // (undocumented) - qs?: any | RequestQueryOptions; - // (undocumented) - readStream?: any; - // (undocumented) - redirects?: number; - // (undocumented) - responseType?: string; - // (undocumented) - retries?: number; - // (undocumented) - retryCallback?: (error: any, response: any) => boolean; - // (undocumented) - stream?: any; - // (undocumented) - timeout?: number | { - deadline?: number; - response?: number; - }; - // (undocumented) - useCorsProxy?: boolean; -} - -// @public -interface RequestQueryOptions { - // WARNING: The name "$filter" contains unsupported characters; API names should use only letters, numbers, and underscores - $filter?: string; - // WARNING: The name "$orderby" contains unsupported characters; API names should use only letters, numbers, and underscores - $orderby?: string; - // WARNING: The name "$select" contains unsupported characters; API names should use only letters, numbers, and underscores - $select?: string; - // WARNING: The name "$skip" contains unsupported characters; API names should use only letters, numbers, and underscores - $skip?: number; - // WARNING: The name "$top" contains unsupported characters; API names should use only letters, numbers, and underscores - $top?: number; -} - -// @public (undocumented) -interface RequestQueryStringifyOptions { - // (undocumented) - delimiter?: string; - // (undocumented) - encode?: boolean; -} - -// @public -interface Response { - // (undocumented) - body: any; - // (undocumented) - header: any; - // (undocumented) - status: number; -} - -// @public -class ResponseError extends BentleyError { - constructor(errorNumber: number | HttpStatus, message?: string, getMetaData?: GetMetaDataFunction); - // (undocumented) - protected _data?: any; - // (undocumented) - description?: string; - log(): void; - // (undocumented) - logMessage(): string; - static parse(response: any, log?: boolean): ResponseError; - // (undocumented) - static parseHttpStatus(statusType: number): HttpStatus; - static shouldRetry(error: any, response: any): boolean; - // (undocumented) - status?: number; -} - -// @public (undocumented) -class SeedFile extends WsgInstance { - // (undocumented) - downloadUrl?: string; - // (undocumented) - fileDescription?: string; - // (undocumented) - fileId?: GuidString; - // (undocumented) - fileName?: string; - // (undocumented) - fileSize?: string; - id?: GuidString; - // (undocumented) - iModelName?: string; - // (undocumented) - index?: number; - // (undocumented) - initializationState?: InitializationState; - // (undocumented) - isUploaded?: boolean; - // (undocumented) - mergedChangeSetId?: string; - // (undocumented) - uploadedDate?: string; - // (undocumented) - uploadUrl?: string; - // (undocumented) - userUploaded?: string; -} - -// @public -interface SettingsAdmin { - deleteSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - deleteUserSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - getSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - getUserSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - saveSetting(alctx: ActivityLoggingContext, settings: any, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; - saveUserSetting(alctx: ActivityLoggingContext, settings: any, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; -} - -// @public -class SettingsResult { - constructor(status: SettingsStatus, errorMessage?: string | undefined, setting?: any); - // (undocumented) - errorMessage?: string | undefined; - // (undocumented) - setting?: any; - // (undocumented) - status: SettingsStatus; -} - -// @public -enum SettingsStatus { - AuthorizationError = 110593, - IModelInvalid = 110596, - ProjectInvalid = 110595, - ServerError = 110598, - SettingNotFound = 110597, - // (undocumented) - SETTINGS_ERROR_BASE = 110592, - Success = 0, - UnknownError = 110600, - UrlError = 110594 -} - -// @public -class SmallThumbnail extends Thumbnail { -} - -// @public -class SoftiModelDeleteEvent extends IModelHubGlobalEvent { -} - -// @public -class StringIdQuery extends Query { - // (undocumented) - protected _byId?: string; - byId(id: string): this; - // (undocumented) - protected checkValue(id: string): void; - getId(): string | undefined; -} - -// @public -class Thumbnail extends WsgInstance { - // (undocumented) - id?: GuidString; -} - -// @public -class ThumbnailHandler { - constructor(handler: IModelBaseHandler); - download(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, thumbnail: Thumbnail | TipThumbnail): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, size: ThumbnailSize, query?: ThumbnailQuery): Promise; -} - -// @public -class ThumbnailQuery extends InstanceIdQuery { - byVersionId(versionId: GuidString): this; -} - -// @public -interface TipThumbnail { - projectId: string; - size: ThumbnailSize; -} - -// @public -class Token { - protected constructor(samlAssertion: string); - // (undocumented) - protected _expiresAt?: Date; - // (undocumented) - protected _samlAssertion: string; - // (undocumented) - protected _startsAt?: Date; - // (undocumented) - protected _userInfo?: UserInfo; - // (undocumented) - protected _x509Certificate?: string; - // (undocumented) - getExpiresAt(): Date | undefined; - // (undocumented) - getSamlAssertion(): string | undefined; - // (undocumented) - getStartsAt(): Date | undefined; - // (undocumented) - getUserInfo(): UserInfo | undefined; - // (undocumented) - protected parseSamlAssertion(): boolean; -} - -// @public -class UlasClient extends Client { - constructor(); - getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; - protected getUrlSearchKey(): string; - logFeature(alctx: ActivityLoggingContext, token: AccessToken, ...entries: FeatureLogEntry[]): Promise; - logUsage(alctx: ActivityLoggingContext, token: AccessToken, entry: UsageLogEntry): Promise; - // (undocumented) - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// WARNING: configURL has incomplete type information -// WARNING: configResolveUrlUsingRegion has incomplete type information -// @public -class UrlDiscoveryClient extends Client { - constructor(); - discoverUrl(alctx: ActivityLoggingContext, searchKey: string, regionId: number | undefined): Promise; - getUrl(): Promise; - protected getUrlSearchKey(): string; -} - -// @public -class UsageLogEntry { - constructor(hostName: string, usageType: UsageType); - readonly hostName: string; - productId?: number; - productVersion?: ProductVersion; - projectId?: GuidString; - readonly timestamp: string; - readonly usageType: UsageType; - userInfo?: UsageUserInfo; -} - -// @public -interface UsageLogEntryJson { - corID: GuidString; - country: string | undefined; - evTimeZ: string; - fstr: string; - hID: string; - imsID: GuidString | undefined; - lSrc: string; - lVer: number; - pid: GuidString | undefined; - polID: GuidString; - prdid: number | undefined; - projID: GuidString | undefined; - secID: string; - uID: string | undefined; - ultID: number | undefined; - uType: string; - ver: number | undefined; -} - -// @public -enum UsageType { - // (undocumented) - Beta = 2, - // (undocumented) - HomeUse = 3, - // (undocumented) - PreActivation = 4, - // (undocumented) - Production = 0, - // (undocumented) - Trial = 1 -} - -// @public -interface UsageUserInfo { - // (undocumented) - hostUserName?: string; - imsId: GuidString; - ultimateSite: number; - usageCountryIso: string; -} - -// @public -class UserInfo { - constructor( - id: string, - email?: { - id: string; - isVerified?: boolean | undefined; - } | undefined, - profile?: { - firstName: string; - lastName: string; - name?: string | undefined; - preferredUserName?: string | undefined; - } | undefined, - organization?: { - id: string; - name: string; - } | undefined, - featureTracking?: { - ultimateSite: string; - usageCountryIso: string; - } | undefined); - email?: { - id: string; - isVerified?: boolean | undefined; - } | undefined; - featureTracking?: { - ultimateSite: string; - usageCountryIso: string; - } | undefined; - // (undocumented) - static fromJson(jsonObj: any): UserInfo; - id: string; - organization?: { - id: string; - name: string; - } | undefined; - profile?: { - firstName: string; - lastName: string; - name?: string | undefined; - preferredUserName?: string | undefined; - } | undefined; -} - -// @public -class UserInfoHandler { - constructor(handler: IModelBaseHandler); - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: UserInfoQuery): Promise; - readonly statistics: UserStatisticsHandler; -} - -// @public -class UserInfoQuery extends Query { - // (undocumented) - protected _byId?: string; - byId(id: string): this; - byIds(ids: string[]): this; - getId(): string | undefined; - // (undocumented) - readonly isQueriedByIds: boolean; -} - -// @public -class UserStatistics extends HubUserInfo { - briefcasesCount?: number; - lastChangeSetPushDate?: string; - ownedLocksCount?: number; - pushedChangeSetsCount?: number; -} - -// @public -class UserStatisticsHandler { - constructor(handler: IModelBaseHandler); - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: UserStatisticsQuery): Promise; -} - -// @public -class UserStatisticsQuery extends Query { - constructor(); - // (undocumented) - protected _byId?: string; - byId(id: string): this; - byIds(ids: string[]): this; - getId(): string | undefined; - readonly isQueriedByIds: boolean; - selectAll(): this; - selectBriefcasesCount(): this; - selectLastChangeSetPushDate(): this; - selectOwnedLocksCount(): this; - selectPushedChangeSetsCount(): this; -} - -// @public -class Version extends WsgInstance { - changeSetId?: string; - createdDate?: string; - description?: string; - // (undocumented) - id?: GuidString; - largeThumbnailId?: GuidString; - name?: string; - smallThumbnailId?: GuidString; - userCreated?: string; -} - -// @public -class VersionEvent extends IModelHubEvent { - changeSetId?: string; - fromJson(obj: any): void; - versionId?: GuidString; - versionName?: string; -} - -// @public -class VersionHandler { - constructor(handler: IModelBaseHandler); - create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, changeSetId: string, name: string, description?: string): Promise; - get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: VersionQuery): Promise; - update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, version: Version): Promise; -} - -// @public -class VersionQuery extends InstanceIdQuery { - byChangeSet(changesetId: string): this; - byName(name: string): this; - selectThumbnailId(...sizes: ThumbnailSize[]): this; -} - -// WARNING: configHostRelyingPartyUri has incomplete type information -// WARNING: configUseHostRelyingPartyUriAsFallback has incomplete type information -// @public -class WsgClient extends Client { - protected constructor(apiVersion: string); - // (undocumented) - protected _url?: string; - // (undocumented) - apiVersion: string; - protected deleteInstance(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string, instance?: T, requestOptions?: WsgRequestOptions): Promise; - getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; - protected getInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions?: RequestQueryOptions): Promise; - protected abstract getRelyingPartyUrl(): string; - getUrl(alctx: ActivityLoggingContext, excludeApiVersion?: boolean): Promise; - protected postInstance(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instance: T, requestOptions?: WsgRequestOptions): Promise; - protected postInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instances: T[], requestOptions?: WsgRequestOptions): Promise; - protected postQuery(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions: RequestQueryOptions): Promise; - protected setupOptionDefaults(options: RequestOptions): Promise; -} - -// @public -class WsgError extends ResponseError { - constructor(errorNumber: number | HttpStatus, message?: string, getMetaData?: GetMetaDataFunction); - static getErrorStatus(errorId: number, httpStatusType: number): number; - static getWSStatusId(error: string): number; - log(): void; - static parse(response: any, log?: boolean): ResponseError; - static shouldRetry(error: any, response: any): boolean; -} - -// @public -class WsgInstance extends ECInstance { - // (undocumented) - changeState?: ChangeState; - // (undocumented) - eTag?: string; - // (undocumented) - wsgId: string; -} - -// @public -interface WsgRequestOptions { - // (undocumented) - CustomOptions?: any; - // (undocumented) - RefreshInstances?: boolean; - // (undocumented) - ResponseContent?: "FullInstance" | "Empty" | "InstanceId"; -} - -// WARNING: Unsupported export: ConstructorType -// WARNING: Unsupported export: ChangeState -// WARNING: Unsupported export: loggingCategory -// WARNING: Unsupported export: loggingCategoryFullUrl -// WARNING: Unsupported export: requestIdHeaderName -// WARNING: Unsupported export: EventType -// WARNING: Unsupported export: GlobalEventType -// WARNING: Unsupported export: ThumbnailSize -// (No @packagedocumentation comment for this package) +// @public +class AccessToken extends Token { + // (undocumented) + static foreignProjectAccessTokenJsonProperty: string; + // (undocumented) + static fromForeignProjectAccessTokenJson(foreignJsonStr: string): AccessToken | undefined; + // (undocumented) + static fromJson(jsonObj: any): AccessToken | undefined; + static fromJsonWebTokenString(jwt: string, startsAt: Date, expiresAt: Date, userInfo?: UserInfo): AccessToken; + // (undocumented) + static fromSamlAssertion(samlAssertion: string): AuthorizationToken; + static fromSamlTokenString(accessTokenString: string, includesPrefix?: IncludePrefix): AccessToken; + // (undocumented) + toTokenString(includePrefix?: IncludePrefix): string; +} + +// @public +export function addSelectFileAccessKey(query: RequestQueryOptions): void; + +// @public +class AggregateResponseError extends Error { + errors: ResponseError[]; +} + +// @public +class AllCodesDeletedEvent extends BriefcaseEvent { +} + +// @public +class AllLocksDeletedEvent extends BriefcaseEvent { +} + +// @public (undocumented) +class ArgumentCheck { + // (undocumented) + static defined(argumentName: string, argument?: any): void; + // (undocumented) + static definedNumber(argumentName: string, argument?: number): void; + // (undocumented) + static nonEmptyArray(argumentName: string, argument?: any[]): void; + // (undocumented) + static valid(argumentName: string, argument?: any): void; + static validBriefcaseId(argumentName: string, argument?: number): void; + // (undocumented) + static validChangeSetId(argumentName: string, argument?: string): void; + // (undocumented) + static validGuid(argumentName: string, argument?: string): void; +} + +// @public +class AuthenticationError extends ResponseError { +} + +// @public +class AuthorizationToken extends Token { + // (undocumented) + static clone(unTypedObj: any): AuthorizationToken; + // (undocumented) + static fromSamlAssertion(samlAssertion: string): AuthorizationToken; + // (undocumented) + toTokenString(includePrefix?: IncludePrefix): string; +} + +// @public +class Briefcase extends WsgInstance { + // (undocumented) + accessMode?: BriefcaseAccessMode; + acquiredDate?: string; + briefcaseId?: number; + downloadUrl?: string; + fileDescription?: string; + fileId?: GuidString; + fileName?: string; + fileSize?: string; + // (undocumented) + iModelId?: GuidString; + isReadOnly?: boolean; + // (undocumented) + lastAccessedAt?: Date; + // (undocumented) + localPathname?: string; + mergedChangeSetId?: string; + userId?: string; +} + +// @public +enum BriefcaseAccessMode { + // (undocumented) + Exclusive = 1, + // (undocumented) + Shared = 0 +} + +// @public +class BriefcaseDeletedEvent extends BriefcaseEvent { +} + +// @public +class BriefcaseEvent extends IModelHubEvent { + briefcaseId?: number; + fromJson(obj: any): void; +} + +// @public +class BriefcaseHandler { + constructor(handler: IModelBaseHandler, fileHandler?: FileHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString): Promise; + delete(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, briefcaseId: number): Promise; + download(alctx: ActivityLoggingContext, briefcase: Briefcase, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: BriefcaseQuery): Promise; +} + +// @public +class BriefcaseQuery extends Query { + byId(id: number): this; + getId(): number | undefined; + selectDownloadUrl(): this; +} + +// @public +class ChangeSet extends WsgInstance { + briefcaseId?: number; + changesType?: ChangesType; + description?: string; + downloadUrl?: string; + fileName?: string; + fileSize?: string; + id?: string; + index?: string; + isUploaded?: boolean; + parentId?: string; + pathname?: string; + pushDate?: string; + seedFileId?: GuidString; + uploadUrl?: string; + userCreated?: string; +} + +// @public +class ChangeSetCreatedEvent extends IModelHubGlobalEvent { + // (undocumented) + briefcaseId?: number; + // (undocumented) + changeSetId?: string; + // (undocumented) + changeSetIndex?: string; + fromJson(obj: any): void; +} + +// @public +class ChangeSetHandler { + constructor(handler: IModelBaseHandler, fileHandler?: FileHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, changeSet: ChangeSet, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; + download(alctx: ActivityLoggingContext, changeSets: ChangeSet[], path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: ChangeSetQuery): Promise; +} + +// @public +class ChangeSetPostPushEvent extends BriefcaseEvent { + changeSetId?: string; + changeSetIndex?: string; + fromJson(obj: any): void; +} + +// @public +class ChangeSetPrePushEvent extends IModelHubEvent { +} + +// @public +class ChangeSetQuery extends StringIdQuery { + afterVersion(versionId: GuidString): this; + betweenChangeSets(firstChangeSetId: string, secondChangeSetId?: string): this; + betweenVersionAndChangeSet(versionId: GuidString, changeSetId: string): this; + betweenVersions(sourceVersionId: GuidString, destinationVersionId: GuidString): this; + bySeedFileId(seedFileId: GuidString): this; + // (undocumented) + protected checkValue(id: string): void; + fromId(id: string): this; + getVersionChangeSets(versionId: GuidString): this; + latest(): this; + selectDownloadUrl(): this; +} + +// @public +enum ChangesType { + Regular = 0, + Schema = 1 +} + +// @public (undocumented) +interface ClassKeyMapInfo { + classKeyPropertyName?: string; + classPropertyName?: string; + schemaPropertyName?: string; +} + +// @public +class Client { + protected constructor(); + // (undocumented) + protected _url?: string; + protected delete(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string): Promise; + getUrl(alctx: ActivityLoggingContext): Promise; + protected abstract getUrlSearchKey(): string; + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// @public +class CodeBase extends WsgInstance { + briefcaseId?: number; + codeScope?: string; + codeSpecId?: Id64String; + createdDate?: string; + queryOnly?: boolean; + state?: CodeState; +} + +// @public +class CodeEvent extends BriefcaseEvent { + codeScope?: string; + codeSpecId?: Id64String; + fromJson(obj: any): void; + state?: CodeState; + values?: string[]; +} + +// @public +class CodeHandler { + constructor(handler: IModelBaseHandler); + deleteAll(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, briefcaseId: number): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: CodeQuery): Promise; + readonly sequences: CodeSequenceHandler; + update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, codes: HubCode[], updateOptions?: CodeUpdateOptions): Promise; +} + +// @public +class CodeQuery extends Query { + byBriefcaseId(briefcaseId: number): this; + byCodes(codes: HubCode[]): this; + byCodeScope(codeScope: string): this; + byCodeSpecId(codeSpecId: Id64String): this; + readonly isMultiCodeQuery: boolean; + top(n: number): this; + unavailableCodes(briefcaseId: number): this; +} + +// @public +class CodeSequence extends WsgInstance { + codeScope?: string; + codeSpecId?: Id64String; + incrementBy?: number; + startIndex?: number; + type?: CodeSequenceType; + value?: string; + valuePattern?: string; +} + +// @public +class CodeSequenceHandler { + constructor(handler: IModelBaseHandler); + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, sequence: CodeSequence): Promise; +} + +// @public +enum CodeSequenceType { + LargestUsed = 0, + NextAvailable = 1 +} + +// @public +enum CodeState { + Available = 0, + Reserved = 1, + Retired = 3, + Used = 2 +} + +// @public +interface CodeUpdateOptions { + codesPerRequest?: number; + continueOnConflict?: boolean; + deniedCodes?: boolean; + unlimitedReporting?: boolean; +} + +// @public +class Config { + static readonly App: Config; + // WARNING: The type "ValueType" needs to be exported by the package (e.g. added to index.ts) + get(varName: string, defaultVal?: ValueType): any; + getBoolean(name: string, defaultVal?: boolean): boolean; + getContainer(): any; + getNumber(name: string, defaultVal?: number): number; + getString(name: string, defaultVal?: string): string; + getVars(): string[]; + has(varName: string): boolean; + merge(source: any): void; + remove(varName: string): void; + // WARNING: The type "ValueType" needs to be exported by the package (e.g. added to index.ts) + set(varName: string, value: ValueType): void; +} + +// @public +class ConflictingCodesError extends IModelHubError { + addCodes(error: IModelHubError): void; + conflictingCodes?: HubCode[]; + static fromError(error: IModelHubError): ConflictingCodesError | undefined; +} + +// @public +class ConflictingLocksError extends IModelHubError { + addLocks(error: IModelHubError): void; + conflictingLocks?: Lock[]; + static fromError(error: IModelHubError): ConflictingLocksError | undefined; +} + +// WARNING: configRelyingPartyUri has incomplete type information +// @public +class ConnectClient extends WsgClient { + constructor(); + getInvitedProjects(alctx: ActivityLoggingContext, token: AccessToken, queryOptions?: ConnectRequestQueryOptions): Promise; + getProject(alctx: ActivityLoggingContext, token: AccessToken, queryOptions?: ConnectRequestQueryOptions): Promise; + getProjects(alctx: ActivityLoggingContext, token: AccessToken, queryOptions?: ConnectRequestQueryOptions): Promise; + protected getRelyingPartyUrl(): string; + protected getUrlSearchKey(): string; + // (undocumented) + static readonly searchKey: string; + // (undocumented) + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// @public +interface ConnectRequestQueryOptions extends RequestQueryOptions { + isFavorite?: boolean; + isMRU?: boolean; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class ConnectSettingsClient extends Client, implements SettingsAdmin { + constructor(applicationId: string); + // (undocumented) + applicationId: string; + // (undocumented) + deleteSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + // (undocumented) + deleteUserSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + getAccessToken(alctx: ActivityLoggingContext, authSamlToken: AuthorizationToken): Promise; + // (undocumented) + getSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + // (undocumented) + protected getUrlSearchKey(): string; + // (undocumented) + getUserSetting(alctx: ActivityLoggingContext, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + // (undocumented) + saveSetting(alctx: ActivityLoggingContext, settings: any, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + // (undocumented) + saveUserSetting(alctx: ActivityLoggingContext, settings: any, settingNamespace: string, settingName: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + // (undocumented) + static readonly searchKey: string; +} + +// @public +class DefaultCodeUpdateOptionsProvider { + constructor(); + // (undocumented) + protected _defaultOptions: CodeUpdateOptions; + assignOptions(options: CodeUpdateOptions): Promise; +} + +// @public +class DefaultLockUpdateOptionsProvider { + constructor(); + // (undocumented) + protected _defaultOptions: LockUpdateOptions; + assignOptions(options: LockUpdateOptions): Promise; +} + +// @public +class DefaultRequestOptionsProvider { + constructor(); + // (undocumented) + protected _defaultOptions: RequestOptions; + assignOptions(options: RequestOptions): Promise; +} + +// @public +class DefaultWsgRequestOptionsProvider extends DefaultRequestOptionsProvider { + constructor(); +} + +// @public +class ECInstance { + // (undocumented) + [index: string]: any; + // (undocumented) + ecId: string; +} + +// @public +class ECJsonTypeMap { + static classToJson(applicationKey: string, classKey: string, classKeyMapInfo: ClassKeyMapInfo): (typedConstructor: ConstructorType) => void; + static fromJson(typedConstructor: new () => T, applicationKey: string, ecJsonInstance: any): T | undefined; + static propertyToJson(applicationKey: string, propertyAccessString: string): (object: any, propertyKey: string) => void; + static toJson(applicationKey: string, typedInstance: T): any | undefined; +} + +// @public +class EventHandler extends EventBaseHandler { + constructor(handler: IModelBaseHandler); + createListener(alctx: ActivityLoggingContext, authenticationCallback: () => Promise, subscriptionId: string, imodelId: GuidString, listener: (event: IModelHubEvent) => void): () => void; + getEvent(alctx: ActivityLoggingContext, sasToken: string, baseAddress: string, subscriptionId: string, timeout?: number): Promise; + getSASToken(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString): Promise; + readonly subscriptions: EventSubscriptionHandler; +} + +// @public +class EventSAS extends BaseEventSAS { +} + +// @public +class EventSubscription extends WsgInstance { + eventTypes?: EventType[]; +} + +// @public +class EventSubscriptionHandler { + constructor(handler: IModelBaseHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, events: EventType[]): Promise; + delete(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, eventSubscriptionId: string): Promise; + update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, subscription: EventSubscription): Promise; +} + +// @public +class FeatureEndedLogEntry extends FeatureLogEntry { + constructor(featureId: GuidString, startEntryId: GuidString, hostName: string, usageType: UsageType); + static fromStartEntry(startEntry: FeatureStartedLogEntry): FeatureEndedLogEntry; + // (undocumented) + readonly startEntryId: GuidString; +} + +// @public +class FeatureLogEntry { + constructor(featureId: GuidString, hostName: string, usageType: UsageType); + readonly featureId: GuidString; + readonly hostName: string; + productId?: number; + productVersion?: ProductVersion; + projectId?: GuidString; + readonly timestamp: string; + usageData: FeatureLogEntryAttribute[]; + readonly usageType: UsageType; + userInfo?: UsageUserInfo; +} + +// @public +interface FeatureLogEntryAttribute { + // (undocumented) + name: string; + // (undocumented) + value: any; +} + +// @public (undocumented) +interface FeatureLogEntryAttributeJson { + // (undocumented) + name: string; + // (undocumented) + value: string; +} + +// @public +interface FeatureLogEntryJson extends UsageLogEntryJson { + eDateZ: string; + ftrID: GuidString; + sDateZ: string; + uData: FeatureLogEntryAttributeJson[]; +} + +// @public +class FeatureStartedLogEntry extends FeatureLogEntry { + constructor(featureId: GuidString, hostName: string, usageType: UsageType); + readonly entryId: GuidString; +} + +// @public +class FileAccessKey extends WsgInstance { + // (undocumented) + permissions?: string; + // (undocumented) + requiresConfirmation?: string; + // (undocumented) + type?: string; + // (undocumented) + url?: string; +} + +// @public +interface FileHandler { + // (undocumented) + agent: https.Agent; + basename(filePath: string): string; + downloadFile(alctx: ActivityLoggingContext, downloadUrl: string, path: string, fileSize?: number, progress?: (progress: ProgressInfo) => void): Promise; + exists(filePath: string): boolean; + getFileSize(filePath: string): number; + isDirectory(filePath: string): boolean; + join(...paths: string[]): string; + uploadFile(alctx: ActivityLoggingContext, uploadUrlString: string, path: string, progress?: (progress: ProgressInfo) => void): Promise; +} + +// @public +export function getArrayBuffer(alctx: ActivityLoggingContext, url: string): Promise; + +// @public +enum GetEventOperationType { + Destructive = 0, + Peek = 1 +} + +// @public +export function getJson(alctx: ActivityLoggingContext, url: string): Promise; + +// @public +class GlobalEventHandler extends EventBaseHandler { + constructor(handler: IModelBaseHandler); + createListener(alctx: ActivityLoggingContext, authenticationCallback: () => Promise, subscriptionInstanceId: string, listener: (event: IModelHubGlobalEvent) => void): () => void; + getEvent(alctx: ActivityLoggingContext, sasToken: string, baseAddress: string, subscriptionInstanceId: string, timeout?: number, getOperation?: GetEventOperationType): Promise; + getSASToken(alctx: ActivityLoggingContext, token: AccessToken): Promise; + readonly subscriptions: GlobalEventSubscriptionHandler; +} + +// @public +class GlobalEventSAS extends BaseEventSAS { +} + +// @public +class GlobalEventSubscription extends WsgInstance { + // (undocumented) + eventTypes?: GlobalEventType[]; + // (undocumented) + subscriptionId?: string; +} + +// @public +class GlobalEventSubscriptionHandler { + constructor(handler: IModelBaseHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, subscriptionId: GuidString, globalEvents: GlobalEventType[]): Promise; + delete(alctx: ActivityLoggingContext, token: AccessToken, subscriptionInstanceId: string): Promise; + update(alctx: ActivityLoggingContext, token: AccessToken, subscription: GlobalEventSubscription): Promise; +} + +// @public +class HardiModelDeleteEvent extends IModelHubGlobalEvent { +} + +// @public +class HubCode extends CodeBase { + value?: string; +} + +// @public +class HubIModel extends WsgInstance { + createdDate?: string; + description?: string; + id?: GuidString; + iModelTemplate?: string; + initialized?: boolean; + name?: string; + userCreated?: string; +} + +// @public +class HubUserInfo extends WsgInstance { + email?: string; + firstName?: string; + id?: string; + lastName?: string; +} + +// @public +interface IAccessTokenManager { + getAccessToken(actx: ActivityLoggingContext): Promise; +} + +// @public +interface IAngularOidcFrontendClient extends IOidcFrontendClient { + // (undocumented) + handleRedirectCallback(): Promise; +} + +// @public (undocumented) +class IModelBankClient extends IModelClient { + constructor(url: string, handler: FileHandler | undefined); +} + +// @public (undocumented) +class IModelBankFileSystemContextClient implements ContextManagerClient { + constructor(baseUri: string); + // (undocumented) + baseUri: string; + // (undocumented) + createContext(alctx: ActivityLoggingContext, accessToken: AccessToken, name: string): Promise; + // (undocumented) + deleteContext(alctx: ActivityLoggingContext, accessToken: AccessToken, contextId: string): Promise; + // (undocumented) + queryContextByName(alctx: ActivityLoggingContext, accessToken: AccessToken, projectName: string): Promise; +} + +// @public (undocumented) +class IModelBankHandler extends IModelBaseHandler { + constructor(url: string, handler: FileHandler | undefined, keepAliveDuration?: number); + // (undocumented) + getUrl(_actx: ActivityLoggingContext, excludeApiVersion?: boolean): Promise; + // (undocumented) + protected getUrlSearchKey(): string; +} + +// WARNING: configRelyingPartyUri has incomplete type information +// @public +class IModelBaseHandler extends WsgClient { + constructor(keepAliveDuration?: number, fileHandler?: FileHandler); + // (undocumented) + protected _agent: any; + // (undocumented) + protected _fileHandler: FileHandler | undefined; + // (undocumented) + protected _url?: string; + delete(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string): Promise; + deleteInstance(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string, instance?: T, requestOptions?: WsgRequestOptions): Promise; + // (undocumented) + formatProjectIdForUrl(projectId: string): string; + getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; + getAgent(): any; + // WARNING: The type "CustomRequestOptions" needs to be exported by the package (e.g. added to index.ts) + getCustomRequestOptions(): CustomRequestOptions; + // (undocumented) + getFileHandler(): FileHandler | undefined; + getInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions?: RequestQueryOptions): Promise; + protected getRelyingPartyUrl(): string; + getUrl(alctx: ActivityLoggingContext): Promise; + protected getUrlSearchKey(): string; + postInstance(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instance: T, requestOptions?: WsgRequestOptions): Promise; + postInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instances: T[], requestOptions?: WsgRequestOptions): Promise; + postQuery(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions: RequestQueryOptions): Promise; + // (undocumented) + static readonly searchKey: string; + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// @public +class IModelClient { + constructor(baseHandler: IModelBaseHandler, fileHandler?: FileHandler); + // (undocumented) + protected _handler: IModelBaseHandler; + readonly briefcases: BriefcaseHandler; + readonly changeSets: ChangeSetHandler; + readonly codes: CodeHandler; + readonly events: EventHandler; + readonly globalEvents: GlobalEventHandler; + readonly iModel: IModelHandler; + readonly iModels: IModelsHandler; + readonly locks: LockHandler; + // WARNING: The type "CustomRequestOptions" needs to be exported by the package (e.g. added to index.ts) + readonly requestOptions: CustomRequestOptions; + setFileHandler(fileHandler: FileHandler): void; + readonly thumbnails: ThumbnailHandler; + readonly users: UserInfoHandler; + readonly versions: VersionHandler; +} + +// @public +class IModelCreatedEvent extends IModelHubGlobalEvent { +} + +// @public +class IModelDeletedEvent extends IModelHubEvent { +} + +// @public (undocumented) +interface IModelFileSystemContextProps { + // (undocumented) + description: string; + // (undocumented) + id: string; + // (undocumented) + name: string; +} + +// @public +class IModelHandler { + constructor(handler: IModelsHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, name: string, path?: string, description?: string, progressCallback?: (progress: ProgressInfo) => void, timeOutInMilliseconds?: number): Promise; + delete(alctx: ActivityLoggingContext, token: AccessToken, contextId: string): Promise; + download(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, contextId: string): Promise; + getInitializationState(alctx: ActivityLoggingContext, token: AccessToken, contextId: string): Promise; + update(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, imodel: HubIModel): Promise; +} + +// @public +class IModelHubClient extends IModelClient { + constructor(fileHandler?: FileHandler, iModelBaseHandler?: IModelBaseHandler); + getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; +} + +// @public +class IModelHubClientError extends IModelHubError { + static browser(): IModelHubClientError; + static fileHandler(): IModelHubClientError; + static fileNotFound(): IModelHubClientError; + static fromId(id: IModelHubStatus, message: string): IModelHubClientError; + static invalidArgument(argumentName: string): IModelHubClientError; + static missingDownloadUrl(argumentName: string): IModelHubClientError; + static undefinedArgument(argumentName: string): IModelHubClientError; +} + +// @public +class IModelHubError extends WsgError { + constructor(errorNumber: number | HttpStatus, message?: string, getMetaData?: GetMetaDataFunction); + data: any; + static fromId(id: IModelHubStatus, message: string): IModelHubError; + getLogLevel(): LogFunction; + log(): void; + static parse(response: any, log?: boolean): ResponseError; + static shouldRetry(error: any, response: any): boolean; +} + +// @public +class IModelHubEvent extends IModelHubBaseEvent { + fromJson(obj: any): void; + iModelId?: GuidString; +} + +// @public +class IModelHubGlobalEvent extends IModelHubBaseEvent { + fromJson(obj: any): void; + iModelId?: GuidString; + projectId?: string; +} + +// @public +class IModelQuery extends InstanceIdQuery { + byName(name: string): this; +} + +// @public +class IModelsHandler { + constructor(handler: IModelBaseHandler, fileHandler?: FileHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, name: string, path?: string, description?: string, progressCallback?: (progress: ProgressInfo) => void, timeOutInMilliseconds?: number): Promise; + delete(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, imodelId: GuidString): Promise; + download(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, path: string, progressCallback?: (progress: ProgressInfo) => void): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, query?: IModelQuery): Promise; + getInitializationState(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString): Promise; + update(alctx: ActivityLoggingContext, token: AccessToken, contextId: string, imodel: HubIModel): Promise; +} + +// @public +class ImsActiveSecureTokenClient extends Client { + constructor(); + getToken(alctx: ActivityLoggingContext, user: string, password: string, appId?: string): Promise; + protected getUrlSearchKey(): string; + // (undocumented) + static readonly searchKey: string; + // (undocumented) + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// @public +class ImsDelegationSecureTokenClient extends Client { + constructor(); + getToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken, relyingPartyUri?: string, appId?: string): Promise; + protected getUrlSearchKey(): string; + // (undocumented) + static readonly searchKey: string; + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// @public +class ImsFederatedAuthenticationClient extends Client { + constructor(); + protected getUrlSearchKey(): string; + static parseTokenResponse(authTokenResponse: string): AuthorizationToken | undefined; + // (undocumented) + static readonly searchKey: string; +} + +// @public (undocumented) +enum IncludePrefix { + // (undocumented) + No = 1, + // (undocumented) + Yes = 0 +} + +// @public +enum InitializationState { + CodeTooLong = 5, + Failed = 3, + NotStarted = 1, + OutdatedFile = 4, + Scheduled = 2, + SeedFileIsBriefcase = 6, + Successful = 0 +} + +// @public +class InstanceIdQuery extends Query { + // (undocumented) + protected _byId?: GuidString; + byId(id: GuidString): this; + getId(): string | undefined; +} + +// @public +interface IOidcFrontendClient extends IDisposable { + getAccessToken(actx: ActivityLoggingContext): Promise; + initialize(actx: ActivityLoggingContext): Promise; + readonly onUserStateChanged: BeEvent<(token: AccessToken | undefined) => void>; + signIn(actx: ActivityLoggingContext): void; + signOut(actx: ActivityLoggingContext): void; +} + +// @public +class LargeThumbnail extends Thumbnail { +} + +// @public +class Lock extends LockBase { + objectId?: Id64String; +} + +// @public +class LockBase extends WsgInstance { + briefcaseId?: number; + lockLevel?: LockLevel; + lockType?: LockType; + releasedWithChangeSet?: string; + releasedWithChangeSetIndex?: string; + seedFileId?: GuidString; +} + +// @public +class LockEvent extends BriefcaseEvent { + fromJson(obj: any): void; + lockLevel?: LockLevel; + lockType?: LockType; + objectIds?: Id64String[]; + releasedWithChangeSet?: string; +} + +// @public +class LockHandler { + constructor(handler: IModelBaseHandler); + deleteAll(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, briefcaseId: number): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: LockQuery): Promise; + update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, locks: Lock[], updateOptions?: LockUpdateOptions): Promise; +} + +// @public +enum LockLevel { + Exclusive = 2, + None = 0, + Shared = 1 +} + +// @public +class LockQuery extends Query { + byBriefcaseId(briefcaseId: number): this; + byLockLevel(lockLevel: LockLevel): this; + byLocks(locks: Lock[]): this; + byLockType(lockType: LockType): this; + byObjectId(objectId: Id64String): this; + byReleasedWithChangeSet(changeSetId: string): this; + byReleasedWithChangeSetIndex(changeSetIndex: number): this; + readonly isMultiLockQuery: boolean; + top(n: number): this; + unavailableLocks(briefcaseId: number, lastChangeSetIndex: string): this; +} + +// @public +enum LockType { + CodeSpecs = 4, + Db = 0, + Element = 2, + Model = 1, + Schemas = 3 +} + +// @public +interface LockUpdateOptions { + continueOnConflict?: boolean; + deniedLocks?: boolean; + locksPerRequest?: number; + unlimitedReporting?: boolean; +} + +// @public (undocumented) +class LogEntryConverter { + // (undocumented) + static toFeatureLogJson(entries: FeatureLogEntry[]): FeatureLogEntryJson[]; + // (undocumented) + static toUsageLogJson(entry: UsageLogEntry): UsageLogEntryJson; +} + +// @public +interface LogPostingResponse { + // (undocumented) + message: string; + // (undocumented) + requestId: GuidString; + // (undocumented) + status: BentleyStatus; + // (undocumented) + time: number; +} + +// @public +class MultiCode extends CodeBase { + // (undocumented) + values?: string[]; +} + +// @public +class MultiLock extends LockBase { + // (undocumented) + objectIds?: Id64String[]; +} + +// @public +class NamedVersionCreatedEvent extends IModelHubGlobalEvent { + // (undocumented) + changeSetId?: string; + fromJson(obj: any): void; + // (undocumented) + versionId?: GuidString; + // (undocumented) + versionName?: string; +} + +// @public (undocumented) +class OidcClient extends Client { + constructor(); + protected getUrlSearchKey(): string; + // (undocumented) + static readonly searchKey: string; +} + +// @public +interface OidcFrontendClientConfiguration { + clientId: string; + postSignoutRedirectUri?: string; + redirectUri: string; + scope: string; +} + +// @public +export function ParseEvent(response: Response): IModelHubEvent; + +// @public +export function ParseGlobalEvent(response: Response, handler?: IModelBaseHandler, sasToken?: string): IModelHubGlobalEvent; + +// @public +class Permission extends WsgInstance { + // (undocumented) + categoryId?: number; + // (undocumented) + description?: string; + // (undocumented) + name?: string; + // (undocumented) + serviceGprId?: number; +} + +// @public +interface ProductVersion { + // (undocumented) + major: number; + // (undocumented) + minor: number; + // (undocumented) + sub1?: number; + // (undocumented) + sub2?: number; +} + +// @public (undocumented) +interface ProgressInfo { + // (undocumented) + loaded: number; + // (undocumented) + percent?: number; + // (undocumented) + total?: number; +} + +// @public +class Project extends WsgInstance { + // (undocumented) + allowExternalTeamMembers?: boolean; + // (undocumented) + assetId?: string; + // (undocumented) + countryCode?: string; + // (undocumented) + dataLocationId?: string; + // (undocumented) + industry?: string; + // (undocumented) + isRbacEnabled?: boolean; + // (undocumented) + lastModifiedDate?: string; + // (undocumented) + latitude?: string; + // (undocumented) + location?: string; + // (undocumented) + longitude?: string; + // (undocumented) + name?: string; + // (undocumented) + number?: string; + // (undocumented) + registeredDate?: string; + // (undocumented) + status?: number; + // (undocumented) + timeZoneLocation?: string; + // (undocumented) + type?: string; + // (undocumented) + ultimateRefId?: string; +} + +// @public +class Query { + // (undocumented) + protected _query: RequestQueryOptions; + protected addFilter(filter: string, operator?: "and" | "or"): void; + protected addSelect(select: string): this; + filter(filter: string): this; + getQueryOptions(): RequestQueryOptions; + orderBy(orderBy: string): this; + resetQueryOptions(): void; + select(select: string): this; + skip(n: number): this; + top(n: number): this; +} + +// @public +class RbacProject extends WsgInstance { +} + +// @public (undocumented) +interface RbacRequestQueryOptions extends RequestQueryOptions { + // (undocumented) + rbacOnly?: boolean; +} + +// @public (undocumented) +class RbacUser extends WsgInstance { +} + +// @public +class RealityData extends WsgInstance { + // (undocumented) + accuracyInMeters?: string; + // (undocumented) + classification?: string; + // (undocumented) + client: undefined | RealityDataServicesClient; + containerName?: string; + // (undocumented) + copyright?: string; + // (undocumented) + createdTimestamp?: string; + // (undocumented) + creatorId?: string; + // (undocumented) + dataLocationGuid?: string; + // (undocumented) + dataSet?: string; + // (undocumented) + description?: string; + // (undocumented) + footprint?: string; + getBlobStringUrl(alctx: ActivityLoggingContext, token: AccessToken, name: string, nameRelativeToRootDocumentPath?: boolean): Promise; + getBlobUrl(alctx: ActivityLoggingContext, token: AccessToken): Promise; + getModelData(alctx: ActivityLoggingContext, token: AccessToken, name: string, nameRelativeToRootDocumentPath?: boolean): Promise; + getRootDocumentJson(alctx: ActivityLoggingContext, token: AccessToken): Promise; + getTileContent(alctx: ActivityLoggingContext, token: AccessToken, name: string, nameRelativeToRootDocumentPath?: boolean): Promise; + getTileJson(alctx: ActivityLoggingContext, token: AccessToken, name: string, nameRelativeToRootDocumentPath?: boolean): Promise; + // (undocumented) + group?: number; + // (undocumented) + id?: string; + // (undocumented) + listable?: string; + // (undocumented) + metadataUrl?: string; + // (undocumented) + modifiedTimestamp?: string; + // (undocumented) + name?: string; + // (undocumented) + organizationId?: string; + // (undocumented) + ownedBy?: string; + // (undocumented) + projectId: undefined | string; + // (undocumented) + resolutionInMeters?: string; + // (undocumented) + rootDocument?: string; + // (undocumented) + size?: string; + // (undocumented) + streamed?: string; + // (undocumented) + termsOfUse?: string; + // (undocumented) + thumbnailDocument?: string; + // (undocumented) + type?: string; + // (undocumented) + ultimateId?: string; + // (undocumented) + version?: string; + // (undocumented) + visibility?: string; +} + +// WARNING: configRelyingPartyUri has incomplete type information +// @public +class RealityDataServicesClient extends WsgClient { + constructor(); + getFileAccessKey(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string): Promise; + getRealityData(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, tilesId: string): Promise; + getRealityDataInProject(alctx: ActivityLoggingContext, token: AccessToken, projectId: string): Promise; + getRealityDataInProjectOverlapping(alctx: ActivityLoggingContext, token: AccessToken, projectId: string, range: Range2d): Promise; + getRealityDataUrl(alctx: ActivityLoggingContext, projectId: string, tilesId: string): Promise; + protected getRelyingPartyUrl(): string; + protected getUrlSearchKey(): string; + // (undocumented) + static readonly searchKey: string; +} + +// @public +export function request(alctx: ActivityLoggingContext, url: string, options: RequestOptions): Promise; + +// @public (undocumented) +interface RequestBasicCredentials { + // (undocumented) + password: string; + // (undocumented) + user: string; +} + +// @public (undocumented) +class RequestGlobalOptions { + // (undocumented) + static HTTPS_PROXY?: https.Agent; +} + +// @public (undocumented) +interface RequestOptions { + // (undocumented) + accept?: string; + // (undocumented) + agent?: https.Agent; + // (undocumented) + auth?: RequestBasicCredentials; + // (undocumented) + body?: any; + // (undocumented) + buffer?: any; + // (undocumented) + errorCallback?: (response: any) => ResponseError; + // (undocumented) + headers?: any; + // (undocumented) + method: string; + // (undocumented) + parser?: any; + // (undocumented) + progressCallback?: (progress: ProgressInfo) => void; + // (undocumented) + qs?: any | RequestQueryOptions; + // (undocumented) + readStream?: any; + // (undocumented) + redirects?: number; + // (undocumented) + responseType?: string; + // (undocumented) + retries?: number; + // (undocumented) + retryCallback?: (error: any, response: any) => boolean; + // (undocumented) + stream?: any; + // (undocumented) + timeout?: number | { + deadline?: number; + response?: number; + }; + // (undocumented) + useCorsProxy?: boolean; +} + +// @public +interface RequestQueryOptions { + // WARNING: The name "$filter" contains unsupported characters; API names should use only letters, numbers, and underscores + $filter?: string; + // WARNING: The name "$orderby" contains unsupported characters; API names should use only letters, numbers, and underscores + $orderby?: string; + // WARNING: The name "$select" contains unsupported characters; API names should use only letters, numbers, and underscores + $select?: string; + // WARNING: The name "$skip" contains unsupported characters; API names should use only letters, numbers, and underscores + $skip?: number; + // WARNING: The name "$top" contains unsupported characters; API names should use only letters, numbers, and underscores + $top?: number; +} + +// @public (undocumented) +interface RequestQueryStringifyOptions { + // (undocumented) + delimiter?: string; + // (undocumented) + encode?: boolean; +} + +// @public +interface Response { + // (undocumented) + body: any; + // (undocumented) + header: any; + // (undocumented) + status: number; +} + +// @public +class ResponseError extends BentleyError { + constructor(errorNumber: number | HttpStatus, message?: string, getMetaData?: GetMetaDataFunction); + // (undocumented) + protected _data?: any; + // (undocumented) + description?: string; + log(): void; + // (undocumented) + logMessage(): string; + static parse(response: any, log?: boolean): ResponseError; + // (undocumented) + static parseHttpStatus(statusType: number): HttpStatus; + static shouldRetry(error: any, response: any): boolean; + // (undocumented) + status?: number; +} + +// @public (undocumented) +class SeedFile extends WsgInstance { + // (undocumented) + downloadUrl?: string; + // (undocumented) + fileDescription?: string; + // (undocumented) + fileId?: GuidString; + // (undocumented) + fileName?: string; + // (undocumented) + fileSize?: string; + id?: GuidString; + // (undocumented) + iModelName?: string; + // (undocumented) + index?: number; + // (undocumented) + initializationState?: InitializationState; + // (undocumented) + isUploaded?: boolean; + // (undocumented) + mergedChangeSetId?: string; + // (undocumented) + uploadedDate?: string; + // (undocumented) + uploadUrl?: string; + // (undocumented) + userUploaded?: string; +} + +// @public +interface SettingsAdmin { + deleteSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + deleteUserSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + getSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + getUserSetting(alctx: ActivityLoggingContext, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + saveSetting(alctx: ActivityLoggingContext, settings: any, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; + saveUserSetting(alctx: ActivityLoggingContext, settings: any, namespace: string, name: string, accessToken: AccessToken, applicationSpecific: boolean, projectId?: string, iModelId?: string): Promise; +} + +// @public +class SettingsResult { + // @internal + constructor(status: SettingsStatus, errorMessage?: string | undefined, setting?: any); + // (undocumented) + errorMessage?: string | undefined; + // (undocumented) + setting?: any; + // (undocumented) + status: SettingsStatus; +} + +// @public +enum SettingsStatus { + AuthorizationError = 110593, + IModelInvalid = 110596, + ProjectInvalid = 110595, + ServerError = 110598, + SettingNotFound = 110597, + // (undocumented) + SETTINGS_ERROR_BASE = 110592, + Success = 0, + UnknownError = 110600, + UrlError = 110594 +} + +// @public +class SmallThumbnail extends Thumbnail { +} + +// @public +class SoftiModelDeleteEvent extends IModelHubGlobalEvent { +} + +// @public +class StringIdQuery extends Query { + // (undocumented) + protected _byId?: string; + byId(id: string): this; + // (undocumented) + protected checkValue(id: string): void; + getId(): string | undefined; +} + +// @public +class Thumbnail extends WsgInstance { + // (undocumented) + id?: GuidString; +} + +// @public +class ThumbnailHandler { + constructor(handler: IModelBaseHandler); + download(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, thumbnail: Thumbnail | TipThumbnail): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, size: ThumbnailSize, query?: ThumbnailQuery): Promise; +} + +// @public +class ThumbnailQuery extends InstanceIdQuery { + byVersionId(versionId: GuidString): this; +} + +// @public +interface TipThumbnail { + projectId: string; + size: ThumbnailSize; +} + +// @public +class Token { + protected constructor(samlAssertion: string); + // (undocumented) + protected _expiresAt?: Date; + // (undocumented) + protected _samlAssertion: string; + // (undocumented) + protected _startsAt?: Date; + // (undocumented) + protected _userInfo?: UserInfo; + // (undocumented) + protected _x509Certificate?: string; + // (undocumented) + getExpiresAt(): Date | undefined; + // (undocumented) + getSamlAssertion(): string | undefined; + // (undocumented) + getStartsAt(): Date | undefined; + // (undocumented) + getUserInfo(): UserInfo | undefined; + // (undocumented) + protected parseSamlAssertion(): boolean; +} + +// @public +class UlasClient extends Client { + constructor(); + getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; + protected getUrlSearchKey(): string; + logFeature(alctx: ActivityLoggingContext, token: AccessToken, ...entries: FeatureLogEntry[]): Promise; + logUsage(alctx: ActivityLoggingContext, token: AccessToken, entry: UsageLogEntry): Promise; + // (undocumented) + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// WARNING: configURL has incomplete type information +// WARNING: configResolveUrlUsingRegion has incomplete type information +// @public +class UrlDiscoveryClient extends Client { + constructor(); + discoverUrl(alctx: ActivityLoggingContext, searchKey: string, regionId: number | undefined): Promise; + getUrl(): Promise; + protected getUrlSearchKey(): string; +} + +// @public +class UsageLogEntry { + constructor(hostName: string, usageType: UsageType); + readonly hostName: string; + productId?: number; + productVersion?: ProductVersion; + projectId?: GuidString; + readonly timestamp: string; + readonly usageType: UsageType; + userInfo?: UsageUserInfo; +} + +// @public +interface UsageLogEntryJson { + corID: GuidString; + country: string | undefined; + evTimeZ: string; + fstr: string; + hID: string; + imsID: GuidString | undefined; + lSrc: string; + lVer: number; + pid: GuidString | undefined; + polID: GuidString; + prdid: number | undefined; + projID: GuidString | undefined; + secID: string; + uID: string | undefined; + ultID: number | undefined; + uType: string; + ver: number | undefined; +} + +// @public +enum UsageType { + // (undocumented) + Beta = 2, + // (undocumented) + HomeUse = 3, + // (undocumented) + PreActivation = 4, + // (undocumented) + Production = 0, + // (undocumented) + Trial = 1 +} + +// @public +interface UsageUserInfo { + // (undocumented) + hostUserName?: string; + imsId: GuidString; + ultimateSite: number; + usageCountryIso: string; +} + +// @public +class UserInfo { + constructor( + id: string, + email?: { + id: string; + isVerified?: boolean | undefined; + } | undefined, + profile?: { + firstName: string; + lastName: string; + name?: string | undefined; + preferredUserName?: string | undefined; + } | undefined, + organization?: { + id: string; + name: string; + } | undefined, + featureTracking?: { + ultimateSite: string; + usageCountryIso: string; + } | undefined); + email?: { + id: string; + isVerified?: boolean | undefined; + } | undefined; + featureTracking?: { + ultimateSite: string; + usageCountryIso: string; + } | undefined; + // (undocumented) + static fromJson(jsonObj: any): UserInfo; + id: string; + organization?: { + id: string; + name: string; + } | undefined; + profile?: { + firstName: string; + lastName: string; + name?: string | undefined; + preferredUserName?: string | undefined; + } | undefined; +} + +// @public +class UserInfoHandler { + constructor(handler: IModelBaseHandler); + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: UserInfoQuery): Promise; + readonly statistics: UserStatisticsHandler; +} + +// @public +class UserInfoQuery extends Query { + // (undocumented) + protected _byId?: string; + byId(id: string): this; + byIds(ids: string[]): this; + getId(): string | undefined; + // (undocumented) + readonly isQueriedByIds: boolean; +} + +// @public +class UserStatistics extends HubUserInfo { + briefcasesCount?: number; + lastChangeSetPushDate?: string; + ownedLocksCount?: number; + pushedChangeSetsCount?: number; +} + +// @public +class UserStatisticsHandler { + constructor(handler: IModelBaseHandler); + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: UserStatisticsQuery): Promise; +} + +// @public +class UserStatisticsQuery extends Query { + constructor(); + // (undocumented) + protected _byId?: string; + byId(id: string): this; + byIds(ids: string[]): this; + getId(): string | undefined; + readonly isQueriedByIds: boolean; + selectAll(): this; + selectBriefcasesCount(): this; + selectLastChangeSetPushDate(): this; + selectOwnedLocksCount(): this; + selectPushedChangeSetsCount(): this; +} + +// @public +class Version extends WsgInstance { + changeSetId?: string; + createdDate?: string; + description?: string; + // (undocumented) + id?: GuidString; + largeThumbnailId?: GuidString; + name?: string; + smallThumbnailId?: GuidString; + userCreated?: string; +} + +// @public +class VersionEvent extends IModelHubEvent { + changeSetId?: string; + fromJson(obj: any): void; + versionId?: GuidString; + versionName?: string; +} + +// @public +class VersionHandler { + constructor(handler: IModelBaseHandler); + create(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, changeSetId: string, name: string, description?: string): Promise; + get(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, query?: VersionQuery): Promise; + update(alctx: ActivityLoggingContext, token: AccessToken, imodelId: GuidString, version: Version): Promise; +} + +// @public +class VersionQuery extends InstanceIdQuery { + byChangeSet(changesetId: string): this; + byName(name: string): this; + selectThumbnailId(...sizes: ThumbnailSize[]): this; +} + +// WARNING: configHostRelyingPartyUri has incomplete type information +// WARNING: configUseHostRelyingPartyUriAsFallback has incomplete type information +// @public +class WsgClient extends Client { + protected constructor(apiVersion: string); + // (undocumented) + protected _url?: string; + // (undocumented) + apiVersion: string; + protected deleteInstance(alctx: ActivityLoggingContext, token: AccessToken, relativeUrlPath: string, instance?: T, requestOptions?: WsgRequestOptions): Promise; + getAccessToken(alctx: ActivityLoggingContext, authorizationToken: AuthorizationToken): Promise; + protected getInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions?: RequestQueryOptions): Promise; + protected abstract getRelyingPartyUrl(): string; + getUrl(alctx: ActivityLoggingContext, excludeApiVersion?: boolean): Promise; + protected postInstance(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instance: T, requestOptions?: WsgRequestOptions): Promise; + protected postInstances(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, instances: T[], requestOptions?: WsgRequestOptions): Promise; + protected postQuery(alctx: ActivityLoggingContext, typedConstructor: new () => T, token: AccessToken, relativeUrlPath: string, queryOptions: RequestQueryOptions): Promise; + protected setupOptionDefaults(options: RequestOptions): Promise; +} + +// @public +class WsgError extends ResponseError { + constructor(errorNumber: number | HttpStatus, message?: string, getMetaData?: GetMetaDataFunction); + static getErrorStatus(errorId: number, httpStatusType: number): number; + static getWSStatusId(error: string): number; + log(): void; + static parse(response: any, log?: boolean): ResponseError; + static shouldRetry(error: any, response: any): boolean; +} + +// @public +class WsgInstance extends ECInstance { + // (undocumented) + changeState?: ChangeState; + // (undocumented) + eTag?: string; + // (undocumented) + wsgId: string; +} + +// @public +interface WsgRequestOptions { + // (undocumented) + CustomOptions?: any; + // (undocumented) + RefreshInstances?: boolean; + // (undocumented) + ResponseContent?: "FullInstance" | "Empty" | "InstanceId"; +} + +// WARNING: Unsupported export: ConstructorType +// WARNING: Unsupported export: ChangeState +// WARNING: Unsupported export: loggingCategory +// WARNING: Unsupported export: loggingCategoryFullUrl +// WARNING: Unsupported export: requestIdHeaderName +// WARNING: Unsupported export: EventType +// WARNING: Unsupported export: GlobalEventType +// WARNING: Unsupported export: ThumbnailSize +// (No @packagedocumentation comment for this package) diff --git a/common/api/imodeljs-common.api.ts b/common/api/imodeljs-common.api.ts index 6cec17e..ba03aa4 100644 --- a/common/api/imodeljs-common.api.ts +++ b/common/api/imodeljs-common.api.ts @@ -1,4777 +1,4822 @@ -// @beta -module AmbientOcclusion { - interface Props { - readonly bias?: number; - readonly blurDelta?: number; - readonly blurSigma?: number; - // (undocumented) - readonly blurTexelStepSize?: number; - readonly intensity?: number; - readonly texelStepSize?: number; - readonly zLengthCap?: number; - } - - class Settings implements Props { - // (undocumented) - readonly bias?: number; - // (undocumented) - readonly blurDelta?: number; - // (undocumented) - readonly blurSigma?: number; - // (undocumented) - readonly blurTexelStepSize?: number; - // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static defaults: Settings; - // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static fromJSON(json?: Props): Settings; - // (undocumented) - readonly intensity?: number; - // (undocumented) - readonly texelStepSize?: number; - // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - toJSON(): Props; - // (undocumented) - readonly zLengthCap?: number; - } - -} - -// @alpha (undocumented) -class AnalysisStyle implements AnalysisStyleProps { - // (undocumented) - clone(out?: AnalysisStyle): AnalysisStyle; - // (undocumented) - copyFrom(source: AnalysisStyle): void; - // (undocumented) - displacementChannelName?: string; - // (undocumented) - displacementScale?: number; - // (undocumented) - static fromJSON(json?: AnalysisStyleProps): AnalysisStyle; - // (undocumented) - inputName?: string; - // (undocumented) - inputRange?: Range1d; - // (undocumented) - normalChannelName?: string; - // (undocumented) - scalarChannelName?: string; - // (undocumented) - scalarRange?: Range1d; - // WARNING: The type "Gradient.ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - scalarThematicSettings?: Gradient.ThematicSettings; - // (undocumented) - scalarThematicTexture?: RenderTexture; -} - -// @alpha -interface AnalysisStyleProps { - // (undocumented) - displacementChannelName?: string; - // (undocumented) - displacementScale?: number; - // (undocumented) - inputName?: string; - // (undocumented) - inputRange?: Range1d; - // (undocumented) - normalChannelName?: string; - // (undocumented) - scalarChannelName?: string; - // (undocumented) - scalarRange?: Range1d; - // (undocumented) - scalarThematicSettings?: Gradient.ThematicSettingsProps; -} - -// @public (undocumented) -enum AntiAliasPref { - // (undocumented) - Detect = 0, - // (undocumented) - Off = 2, - // (undocumented) - On = 1 -} - -// @public -interface AreaFillProps { - backgroundFill?: BackgroundFill; - color?: ColorDefProps; - display: FillDisplay; - gradient?: Gradient.SymbProps; - transparency?: number; -} - -// @public (undocumented) -module AreaPattern { - // (undocumented) - class HatchDefLine implements HatchDefLineProps { - // WARNING: The type "HatchDefLineProps" needs to be exported by the package (e.g. added to index.ts) - constructor(json: HatchDefLineProps); - // (undocumented) - angle?: Angle; - // (undocumented) - dashes?: number[]; - // (undocumented) - offset?: Point2d; - // (undocumented) - through?: Point2d; - } - - interface HatchDefLineProps { - angle?: AngleProps; - dashes?: number[]; - offset?: XYProps; - through?: XYProps; - } - - class Params implements ParamsProps { - // (undocumented) - angle1?: Angle; - // (undocumented) - angle2?: Angle; - // (undocumented) - applyTransform(transform: Transform): boolean; - // WARNING: The type "Params" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - clone(): Params; - // (undocumented) - color?: ColorDef; - // WARNING: The type "HatchDefLine" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - defLines?: HatchDefLine[]; - // WARNING: The type "Params" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - equals(other: Params): boolean; - // WARNING: The type "ParamsProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Params" needs to be exported by the package (e.g. added to index.ts) - static fromJSON(json?: ParamsProps): Params; - // (undocumented) - static getTransformPatternScale(transform: Transform): number; - // (undocumented) - invisibleBoundary?: boolean; - // (undocumented) - origin?: Point3d; - // (undocumented) - rotation?: YawPitchRollAngles; - // (undocumented) - scale?: number; - // (undocumented) - snappable?: boolean; - // (undocumented) - space1?: number; - // (undocumented) - space2?: number; - // (undocumented) - symbolId?: Id64String; - // (undocumented) - static transformPatternSpace(transform: Transform, oldSpace: number, patRot: Matrix3d, angle?: Angle): number; - // (undocumented) - weight?: number; - } - - interface ParamsProps { - angle1?: AngleProps; - angle2?: AngleProps; - color?: ColorDefProps; - defLines?: HatchDefLineProps[]; - invisibleBoundary?: boolean; - origin?: XYZProps; - rotation?: YawPitchRollProps; - scale?: number; - snappable?: boolean; - space1?: number; - space2?: number; - symbolId?: Id64String; - weight?: number; - } - -} - -// @beta -enum AuthStatus { - // (undocumented) - AUTHSTATUS_BASE = 131072, - // (undocumented) - Error = 131072, - // (undocumented) - Success = 0 -} - -// @public -interface AuxCoordSystem2dProps extends AuxCoordSystemProps { - angle?: AngleProps; - origin?: XYProps; -} - -// @public -interface AuxCoordSystem3dProps extends AuxCoordSystemProps { - origin?: XYZProps; - pitch?: AngleProps; - // (undocumented) - roll?: AngleProps; - // (undocumented) - yaw?: AngleProps; -} - -// @public (undocumented) -interface AuxCoordSystemProps extends ElementProps { - // (undocumented) - description?: string; - // (undocumented) - type?: number; -} - -// @public -enum BackgroundFill { - None = 0, - Outline = 2, - Solid = 1 -} - -// @public -interface BackgroundMapProps { - // (undocumented) - groundBias?: number; - // (undocumented) - providerData?: { - mapType?: BackgroundMapType; - } - providerName?: string; -} - -// @public -enum BackgroundMapType { - // (undocumented) - Aerial = 2, - // (undocumented) - Hybrid = 3, - // (undocumented) - Street = 1 -} - -// @beta -enum BatchType { - Classifier = 1, - Primary = 0 -} - -// @public -class BentleyCloudRpcConfiguration extends RpcConfiguration { - applicationAuthorizationKey: string; - applicationVersionKey: string; - // WARNING: The type "BentleyCloudRpcProtocol" needs to be exported by the package (e.g. added to index.ts) - readonly protocol: BentleyCloudRpcProtocol; -} - -// @public -class BentleyCloudRpcManager extends RpcManager { - static initializeClient(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration; - static initializeImpl(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration; -} - -// @public -interface BentleyCloudRpcParams { - info: OpenAPIInfo; - pendingRequestListener?: RpcRequestEventHandler; - protocol?: typeof BentleyCloudRpcProtocol; - uriPrefix?: string; -} - -// @public -class BentleyError extends Error { - constructor(errorNumber: number | IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | RepositoryStatus | ChangeSetStatus | HttpStatus | WSStatus | IModelHubStatus, message?: string, log?: LogFunction, category?: string, getMetaData?: GetMetaDataFunction); - protected _initName(): string; - // (undocumented) - errorNumber: number; - // (undocumented) - getMetaData(): any; - // (undocumented) - readonly hasMetaData: boolean; -} - -// @public -enum BentleyStatus { - // (undocumented) - ERROR = 32768, - // (undocumented) - SUCCESS = 0 -} - -// @public -enum BisCodeSpec { - // (undocumented) - annotationFrameStyle = "bis:AnnotationFrameStyle", - // (undocumented) - annotationLeaderStyle = "bis:AnnotationLeaderStyle", - // (undocumented) - annotationTextStyle = "bis:AnnotationTextStyle", - // (undocumented) - auxCoordSystem2d = "bis:AuxCoordSystem2d", - // (undocumented) - auxCoordSystem3d = "bis:AuxCoordSystem3d", - // (undocumented) - auxCoordSystemSpatial = "bis:AuxCoordSystemSpatial", - // (undocumented) - categorySelector = "bis:CategorySelector", - // (undocumented) - colorBook = "bis:ColorBook", - // (undocumented) - displayStyle = "bis:DisplayStyle", - // (undocumented) - drawing = "bis:Drawing", - // (undocumented) - drawingCategory = "bis:DrawingCategory", - // (undocumented) - geometryPart = "bis:GeometryPart", - // (undocumented) - graphicalType2d = "bis:GraphicalType2d", - // (undocumented) - informationPartitionElement = "bis:InformationPartitionElement", - // (undocumented) - lineStyle = "bis:LineStyle", - // (undocumented) - linkElement = "bis:LinkElement", - // (undocumented) - modelSelector = "bis:ModelSelector", - // (undocumented) - nullCodeSpec = "bis:NullCodeSpec", - // (undocumented) - physicalMaterial = "bis:PhysicalMaterial", - // (undocumented) - physicalType = "bis:PhysicalType", - // (undocumented) - renderMaterial = "bis:RenderMaterial", - // (undocumented) - sheet = "bis:Sheet", - // (undocumented) - spatialCategory = "bis:SpatialCategory", - // (undocumented) - spatialLocationType = "bis:SpatialLocationType", - // (undocumented) - subCategory = "bis:SubCategory", - // (undocumented) - subject = "bis:Subject", - // (undocumented) - templateRecipe2d = "bis:TemplateRecipe2d", - // (undocumented) - templateRecipe3d = "bis:TemplateRecipe3d", - // (undocumented) - textAnnotationSeed = "bis:TextAnnotationSeed", - // (undocumented) - texture = "bis:Texture", - // (undocumented) - viewDefinition = "bis:ViewDefinition" -} - -// @beta (undocumented) -module BRepEntity { - interface DataProps { - data?: string; - faceSymbology?: FaceSymbologyProps[]; - transform?: TransformProps; - type?: Type; - } - - interface FaceSymbologyProps { - color?: ColorDefProps; - materialId?: Id64String; - transparency?: number; - } - - enum Type { - Sheet = 1, - Solid = 0, - Wire = 2 - } - -} - -// @beta -enum BriefcaseStatus { - // (undocumented) - CannotAcquire = 131072, - // (undocumented) - CannotApplyChanges = 131078, - // (undocumented) - CannotCopy = 131075, - // (undocumented) - CannotDelete = 131076, - // (undocumented) - CannotDownload = 131073, - // (undocumented) - CannotUpload = 131074, - // (undocumented) - VersionNotFound = 131077 -} - -// @public (undocumented) -interface CalloutProps extends GeometricElement2dProps { - // (undocumented) - drawingModel?: RelatedElementProps; -} - -// @public -class Camera implements CameraProps { - constructor(props?: CameraProps); - // (undocumented) - clone(): Camera; - // (undocumented) - copyFrom(rhs: Camera): void; - // (undocumented) - equals(other: Camera): boolean; - // (undocumented) - readonly eye: Point3d; - // (undocumented) - focusDist: number; - // (undocumented) - getEyePoint(): Point3d; - // (undocumented) - getFocusDistance(): number; - // (undocumented) - getLensAngle(): Angle; - // (undocumented) - invalidateFocus(): void; - // (undocumented) - readonly isFocusValid: boolean; - // (undocumented) - readonly isLensValid: boolean; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - static isValidLensAngle(val: Angle): boolean; - // (undocumented) - readonly lens: Angle; - // (undocumented) - setEyePoint(pt: XYAndZ): void; - // (undocumented) - setFocusDistance(dist: number): void; - // (undocumented) - setLensAngle(angle: Angle): void; - // (undocumented) - validateLens(): void; - // (undocumented) - static validateLensAngle(val: Angle): void; -} - -// @public -interface CameraProps { - // (undocumented) - eye: XYZProps; - // (undocumented) - focusDist: number; - // (undocumented) - lens: AngleProps; -} - -// @public -class Cartographic implements LatLongAndHeight { - constructor(longitude?: number, latitude?: number, height?: number); - clone(result?: Cartographic): Cartographic; - equals(right: LatLongAndHeight): boolean; - equalsEpsilon(right: LatLongAndHeight, epsilon: number): boolean; - static fromAngles(longitude: Angle, latitude: Angle, height: number, result?: Cartographic): Cartographic; - static fromDegrees(longitude: number, latitude: number, height: number, result?: Cartographic): Cartographic; - static fromEcef(cartesian: Point3d, result?: Cartographic): Cartographic | undefined; - static fromRadians(longitude: number, latitude: number, height?: number, result?: Cartographic): Cartographic; - // (undocumented) - height: number; - // (undocumented) - latitude: number; - // (undocumented) - longitude: number; - toEcef(result?: Point3d): Point3d; - toString(): string; -} - -// @public -class CartographicRange { - constructor(spatialRange: Range3d, spatialToEcef: Transform); - getLongitudeLatitudeBoundingBox(): Range2d; - // (undocumented) - intersectsRange(other: CartographicRange): boolean; -} - -// @public -interface CategoryProps extends ElementProps { - // (undocumented) - description?: string; - // (undocumented) - rank?: Rank; -} - -// @public -interface CategorySelectorProps extends DefinitionElementProps { - // (undocumented) - categories: Id64Array; -} - -// @beta (undocumented) -interface ChangedElements { - // (undocumented) - classIds: Id64String[]; - // (undocumented) - elements: Id64String[]; - // (undocumented) - opcodes: number[]; -} - -// @public -enum ChangedValueState { - // (undocumented) - AfterInsert = 1, - // (undocumented) - AfterUpdate = 3, - // (undocumented) - BeforeDelete = 4, - // (undocumented) - BeforeUpdate = 2 -} - -// @public -enum ChangeOpCode { - // (undocumented) - Delete = 4, - // (undocumented) - Insert = 1, - // (undocumented) - Update = 2 -} - -// @beta -enum ChangeSetStatus { - ApplyError = 90113, - CannotMergeIntoMaster = 90136, - CannotMergeIntoReadonly = 90135, - CannotMergeIntoReversed = 90137, - // (undocumented) - CHANGESET_ERROR_BASE = 90112, - ChangeTrackingNotEnabled = 90114, - CorruptedChangeStream = 90115, - CouldNotOpenDgnDb = 90131, - FileNotFound = 90116, - FileWriteError = 90117, - HasLocalChanges = 90118, - HasUncommittedChanges = 90119, - InDynamicTransaction = 90122, - InvalidId = 90120, - InvalidVersion = 90121, - IsCreatingChangeSet = 90123, - IsNotCreatingChangeSet = 90124, - MergePropagationError = 90125, - MergeSchemaChangesOnOpen = 90132, - NothingToMerge = 90126, - NoTransactions = 90127, - ParentMismatch = 90128, - ProcessSchemaChangesOnOpen = 90134, - ReverseOrReinstateSchemaChangesOnOpen = 90133, - SQLiteError = 90129, - // (undocumented) - Success = 0, - WrongDgnDb = 90130 -} - -// @public -class Code implements CodeProps { - constructor(val: CodeProps); - static createEmpty(): Code; - // (undocumented) - equals(other: Code): boolean; - // (undocumented) - static fromJSON(json?: any): Code; - // (undocumented) - getValue(): string; - scope: string; - spec: Id64String; - value?: string; -} - -// @public -interface CodeProps { - // (undocumented) - scope: CodeScopeProps; - // (undocumented) - spec: Id64String; - // (undocumented) - value?: string; -} - -// @public -module CodeScopeSpec { - // @public - enum ScopeRequirement { - ElementId = 1, - FederationGuid = 2 - } - - // @public - enum Type { - Model = 2, - ParentElement = 3, - RelatedElement = 4, - Repository = 1 - } - -} - -// @public -class CodeSpec { - // WARNING: The type "CodeScopeSpec.Type" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "CodeScopeSpec.ScopeRequirement" needs to be exported by the package (e.g. added to index.ts) - constructor(iModel: IModel, id: Id64String, name: string, specScopeType: CodeScopeSpec.Type, scopeReq?: CodeScopeSpec.ScopeRequirement, properties?: any); - id: Id64String; - iModel: IModel; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - name: string; - // (undocumented) - properties: any; - // WARNING: The type "CodeScopeSpec.ScopeRequirement" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - scopeReq: CodeScopeSpec.ScopeRequirement; - // WARNING: The type "CodeScopeSpec.Type" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - specScopeType: CodeScopeSpec.Type; -} - -// @public -enum ColorByName { - // (undocumented) - aliceBlue = 16775408, - // (undocumented) - amber = 49151, - // (undocumented) - antiqueWhite = 14150650, - // (undocumented) - aqua = 16776960, - // (undocumented) - aquamarine = 13959039, - // (undocumented) - azure = 16777200, - // (undocumented) - beige = 14480885, - // (undocumented) - bisque = 12903679, - // (undocumented) - black = 0, - // (undocumented) - blanchedAlmond = 13495295, - // (undocumented) - blue = 16711680, - // (undocumented) - blueViolet = 14822282, - // (undocumented) - brown = 2763429, - // (undocumented) - burlyWood = 8894686, - // (undocumented) - cadetBlue = 10526303, - // (undocumented) - chartreuse = 65407, - // (undocumented) - chocolate = 1993170, - // (undocumented) - coral = 5275647, - // (undocumented) - cornflowerBlue = 15570276, - // (undocumented) - cornSilk = 14481663, - // (undocumented) - crimson = 3937500, - // (undocumented) - cyan = 16776960, - // (undocumented) - darkBlue = 9109504, - // (undocumented) - darkBrown = 2179941, - // (undocumented) - darkCyan = 9145088, - // (undocumented) - darkGoldenrod = 755384, - // (undocumented) - darkGray = 11119017, - // (undocumented) - darkGreen = 25600, - // (undocumented) - darkGrey = 11119017, - // (undocumented) - darkKhaki = 7059389, - // (undocumented) - darkMagenta = 9109643, - // (undocumented) - darkOliveGreen = 3107669, - // (undocumented) - darkOrange = 36095, - // (undocumented) - darkOrchid = 13382297, - // (undocumented) - darkRed = 139, - // (undocumented) - darkSalmon = 8034025, - // (undocumented) - darkSeagreen = 9419919, - // (undocumented) - darkSlateBlue = 9125192, - // (undocumented) - darkSlateGray = 5197615, - // (undocumented) - darkSlateGrey = 5197615, - // (undocumented) - darkTurquoise = 13749760, - // (undocumented) - darkViolet = 13828244, - // (undocumented) - deepPink = 9639167, - // (undocumented) - deepSkyBlue = 16760576, - // (undocumented) - dimGray = 6908265, - // (undocumented) - dimGrey = 6908265, - // (undocumented) - dodgerBlue = 16748574, - // (undocumented) - fireBrick = 2237106, - // (undocumented) - floralWhite = 15792895, - // (undocumented) - forestGreen = 2263842, - // (undocumented) - fuchsia = 16711935, - // (undocumented) - gainsboro = 14474460, - // (undocumented) - ghostWhite = 16775416, - // (undocumented) - gold = 55295, - // (undocumented) - goldenrod = 2139610, - // (undocumented) - gray = 8421504, - // (undocumented) - green = 32768, - // (undocumented) - greenYellow = 3145645, - // (undocumented) - grey = 8421504, - // (undocumented) - honeydew = 15794160, - // (undocumented) - hotPink = 11823615, - // (undocumented) - indianRed = 6053069, - // (undocumented) - indigo = 8519755, - // (undocumented) - ivory = 15794175, - // (undocumented) - khaki = 9234160, - // (undocumented) - lavender = 16443110, - // (undocumented) - lavenderBlush = 16118015, - // (undocumented) - lawnGreen = 64636, - // (undocumented) - lemonChiffon = 13499135, - // (undocumented) - lightBlue = 15128749, - // (undocumented) - lightCoral = 8421616, - // (undocumented) - lightCyan = 16777184, - // (undocumented) - lightGoldenrodYellow = 13826810, - // (undocumented) - lightGray = 13882323, - // (undocumented) - lightGreen = 9498256, - // (undocumented) - lightGrey = 13882323, - // (undocumented) - lightPink = 12695295, - // (undocumented) - lightSalmon = 8036607, - // (undocumented) - lightSeagreen = 11186720, - // (undocumented) - lightSkyBlue = 16436871, - // (undocumented) - lightSlateGray = 10061943, - // (undocumented) - lightSlateGrey = 10061943, - // (undocumented) - lightSteelBlue = 14599344, - // (undocumented) - lightyellow = 14745599, - // (undocumented) - lime = 65280, - // (undocumented) - limeGreen = 3329330, - // (undocumented) - linen = 15134970, - // (undocumented) - magenta = 16711935, - // (undocumented) - maroon = 128, - // (undocumented) - mediumAquamarine = 11193702, - // (undocumented) - mediumBlue = 13434880, - // (undocumented) - mediumOrchid = 13850042, - // (undocumented) - mediumPurple = 14381203, - // (undocumented) - mediumSeaGreen = 7451452, - // (undocumented) - mediumSlateBlue = 15624315, - // (undocumented) - mediumSpringGreen = 10156544, - // (undocumented) - mediumTurquoise = 13422920, - // (undocumented) - mediumVioletRed = 8721863, - // (undocumented) - midnightBlue = 7346457, - // (undocumented) - mintCream = 16449525, - // (undocumented) - mistyRose = 14804223, - // (undocumented) - moccasin = 11920639, - // (undocumented) - navajoWhite = 11394815, - // (undocumented) - navy = 8388608, - // (undocumented) - oldLace = 15136253, - // (undocumented) - olive = 32896, - // (undocumented) - oliveDrab = 2330219, - // (undocumented) - orange = 42495, - // (undocumented) - orangeRed = 17919, - // (undocumented) - orchid = 14053594, - // (undocumented) - paleGoldenrod = 11200750, - // (undocumented) - paleGreen = 10025880, - // (undocumented) - paleTurquoise = 15658671, - // (undocumented) - paleVioletRed = 9662683, - // (undocumented) - papayaWhip = 14020607, - // (undocumented) - peachPuff = 12180223, - // (undocumented) - peru = 4163021, - // (undocumented) - pink = 13353215, - // (undocumented) - plum = 14524637, - // (undocumented) - powderBlue = 15130800, - // (undocumented) - purple = 8388736, - // (undocumented) - rebeccaPurple = 10040166, - // (undocumented) - red = 255, - // (undocumented) - rosyBrown = 9408444, - // (undocumented) - royalBlue = 14772545, - // (undocumented) - saddleBrown = 1262987, - // (undocumented) - salmon = 7504122, - // (undocumented) - sandyBrown = 6333684, - // (undocumented) - seaGreen = 5737262, - // (undocumented) - seaShell = 15660543, - // (undocumented) - sienna = 2970272, - // (undocumented) - silver = 12632256, - // (undocumented) - skyBlue = 15453831, - // (undocumented) - slateBlue = 13458026, - // (undocumented) - slateGray = 9470064, - // (undocumented) - slateGrey = 9470064, - // (undocumented) - snow = 16448255, - // (undocumented) - springGreen = 8388352, - // (undocumented) - steelBlue = 11829830, - // (undocumented) - tan = 9221330, - // (undocumented) - teal = 8421376, - // (undocumented) - thistle = 14204888, - // (undocumented) - tomato = 4678655, - // (undocumented) - turquoise = 13688896, - // (undocumented) - violet = 15631086, - // (undocumented) - wheat = 11788021, - // (undocumented) - white = 16777215, - // (undocumented) - whiteSmoke = 16119285, - // (undocumented) - yellow = 65535, - // (undocumented) - yellowGreen = 3329434 -} - -// @public -class ColorDef { - constructor(val?: string | ColorDefProps); - adjustForContrast(other: ColorDef, alpha?: number): ColorDef; - static readonly black: ColorDef; - static readonly blue: ColorDef; - clone(): ColorDef; - readonly colors: { - b: number; - g: number; - r: number; - t: number; - } - equals(other: ColorDef): boolean; - static from(red: number, green: number, blue: number, transparency?: number, result?: ColorDef): ColorDef; - static fromHSL(h: number, s: number, l: number, out?: ColorDef): ColorDef; - static fromHSV(hsv: HSVColor, out?: ColorDef): ColorDef; - static fromJSON(json?: any): ColorDef; - getAbgr(): number; - getAlpha(): number; - getRgb(): number; - static readonly green: ColorDef; - invert(): ColorDef; - readonly isOpaque: boolean; - lerp(color2: ColorDef, weight: number, result?: ColorDef): ColorDef; - readonly name: string | undefined; - static readonly red: ColorDef; - static rgb2bgr(val: number): number; - setAlpha(alpha: number): void; - setFrom(other: ColorDef): void; - setTransparency(transparency: number): void; - tbgr: number; - toHexString(): string; - toHSL(opt?: HSLColor): HSLColor; - toHSV(out?: HSVColor): HSVColor; - toJSON(): ColorDefProps; - toRgbString(): string; - static readonly white: ColorDef; -} - -// @public (undocumented) -class ColorIndex { - constructor(); - // (undocumented) - readonly hasAlpha: boolean; - // (undocumented) - initNonUniform(colors: Uint32Array, indices: Uint16Array, hasAlpha: boolean): void; - // (undocumented) - initUniform(color: ColorDef | number): void; - // (undocumented) - readonly isUniform: boolean; - // (undocumented) - readonly nonUniform: NonUniformColor | undefined; - // (undocumented) - readonly numColors: number; - // (undocumented) - reset(): void; - // (undocumented) - readonly uniform: ColorDef | undefined; -} - -// @public -interface ContextRealityModelProps { - // (undocumented) - description?: string; - // (undocumented) - name?: string; - // (undocumented) - tilesetUrl: string; -} - -// @public -interface CreateIModelProps extends IModelProps { - client?: string; - guid?: GuidString; - thumbnail?: ThumbnailProps; -} - -// @beta -interface CustomAttribute { - ecclass: string; - properties: { - [propName: string]: any; - } -} - -// @public -enum DbResult { - BE_SQLITE_ABORT = 4, - // (undocumented) - BE_SQLITE_ABORT_ROLLBACK = 516, - BE_SQLITE_AUTH = 23, - BE_SQLITE_BUSY = 5, - // (undocumented) - BE_SQLITE_BUSY_RECOVERY = 261, - BE_SQLITE_CANTOPEN = 14, - // (undocumented) - BE_SQLITE_CANTOPEN_FULLPATH = 782, - // (undocumented) - BE_SQLITE_CANTOPEN_ISDIR = 526, - // (undocumented) - BE_SQLITE_CANTOPEN_NOTEMPDIR = 270, - BE_SQLITE_CONSTRAINT_BASE = 19, - // (undocumented) - BE_SQLITE_CONSTRAINT_CHECK = 275, - // (undocumented) - BE_SQLITE_CONSTRAINT_COMMITHOOK = 531, - // (undocumented) - BE_SQLITE_CONSTRAINT_FOREIGNKEY = 787, - // (undocumented) - BE_SQLITE_CONSTRAINT_FUNCTION = 1043, - // (undocumented) - BE_SQLITE_CONSTRAINT_NOTNULL = 1299, - // (undocumented) - BE_SQLITE_CONSTRAINT_PRIMARYKEY = 1555, - // (undocumented) - BE_SQLITE_CONSTRAINT_TRIGGER = 1811, - // (undocumented) - BE_SQLITE_CONSTRAINT_UNIQUE = 2067, - // (undocumented) - BE_SQLITE_CONSTRAINT_VTAB = 2323, - BE_SQLITE_CORRUPT = 11, - // (undocumented) - BE_SQLITE_CORRUPT_VTAB = 267, - BE_SQLITE_DONE = 101, - BE_SQLITE_EMPTY = 16, - BE_SQLITE_ERROR = 1, - BE_SQLITE_ERROR_AlreadyOpen = 33554442, - BE_SQLITE_ERROR_BadDbProfile = 100663306, - BE_SQLITE_ERROR_ChangeTrackError = 218103818, - BE_SQLITE_ERROR_CouldNotAcquireLocksOrCodes = 352321546, - BE_SQLITE_ERROR_FileExists = 16777226, - BE_SQLITE_ERROR_FileNotFound = 67108874, - BE_SQLITE_ERROR_InvalidChangeSetVersion = 234881034, - BE_SQLITE_ERROR_InvalidProfileVersion = 117440522, - BE_SQLITE_ERROR_NoPropertyTable = 50331658, - BE_SQLITE_ERROR_NoTxnActive = 83886090, - BE_SQLITE_ERROR_ProfileTooNew = 201326602, - BE_SQLITE_ERROR_ProfileTooNewForReadWrite = 184549386, - BE_SQLITE_ERROR_ProfileTooOld = 167772170, - BE_SQLITE_ERROR_ProfileTooOldForReadWrite = 150994954, - BE_SQLITE_ERROR_ProfileUpgradeFailed = 134217738, - BE_SQLITE_ERROR_SchemaImportFailed = 335544330, - BE_SQLITE_ERROR_SchemaLockFailed = 301989898, - BE_SQLITE_ERROR_SchemaTooNew = 268435466, - BE_SQLITE_ERROR_SchemaTooOld = 285212682, - BE_SQLITE_ERROR_SchemaUpgradeFailed = 318767114, - BE_SQLITE_ERROR_SchemaUpgradeRequired = 251658250, - BE_SQLITE_FORMAT = 24, - BE_SQLITE_FULL = 13, - BE_SQLITE_INTERNAL = 2, - BE_SQLITE_INTERRUPT = 9, - BE_SQLITE_IOERR = 10, - // (undocumented) - BE_SQLITE_IOERR_ACCESS = 3338, - // (undocumented) - BE_SQLITE_IOERR_BLOCKED = 2826, - // (undocumented) - BE_SQLITE_IOERR_CHECKRESERVEDLOCK = 3594, - // (undocumented) - BE_SQLITE_IOERR_CLOSE = 4106, - // (undocumented) - BE_SQLITE_IOERR_DELETE = 2570, - // (undocumented) - BE_SQLITE_IOERR_DELETE_NOENT = 5898, - // (undocumented) - BE_SQLITE_IOERR_DIR_CLOSE = 4362, - // (undocumented) - BE_SQLITE_IOERR_DIR_FSYNC = 1290, - // (undocumented) - BE_SQLITE_IOERR_FSTAT = 1802, - // (undocumented) - BE_SQLITE_IOERR_FSYNC = 1034, - // (undocumented) - BE_SQLITE_IOERR_LOCK = 3850, - // (undocumented) - BE_SQLITE_IOERR_NOMEM = 3082, - // (undocumented) - BE_SQLITE_IOERR_RDLOCK = 2314, - // (undocumented) - BE_SQLITE_IOERR_READ = 266, - // (undocumented) - BE_SQLITE_IOERR_SEEK = 5642, - // (undocumented) - BE_SQLITE_IOERR_SHMLOCK = 5130, - // (undocumented) - BE_SQLITE_IOERR_SHMMAP = 5386, - // (undocumented) - BE_SQLITE_IOERR_SHMOPEN = 4618, - // (undocumented) - BE_SQLITE_IOERR_SHMSIZE = 4874, - // (undocumented) - BE_SQLITE_IOERR_SHORT_READ = 522, - // (undocumented) - BE_SQLITE_IOERR_TRUNCATE = 1546, - // (undocumented) - BE_SQLITE_IOERR_UNLOCK = 2058, - // (undocumented) - BE_SQLITE_IOERR_WRITE = 778, - BE_SQLITE_LOCKED = 6, - // (undocumented) - BE_SQLITE_LOCKED_SHAREDCACHE = 262, - BE_SQLITE_MISMATCH = 20, - BE_SQLITE_MISUSE = 21, - BE_SQLITE_NOLFS = 22, - BE_SQLITE_NOMEM = 7, - BE_SQLITE_NOTADB = 26, - BE_SQLITE_NOTFOUND = 12, - // (undocumented) - BE_SQLITE_OK = 0, - BE_SQLITE_PERM = 3, - BE_SQLITE_PROTOCOL = 15, - BE_SQLITE_RANGE = 25, - BE_SQLITE_READONLY = 8, - // (undocumented) - BE_SQLITE_READONLY_CANTLOCK = 520, - // (undocumented) - BE_SQLITE_READONLY_RECOVERY = 264, - // (undocumented) - BE_SQLITE_READONLY_ROLLBACK = 776, - BE_SQLITE_ROW = 100, - BE_SQLITE_SCHEMA = 17, - BE_SQLITE_TOOBIG = 18 -} - -// @beta -class DecorationGeometryProps { - constructor(id: Id64String, geometryStream: GeometryStreamProps); - // (undocumented) - readonly geometryStream: GeometryStreamProps; - // (undocumented) - readonly id: Id64String; -} - -// @public -interface DefinitionElementProps extends ElementProps { - // (undocumented) - isPrivate?: boolean; -} - -// @beta -interface DisplayStyle3dProps extends DisplayStyleProps { - jsonProperties?: { - styles?: DisplayStyle3dSettingsProps; - } -} - -// @beta -class DisplayStyle3dSettings extends DisplayStyleSettings { - constructor(jsonProperties: { - styles?: DisplayStyle3dSettingsProps; - }); - // WARNING: The type "AmbientOcclusion.Settings" needs to be exported by the package (e.g. added to index.ts) - ambientOcclusionSettings: AmbientOcclusion.Settings; - // (undocumented) - environment: EnvironmentProps; - // WARNING: The type "HiddenLine.Settings" needs to be exported by the package (e.g. added to index.ts) - hiddenLineSettings: HiddenLine.Settings; - // (undocumented) - toJSON(): DisplayStyle3dSettingsProps; -} - -// @beta -interface DisplayStyle3dSettingsProps extends DisplayStyleSettingsProps { - ao?: AmbientOcclusion.Props; - environment?: EnvironmentProps; - hline?: HiddenLine.SettingsProps; -} - -// @beta -interface DisplayStyleProps extends DefinitionElementProps { - jsonProperties?: { - styles?: DisplayStyleSettingsProps; - } -} - -// @beta -class DisplayStyleSettings { - constructor(jsonProperties: { - styles?: DisplayStyleSettingsProps; - }); - // (undocumented) - protected readonly _json: DisplayStyleSettingsProps; - backgroundColor: ColorDef; - // (undocumented) - backgroundMap: BackgroundMapProps | undefined; - dropSubCategoryOverride(id: Id64String): void; - getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined; - readonly hasSubCategoryOverride: boolean; - monochromeColor: ColorDef; - overrideSubCategory(id: Id64String, ovr: SubCategoryOverride): void; - // (undocumented) - toJSON(): DisplayStyleSettingsProps; - viewFlags: ViewFlags; -} - -// @beta -interface DisplayStyleSettingsProps { - analysisStyle?: AnalysisStyleProps; - backgroundColor?: ColorDefProps; - backgroundMap?: BackgroundMapProps; - ContextRealityModels?: ContextRealityModelProps[]; - monochromeColor?: ColorDefProps; - scheduleScript?: RenderSchedule.ElementTimelineProps[]; - subCategoryOvr?: DisplayStyleSubCategoryProps[]; - // (undocumented) - viewflags?: ViewFlagProps; -} - -// @public -interface DisplayStyleSubCategoryProps extends SubCategoryAppearance.Props { - subCategory?: Id64String; -} - -// @public -class EcefLocation implements EcefLocationProps { - constructor(props: EcefLocationProps); - static createFromCartographicOrigin(origin: Cartographic): EcefLocation; - getTransform(): Transform; - readonly orientation: YawPitchRollAngles; - readonly origin: Point3d; -} - -// @public -interface EcefLocationProps { - orientation: YawPitchRollProps; - origin: XYZProps; -} - -// @public -class ECJsNames { - static systemPropertyToJsName(systemPropertyType: ECSqlSystemProperty): string; - static toJsName(propName: string, isSystemProperty?: boolean): string; -} - -// @public -enum ECSqlSystemProperty { - // (undocumented) - ECClassId = 1, - // (undocumented) - ECInstanceId = 0, - // (undocumented) - NavigationId = 6, - // (undocumented) - NavigationRelClassId = 7, - // (undocumented) - PointX = 8, - // (undocumented) - PointY = 9, - // (undocumented) - PointZ = 10, - // (undocumented) - SourceECClassId = 3, - // (undocumented) - SourceECInstanceId = 2, - // (undocumented) - TargetECClassId = 5, - // (undocumented) - TargetECInstanceId = 4 -} - -// @public -enum ECSqlValueType { - // (undocumented) - Blob = 1, - // (undocumented) - Boolean = 2, - // (undocumented) - DateTime = 3, - // (undocumented) - Double = 4, - // (undocumented) - Geometry = 5, - // (undocumented) - Guid = 16, - // (undocumented) - Id = 6, - // (undocumented) - Int = 7, - // (undocumented) - Int64 = 8, - // (undocumented) - Navigation = 12, - // (undocumented) - Point2d = 9, - // (undocumented) - Point3d = 10, - // (undocumented) - PrimitiveArray = 14, - // (undocumented) - String = 11, - // (undocumented) - Struct = 13, - // (undocumented) - StructArray = 15 -} - -// @public (undocumented) -class EdgeArgs { - // (undocumented) - clear(): void; - // (undocumented) - edges?: MeshEdge[]; - // (undocumented) - init(meshEdges?: MeshEdges): boolean; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - readonly numEdges: number; -} - -// @public -class ElectronRpcConfiguration extends RpcConfiguration { - // (undocumented) - static readonly isElectron: boolean; - // WARNING: The type "ElectronRpcProtocol" needs to be exported by the package (e.g. added to index.ts) - protocol: ElectronRpcProtocol; -} - -// @public -class ElectronRpcManager extends RpcManager { - static initializeClient(params: ElectronRpcParams, interfaces: RpcInterfaceDefinition[]): ElectronRpcConfiguration; - static initializeImpl(params: ElectronRpcParams, interfaces: RpcInterfaceDefinition[]): ElectronRpcConfiguration; -} - -// @public -interface ElectronRpcParams { - // (undocumented) - protocol?: typeof ElectronRpcProtocol; -} - -// @public -interface ElementAspectProps extends EntityProps { - // (undocumented) - element: RelatedElementProps; -} - -// @public -interface ElementLoadProps { - // (undocumented) - code?: CodeProps; - // (undocumented) - federationGuid?: GuidString; - // (undocumented) - id?: Id64String; - wantBRepData?: boolean; - wantGeometry?: boolean; -} - -// @public -interface ElementProps extends EntityProps { - code: CodeProps; - federationGuid?: GuidString; - jsonProperties?: any; - model: Id64String; - parent?: RelatedElementProps; - userLabel?: string; -} - -// @beta -class EntityMetaData implements EntityMetaDataProps { - constructor(jsonObj: EntityMetaDataProps); - readonly baseClasses: string[]; - readonly customAttributes?: CustomAttribute[]; - // (undocumented) - readonly description?: string; - // (undocumented) - readonly displayLabel?: string; - readonly ecclass: string; - // (undocumented) - readonly modifier?: string; - readonly properties: { - [propName: string]: PropertyMetaData; - } -} - -// @beta (undocumented) -interface EntityMetaDataProps { - baseClasses: string[]; - customAttributes?: CustomAttribute[]; - // (undocumented) - description?: string; - // (undocumented) - displayLabel?: string; - // (undocumented) - ecclass: string; - // (undocumented) - modifier?: string; - properties: { - [propName: string]: PropertyMetaData; - } -} - -// @public -interface EntityProps { - // (undocumented) - [propName: string]: any; - classFullName: string; - id?: Id64String; -} - -// @alpha -interface EntityQueryParams { - from?: string; - limit?: number; - offset?: number; - only?: boolean; - orderBy?: string; - where?: string; -} - -// @public -interface EnvironmentProps { - // (undocumented) - ground?: GroundPlaneProps; - // (undocumented) - sky?: SkyBoxProps; -} - -// @beta -class Feature { - constructor(elementId?: Id64String, subCategoryId?: Id64String, geometryClass?: GeometryClass); - // (undocumented) - compare(rhs: Feature): number; - // (undocumented) - readonly elementId: string; - // (undocumented) - equals(other: Feature): boolean; - // (undocumented) - readonly geometryClass: GeometryClass; - // (undocumented) - readonly isDefined: boolean; - // (undocumented) - readonly isUndefined: boolean; - // (undocumented) - readonly subCategoryId: string; -} - -// @public -class FeatureGates { - addMonitor(feature: string, monitor: (val: GateValue) => void): () => void; - check(feature: string, defaultVal?: GateValue): GateValue; - readonly gates: Map; - onChanged: BeEvent<(feature: string, val: GateValue) => void>; - setGate(feature: string, val: GateValue): void; -} - -// @public (undocumented) -class FeatureIndex { - constructor(); - // (undocumented) - featureID: number; - // (undocumented) - featureIDs?: Uint32Array; - // (undocumented) - readonly isEmpty: boolean; - // (undocumented) - readonly isUniform: boolean; - // (undocumented) - reset(): void; - // (undocumented) - type: FeatureIndexType; -} - -// @public (undocumented) -enum FeatureIndexType { - // (undocumented) - Empty = 0, - // (undocumented) - NonUniform = 2, - // (undocumented) - Uniform = 1 -} - -// @beta -class FeatureTable extends IndexMap { - constructor(maxFeatures: number, modelId?: Id64String, type?: BatchType); - // (undocumented) - readonly anyDefined: boolean; - findFeature(index: number): Feature | undefined; - // (undocumented) - getArray(): Array>; - // (undocumented) - insertWithIndex(feature: Feature, index: number): void; - readonly isClassifier: boolean; - readonly isUniform: boolean; - readonly maxFeatures: number; - // (undocumented) - readonly modelId: Id64String; - // (undocumented) - readonly type: BatchType; - readonly uniform: Feature | undefined; -} - -// @public (undocumented) -interface FilePropertyProps { - // (undocumented) - id?: number | string; - // (undocumented) - name: string; - // (undocumented) - namespace: string; - // (undocumented) - subId?: number | string; -} - -// @public -enum FillDisplay { - Always = 2, - Blanking = 3, - ByView = 1, - Never = 0 -} - -// @public -enum FillFlags { - Always = 2, - Background = 8, - Behind = 4, - Blanking = 6, - ByView = 1, - // (undocumented) - None = 0 -} - -// @public -class FontMap { - constructor(props: FontMapProps); - // (undocumented) - readonly fonts: Map; - getFont(arg: string | number): FontProps | undefined; - // (undocumented) - toJSON(): FontMapProps; -} - -// @public -interface FontMapProps { - // (undocumented) - fonts: FontProps[]; -} - -// @public -interface FontProps { - // (undocumented) - id: number; - // (undocumented) - name: string; - // (undocumented) - type: FontType; -} - -// @public -enum FontType { - // (undocumented) - Rsc = 2, - // (undocumented) - Shx = 3, - // (undocumented) - TrueType = 1 -} - -// @public (undocumented) -interface FormDataCommon { - // (undocumented) - append(name: string, value: string | Blob | Buffer, fileName?: string): void; -} - -// @public -class Frustum { - constructor(); - clone(result?: Frustum): Frustum; - distance(corner1: number, corner2: number): number; - equals(rhs: Frustum): boolean; - fixPointOrder(): void; - static fromRange(range: LowAndHighXYZ | LowAndHighXY, out?: Frustum): Frustum; - getCenter(): Point3d; - getCorner(i: number): Point3d; - getFraction(): number; - getRangePlanes(clipFront: boolean, clipBack: boolean, expandPlaneDistance: number): ConvexClipPlaneSet; - readonly hasMirror: boolean; - initFromRange(range: LowAndHighXYZ | LowAndHighXY): void; - initNpc(): this; - invalidate(): void; - isSame(other: Frustum): boolean; - multiply(trans: Transform): void; - readonly points: Point3d[]; - scaleAboutCenter(scale: number): void; - setFrom(other: Frustum): void; - toMap4d(): Map4d | undefined; - toRange(range?: Range3d): Range3d; - transformBy(trans: Transform, result?: Frustum): Frustum; - translate(offset: Vector3d): void; -} - -// @public (undocumented) -class FrustumPlanes { -} - -// @public (undocumented) -interface FunctionalElementProps extends ElementProps { - // (undocumented) - typeDefinition?: RelatedElementProps; -} - -// @beta -interface GeoCoordinatesRequestProps { - // (undocumented) - iModelCoords: XYZProps[]; - // (undocumented) - targetDatum: string; -} - -// @beta -interface GeoCoordinatesResponseProps { - // (undocumented) - fromCache: number; - // (undocumented) - geoCoords: PointWithStatus[]; -} - -// @public (undocumented) -enum GeoCoordStatus { - // (undocumented) - CSMapError = 4096, - // (undocumented) - NoDatumConverter = 25, - // (undocumented) - NoGCSDefined = 100, - // (undocumented) - OutOfMathematicalDomain = 2, - // (undocumented) - OutOfUsefulRange = 1, - // (undocumented) - Pending = -41556, - // (undocumented) - Success = 0, - // (undocumented) - VerticalDatumConvertError = 26 -} - -// @public -interface GeometricElement2dProps extends GeometricElementProps { - // (undocumented) - placement?: Placement2dProps; - // (undocumented) - typeDefinition?: RelatedElementProps; -} - -// @public -interface GeometricElement3dProps extends GeometricElementProps { - // (undocumented) - placement?: Placement3dProps; - // (undocumented) - typeDefinition?: RelatedElementProps; -} - -// @public -interface GeometricElementProps extends ElementProps { - category: Id64String; - // (undocumented) - geom?: GeometryStreamProps; -} - -// @public -interface GeometricModel2dProps extends ModelProps { - // (undocumented) - globalOrigin?: XYProps; -} - -// @public -interface GeometryAppearanceProps { - color?: ColorDefProps; - displayPriority?: number; - geometryClass?: GeometryClass; - style?: Id64String; - subCategory?: Id64String; - transparency?: number; - weight?: number; -} - -// @alpha -enum GeometryClass { - Construction = 1, - Dimension = 2, - Pattern = 3, - Primary = 0 -} - -// @public -class GeometryParams { - constructor(categoryId: Id64String, subCategoryId?: string); - backgroundFill?: BackgroundFill; - // (undocumented) - categoryId: Id64String; - // (undocumented) - clone(): GeometryParams; - elmPriority?: number; - elmTransparency?: number; - fillColor?: ColorDef; - fillDisplay?: FillDisplay; - fillTransparency?: number; - geometryClass?: GeometryClass; - // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) - gradient?: Gradient.Symb; - isEquivalent(other: GeometryParams): boolean; - lineColor?: ColorDef; - materialId?: Id64String; - // WARNING: The type "AreaPattern.Params" needs to be exported by the package (e.g. added to index.ts) - pattern?: AreaPattern.Params; - resetAppearance(): void; - setCategoryId(categoryId: Id64String, clearAppearanceOverrides?: boolean): void; - setSubCategoryId(subCategoryId: Id64String, clearAppearanceOverrides?: boolean): void; - // WARNING: The type "LineStyle.Info" needs to be exported by the package (e.g. added to index.ts) - styleInfo?: LineStyle.Info; - // (undocumented) - subCategoryId: string; - weight?: number; -} - -// @public -interface GeometryPartInstanceProps { - origin?: XYZProps; - part: Id64String; - rotation?: YawPitchRollProps; - scale?: number; -} - -// @public -interface GeometryPartProps extends ElementProps { - // (undocumented) - bbox?: LowAndHighXYZ; - // (undocumented) - geom?: GeometryStreamProps; -} - -// @public -class GeometryStreamBuilder { - // WARNING: The type "BRepEntity.DataProps" needs to be exported by the package (e.g. added to index.ts) - appendBRepData(brep: BRepEntity.DataProps): boolean; - appendGeometry(geometry: GeometryQuery): boolean; - appendGeometryParamsChange(geomParams: GeometryParams): boolean; - appendGeometryPart2d(partId: Id64String, instanceOrigin?: Point2d, instanceRotation?: Angle, instanceScale?: number): boolean; - appendGeometryPart3d(partId: Id64String, instanceOrigin?: Point3d, instanceRotation?: YawPitchRollAngles, instanceScale?: number): boolean; - appendGeometryRanges(): void; - appendSubCategoryChange(subCategoryId: Id64String): boolean; - appendTextString(textString: TextString): boolean; - readonly geometryStream: GeometryStreamProps; - setLocalToWorld(localToWorld?: Transform): void; - setLocalToWorld2d(origin: Point2d, angle?: Angle): void; - setLocalToWorld3d(origin: Point3d, angles?: YawPitchRollAngles): void; -} - -// @public -interface GeometryStreamEntryProps extends GeomJson.GeometryProps { - // (undocumented) - appearance?: GeometryAppearanceProps; - // (undocumented) - brep?: BRepEntity.DataProps; - // (undocumented) - fill?: AreaFillProps; - // (undocumented) - geomPart?: GeometryPartInstanceProps; - // (undocumented) - material?: MaterialProps; - // (undocumented) - pattern?: AreaPattern.ParamsProps; - // (undocumented) - styleMod?: LineStyle.ModifierProps; - // (undocumented) - subRange?: LowAndHighXYZ; - // (undocumented) - textString?: TextStringProps; -} - -// @public -class GeometryStreamIterator implements IterableIterator { - // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores - // (undocumented) - [Symbol.iterator](): IterableIterator; - constructor(geometryStream: GeometryStreamProps, category?: Id64String); - entry: GeometryStreamIteratorEntry; - static fromGeometricElement2d(element: GeometricElement2dProps): GeometryStreamIterator; - static fromGeometricElement3d(element: GeometricElement3dProps): GeometryStreamIterator; - static fromGeometryPart(geomPart: GeometryPartProps, geomParams?: GeometryParams, partTransform?: Transform): GeometryStreamIterator; - geometryStream: GeometryStreamProps; - next(): IteratorResult; - partToWorld(): Transform | undefined; - setLocalToWorld(localToWorld?: Transform): void; - setLocalToWorld2d(origin: Point2d, angle?: Angle): void; - setLocalToWorld3d(origin: Point3d, angles?: YawPitchRollAngles): void; -} - -// @public -class GeometryStreamIteratorEntry { - constructor(category?: Id64String); - // WARNING: The type "BRepEntity.DataProps" needs to be exported by the package (e.g. added to index.ts) - brep?: BRepEntity.DataProps; - geometryQuery?: GeometryQuery; - geomParams: GeometryParams; - localRange?: Range3d; - localToWorld?: Transform; - partId?: Id64String; - partToLocal?: Transform; - textString?: TextString; -} - -// @beta (undocumented) -module Gradient { - enum Flags { - Invert = 1, - // (undocumented) - None = 0, - Outline = 2 - } - - class KeyColor implements KeyColorProps { - // WARNING: The type "KeyColorProps" needs to be exported by the package (e.g. added to index.ts) - constructor(json: KeyColorProps); - // (undocumented) - color: ColorDef; - // (undocumented) - value: number; - } - - interface KeyColorProps { - color: ColorDefProps; - value: number; - } - - enum Mode { - // (undocumented) - Curved = 2, - // (undocumented) - Cylindrical = 3, - // (undocumented) - Hemispherical = 5, - // (undocumented) - Linear = 1, - // (undocumented) - None = 0, - // (undocumented) - Spherical = 4, - // (undocumented) - Thematic = 6 - } - - class Symb implements SymbProps { - // (undocumented) - angle?: Angle; - // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - clone(): Symb; - // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) - compare(other: Symb): number; - // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) - static compareSymb(lhs: Gradient.Symb, rhs: Gradient.Symb): number; - // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static createThematic(settings: ThematicSettings): Symb; - // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) - equals(other: Symb): boolean; - // WARNING: The type "Flags" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - flags: Flags; - // WARNING: The type "SymbProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) - static fromJSON(json?: SymbProps): Symb; - getImage(width: number, height: number): ImageBuffer; - // (undocumented) - readonly hasTranslucency: boolean; - readonly isOutlined: boolean; - // WARNING: The type "KeyColor" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - keys: KeyColor[]; - // WARNING: The type "Mode" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - mode: Mode; - // (undocumented) - shift: number; - // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - thematicSettings?: ThematicSettings; - // (undocumented) - tint?: number; - } - - interface SymbProps { - angle?: AngleProps; - flags?: Flags; - keys: KeyColorProps[]; - mode: Mode; - shift?: number; - thematicSettings?: ThematicSettingsProps; - tint?: number; - } - - // (undocumented) - enum ThematicColorScheme { - // (undocumented) - BlueRed = 0, - // (undocumented) - Custom = 5, - // (undocumented) - Monochrome = 2, - // (undocumented) - RedBlue = 1, - // (undocumented) - SeaMountain = 4, - // (undocumented) - Topographic = 3 - } - - // (undocumented) - enum ThematicMode { - // (undocumented) - IsoLines = 3, - // (undocumented) - Smooth = 0, - // (undocumented) - Stepped = 1, - // (undocumented) - SteppedWithDelimiter = 2 - } - - class ThematicSettings implements ThematicSettingsProps { - // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - clone(out?: ThematicSettings): ThematicSettings; - // (undocumented) - colorScheme: number; - // (undocumented) - static readonly contentMax: number; - // (undocumented) - static readonly contentRange: number; - // WARNING: The type "ThematicSettingsProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - copyFrom(other: ThematicSettingsProps): void; - // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static defaults: ThematicSettings; - // WARNING: The type "ThematicSettingsProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static fromJSON(json: ThematicSettingsProps): ThematicSettings; - // (undocumented) - static readonly margin: number; - // (undocumented) - marginColor: ColorDef; - // WARNING: The type "ThematicMode" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - mode: ThematicMode; - // (undocumented) - range: Range1d; - // (undocumented) - rangeHigh: number; - // (undocumented) - rangeLow: number; - // (undocumented) - stepCount: number; - } - - // (undocumented) - interface ThematicSettingsProps { - // (undocumented) - colorScheme: number; - // (undocumented) - marginColor: ColorDefProps; - // (undocumented) - mode: ThematicMode; - // (undocumented) - rangeHigh: number; - // (undocumented) - rangeLow: number; - // (undocumented) - stepCount: number; - } - -} - -// @beta -class GraphicParams { - // (undocumented) - readonly fillColor: ColorDef; - // (undocumented) - fillFlags: FillFlags; - // (undocumented) - static fromBlankingFill(fillColor: ColorDef): GraphicParams; - // (undocumented) - static fromSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels?: LinePixels): GraphicParams; - // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - gradient?: Gradient.Symb; - // (undocumented) - readonly lineColor: ColorDef; - // (undocumented) - linePixels: LinePixels; - // (undocumented) - lineTexture?: RenderTexture; - // (undocumented) - material?: RenderMaterial; - // (undocumented) - rasterWidth: number; - setFillColor(fillColor: ColorDef): void; - // (undocumented) - setFillTransparency(transparency: number): void; - setLineColor(lineColor: ColorDef): void; - setLinePixels(code: LinePixels): void; - // (undocumented) - setLineTransparency(transparency: number): void; - // (undocumented) - trueWidthEnd: number; - // (undocumented) - trueWidthStart: number; -} - -// @public -class GroundPlane implements GroundPlaneProps { - constructor(ground?: GroundPlaneProps); - aboveColor: ColorDef; - belowColor: ColorDef; - display: boolean; - elevation: number; - // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) - getGroundPlaneGradient(aboveGround: boolean): Gradient.Symb; - // (undocumented) - toJSON(): GroundPlaneProps; -} - -// @public -interface GroundPlaneProps { - aboveColor?: ColorDefProps; - belowColor?: ColorDefProps; - display?: boolean; - elevation?: number; -} - -// @beta -module HiddenLine { - class Settings { - // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) - static defaults: Settings; - // WARNING: The type "SettingsProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) - static fromJSON(json?: SettingsProps): Settings; - // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) - readonly hidden: Style; - // WARNING: The type "SettingsProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - toJSON(): SettingsProps; - readonly transparencyThreshold: number; - // (undocumented) - readonly transThreshold: number; - // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) - readonly visible: Style; - } - - interface SettingsProps { - readonly hidden?: StyleProps; - readonly transThreshold?: number; - readonly visible?: StyleProps; - } - - class Style implements StyleProps { - readonly color?: ColorDef; - // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static defaults: Style; - // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) - equals(other: Style): boolean; - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static fromJSON(json?: StyleProps): Style; - // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) - overrideColor(color: ColorDef): Style; - // (undocumented) - readonly ovrColor: boolean; - readonly pattern?: LinePixels; - // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - toJSON(): StyleProps; - readonly width?: number; - } - - interface StyleProps { - readonly color?: ColorDefProps; - readonly ovrColor?: boolean; - readonly pattern?: LinePixels; - readonly width?: number; - } - -} - -// @public -module Hilite { - class Settings { - // WARNING: The type "Silhouette" needs to be exported by the package (e.g. added to index.ts) - constructor(color?: ColorDef, visibleRatio?: number, hiddenRatio?: number, silhouette?: Silhouette); - readonly color: ColorDef; - readonly hiddenRatio: number; - // WARNING: The type "Silhouette" needs to be exported by the package (e.g. added to index.ts) - silhouette: Silhouette; - readonly visibleRatio: number; - } - - enum Silhouette { - None = 0, - Thick = 2, - Thin = 1 - } - -} - -// @public -class HSLColor { - // (undocumented) - clone(): HSLColor; - // (undocumented) - static fromColorDef(val: ColorDef, out?: HSLColor): HSLColor; - // (undocumented) - h: number; - // (undocumented) - l: number; - // (undocumented) - s: number; - // (undocumented) - toColorDef(out?: ColorDef): ColorDef; -} - -// @public -class HSVColor { - // (undocumented) - adjustColor(darkenColor: boolean, delta: number): void; - // (undocumented) - clone(): HSVColor; - // (undocumented) - static fromColorDef(val: ColorDef, out?: HSVColor): HSVColor; - // (undocumented) - h: number; - // (undocumented) - s: number; - // (undocumented) - toColorDef(out?: ColorDef): ColorDef; - // (undocumented) - v: number; -} - -// @public -interface HttpServerRequest extends Readable { - // (undocumented) - body: string | Buffer; - // (undocumented) - connection: any; - // (undocumented) - destroy(error?: Error): void; - // (undocumented) - header: (field: string) => string | undefined; - // (undocumented) - headers: { - [header: string]: string | string[] | undefined; - } - // (undocumented) - httpVersion: string; - // (undocumented) - httpVersionMajor: number; - // (undocumented) - httpVersionMinor: number; - // (undocumented) - method: string; - // (undocumented) - path: string; - // (undocumented) - rawHeaders: string[]; - // (undocumented) - rawTrailers: string[]; - // (undocumented) - setTimeout(msecs: number, callback: () => void): this; - // (undocumented) - socket: any; - // (undocumented) - statusCode?: number; - // (undocumented) - statusMessage?: string; - // (undocumented) - trailers: { - [key: string]: string | undefined; - } - // (undocumented) - url?: string; -} - -// @public -interface HttpServerResponse extends Writable { - // (undocumented) - send(body?: any): HttpServerResponse; - // (undocumented) - set(field: string, value: string): void; - // (undocumented) - status(code: number): HttpServerResponse; -} - -// @public -class ImageBuffer { - protected constructor(data: Uint8Array, format: ImageBufferFormat, width: number); - // (undocumented) - protected static computeHeight(data: Uint8Array, format: ImageBufferFormat, width: number): number; - static create(data: Uint8Array, format: ImageBufferFormat, width: number): ImageBuffer | undefined; - readonly data: Uint8Array; - readonly format: ImageBufferFormat; - static getNumBytesPerPixel(format: ImageBufferFormat): number; - readonly height: number; - // (undocumented) - protected static isValidData(data: Uint8Array, format: ImageBufferFormat, width: number): boolean; - readonly numBytesPerPixel: number; - readonly width: number; -} - -// @public -enum ImageBufferFormat { - Alpha = 5, - Rgb = 2, - Rgba = 0 -} - -// @public (undocumented) -module ImageLight { - // (undocumented) - class Solar { - constructor(direction?: Vector3d, color?: ColorDef, intensity?: number); - // (undocumented) - color: ColorDef; - // (undocumented) - direction: Vector3d; - // (undocumented) - intensity: number; - } - -} - -// @public -class ImageSource { - constructor(data: Uint8Array, format: ImageSourceFormat); - readonly data: Uint8Array; - readonly format: ImageSourceFormat; -} - -// @public -enum ImageSourceFormat { - Jpeg = 0, - Png = 2 -} - -// @public -class IModel implements IModelProps { - protected constructor(iModelToken: IModelToken); - // (undocumented) - protected _token: IModelToken; - cartographicToSpatialFromEcef(cartographic: Cartographic, result?: Point3d): Point3d; - static readonly dictionaryId: Id64String; - readonly ecefLocation: EcefLocation | undefined; - ecefToSpatial(ecef: XYAndZ, result?: Point3d): Point3d; - static getDefaultSubCategoryId(categoryId: Id64String): Id64String; - getEcefTransform(): Transform; - readonly globalOrigin: Point3d; - readonly iModelToken: IModelToken; - // (undocumented) - protected initialize(name: string, props: IModelProps): void; - readonly isGeoLocated: boolean; - name: string; - projectExtents: AxisAlignedBox3d; - static readonly repositoryModelId: Id64String; - rootSubject: RootSubjectProps; - static readonly rootSubjectId: Id64String; - setEcefLocation(ecef: EcefLocationProps): void; - spatialToCartographicFromEcef(spatial: XYAndZ, result?: Cartographic): Cartographic; - spatialToEcef(spatial: XYAndZ, result?: Point3d): Point3d; - // (undocumented) - toJSON(): IModelProps; -} - -// @beta -interface IModelCoordinatesRequestProps { - // (undocumented) - geoCoords: XYZProps[]; - // (undocumented) - sourceDatum: string; -} - -// @beta (undocumented) -interface IModelCoordinatesResponseProps { - // (undocumented) - fromCache: number; - // (undocumented) - iModelCoords: PointWithStatus[]; -} - -// @public -class IModelError extends BentleyError { - constructor(errorNumber: number | IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | RepositoryStatus | ChangeSetStatus | RpcInterfaceStatus | AuthStatus, message: string, log?: LogFunction, category?: string, getMetaData?: GetMetaDataFunction); -} - -// @public -class IModelNotFoundResponse extends RpcNotFoundResponse { -} - -// @public -interface IModelProps { - ecefLocation?: EcefLocationProps; - globalOrigin?: XYZProps; - projectExtents?: Range3dProps; - rootSubject: RootSubjectProps; -} - -// @public -class IModelReadRpcInterface extends RpcInterface { - // (undocumented) - cancelSnap(_iModelToken: IModelToken, _sessionId: string): Promise; - // (undocumented) - close(_accessToken: AccessToken, _iModelToken: IModelToken): Promise; - // (undocumented) - executeQuery(_iModelToken: IModelToken, _ecsql: string, _bindings?: any[] | object): Promise; - // (undocumented) - getAllCodeSpecs(_iModelToken: IModelToken): Promise; - // (undocumented) - getClassHierarchy(_iModelToken: IModelToken, _startClassName: string): Promise; - static getClient(): IModelReadRpcInterface; - // (undocumented) - getDefaultViewId(_iModelToken: IModelToken): Promise; - // (undocumented) - getElementProps(_iModelToken: IModelToken, _elementIds: Id64Set): Promise; - // (undocumented) - getGeoCoordinatesFromIModelCoordinates(_iModelToken: IModelToken, _props: string): Promise; - // (undocumented) - getIModelCoordinatesFromGeoCoordinates(_iModelToken: IModelToken, _props: string): Promise; - // (undocumented) - getModelProps(_iModelToken: IModelToken, _modelIds: Id64Set): Promise; - // (undocumented) - getToolTipMessage(_iModelToken: IModelToken, _elementId: string): Promise; - // (undocumented) - getViewStateData(_iModelToken: IModelToken, _viewDefinitionId: string): Promise; - // (undocumented) - getViewThumbnail(_iModelToken: IModelToken, _viewId: string): Promise; - // (undocumented) - openForRead(_accessToken: AccessToken, _iModelToken: IModelToken): Promise; - // (undocumented) - queryElementProps(_iModelToken: IModelToken, _params: EntityQueryParams): Promise; - // (undocumented) - queryEntityIds(_iModelToken: IModelToken, _params: EntityQueryParams): Promise; - // (undocumented) - queryModelProps(_iModelToken: IModelToken, _params: EntityQueryParams): Promise; - // (undocumented) - readFontJson(_iModelToken: IModelToken): Promise; - // (undocumented) - requestSnap(_iModelToken: IModelToken, _sessionId: string, _props: SnapRequestProps): Promise; - static types: () => (typeof Point3d | typeof Vector3d | typeof Point2d | typeof IModelToken | typeof Code | typeof IModelNotFoundResponse | typeof AccessToken | typeof Vector2d)[]; - static version: string; -} - -// @public -enum IModelStatus { - // (undocumented) - AlreadyLoaded = 65537, - // (undocumented) - AlreadyOpen = 65538, - // (undocumented) - BadArg = 65539, - // (undocumented) - BadElement = 65540, - // (undocumented) - BadModel = 65541, - // (undocumented) - BadRequest = 65542, - // (undocumented) - BadSchema = 65543, - // (undocumented) - CannotUndo = 65544, - // (undocumented) - CodeNotReserved = 65545, - // (undocumented) - ConstraintNotUnique = 65601, - // (undocumented) - DeletionProhibited = 65546, - // (undocumented) - DuplicateCode = 65547, - // (undocumented) - DuplicateName = 65548, - // (undocumented) - ElementBlockedChange = 65549, - // (undocumented) - FileAlreadyExists = 65550, - // (undocumented) - FileNotFound = 65551, - // (undocumented) - FileNotLoaded = 65552, - // (undocumented) - ForeignKeyConstraint = 65553, - // (undocumented) - IdExists = 65554, - // (undocumented) - IMODEL_ERROR_BASE = 65536, - // (undocumented) - InDynamicTransaction = 65555, - // (undocumented) - InvalidCategory = 65556, - // (undocumented) - InvalidCode = 65557, - // (undocumented) - InvalidCodeSpec = 65558, - // (undocumented) - InvalidId = 65559, - // (undocumented) - InvalidName = 65560, - // (undocumented) - InvalidParent = 65561, - // (undocumented) - InvalidProfileVersion = 65562, - // (undocumented) - IsCreatingChangeSet = 65563, - // (undocumented) - LockNotHeld = 65564, - // (undocumented) - Mismatch2d3d = 65565, - // (undocumented) - MismatchGcs = 65566, - // (undocumented) - MissingDomain = 65567, - // (undocumented) - MissingHandler = 65568, - // (undocumented) - MissingId = 65569, - // (undocumented) - NoGeoLocation = 65602, - // (undocumented) - NoGeometry = 65570, - // (undocumented) - NoMultiTxnOperation = 65571, - // (undocumented) - NotDgnMarkupProject = 65572, - // (undocumented) - NotEnabled = 65573, - // (undocumented) - NotFound = 65574, - // (undocumented) - NothingToRedo = 65578, - // (undocumented) - NothingToUndo = 65579, - // (undocumented) - NotOpen = 65575, - // (undocumented) - NotOpenForWrite = 65576, - // (undocumented) - NotSameUnitBase = 65577, - // (undocumented) - ParentBlockedChange = 65580, - // (undocumented) - ReadError = 65581, - // (undocumented) - ReadOnly = 65582, - // (undocumented) - ReadOnlyDomain = 65583, - // (undocumented) - RepositoryManagerError = 65584, - // (undocumented) - SQLiteError = 65585, - // (undocumented) - Success = 0, - // (undocumented) - TransactionActive = 65586, - // (undocumented) - UnitsMissing = 65587, - // (undocumented) - UnknownFormat = 65588, - // (undocumented) - UpgradeFailed = 65589, - // (undocumented) - ValidationFailed = 65590, - // (undocumented) - VersionTooNew = 65591, - // (undocumented) - VersionTooOld = 65592, - // (undocumented) - ViewNotFound = 65593, - // (undocumented) - WriteError = 65594, - // (undocumented) - WrongClass = 65595, - // (undocumented) - WrongDomain = 65597, - // (undocumented) - WrongElement = 65598, - // (undocumented) - WrongHandler = 65599, - // (undocumented) - WrongIModel = 65596, - // (undocumented) - WrongModel = 65600 -} - -// @public (undocumented) -class IModelTileRpcInterface extends RpcInterface { - // (undocumented) - static getClient(): IModelTileRpcInterface; - // (undocumented) - getTileContent(_iModelToken: IModelToken, _treeId: string, _contentId: string): Promise; - // (undocumented) - getTileTreeProps(_iModelToken: IModelToken, _id: string): Promise; - // (undocumented) - static types: () => (typeof IModelToken)[]; - static version: string; -} - -// @public -class IModelToken { - constructor( - key?: string | undefined, - contextId?: string | undefined, - iModelId?: string | undefined, - changeSetId?: string | undefined, - openMode?: OpenMode | undefined); - changeSetId?: string | undefined; - readonly contextId?: string | undefined; - readonly iModelId?: string | undefined; - readonly key?: string | undefined; - openMode?: OpenMode | undefined; -} - -// @public -class IModelVersion { - static asOfChangeSet(changeSetId: string): IModelVersion; - evaluateChangeSet(alctx: ActivityLoggingContext, accessToken: AccessToken, iModelId: string, imodelClient: IModelClient): Promise; - static first(): IModelVersion; - static fromJson(jsonObj: any): IModelVersion; - getAsOfChangeSet(): string | undefined; - getName(): string | undefined; - readonly isFirst: boolean; - readonly isLatest: boolean; - static latest(): IModelVersion; - static named(versionName: string): IModelVersion; -} - -// @alpha -class IModelWriteRpcInterface extends RpcInterface { - static getClient(): IModelWriteRpcInterface; - // (undocumented) - openForWrite(_accessToken: AccessToken, _iModelToken: IModelToken): Promise; - // (undocumented) - saveChanges(_iModelToken: IModelToken, _description?: string): Promise; - // (undocumented) - saveThumbnail(_iModelToken: IModelToken, _val: Uint8Array): Promise; - static types: () => (typeof Point3d | typeof Range3d | typeof IModelToken | typeof IModelNotFoundResponse | typeof AccessToken)[]; - // (undocumented) - updateProjectExtents(_iModelToken: IModelToken, _newExtents: AxisAlignedBox3d): Promise; - static version: string; -} - -// @public -interface InformationPartitionElementProps extends DefinitionElementProps { - // (undocumented) - description?: string; -} - -// @public -export function isPowerOfTwo(num: number): boolean; - -// @public (undocumented) -export function isValidImageSourceFormat(format: ImageSourceFormat): boolean; - -// @public (undocumented) -interface LatAndLong { - // (undocumented) - latitude: number; - // (undocumented) - longitude: number; -} - -// @public (undocumented) -interface LatLongAndHeight extends LatAndLong { - // (undocumented) - height: number; -} - -// @public -class Light { - constructor(opts?: LightProps); - // (undocumented) - bulbs: number; - // (undocumented) - color: ColorDef; - // (undocumented) - color2?: ColorDef; - // (undocumented) - intensity: number; - // (undocumented) - intensity2?: number; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - readonly isVisible: boolean; - // (undocumented) - kelvin: number; - // (undocumented) - lightType: LightType; - // (undocumented) - lumens: number; - // (undocumented) - shadows: number; -} - -// @beta -interface LightLocationProps extends GeometricElement3dProps { - // (undocumented) - enabled?: boolean; -} - -// @public -interface LightProps { - // (undocumented) - bulbs?: number; - // (undocumented) - color?: ColorDefProps; - // (undocumented) - color2?: ColorDefProps; - // (undocumented) - intensity?: number; - // (undocumented) - intensity2?: number; - // (undocumented) - kelvin?: number; - // (undocumented) - lightType?: LightType; - // (undocumented) - lumens?: number; - // (undocumented) - shadows?: number; -} - -// @public -enum LightType { - // (undocumented) - Ambient = 2, - // (undocumented) - Area = 7, - // (undocumented) - Distant = 8, - // (undocumented) - Flash = 3, - // (undocumented) - Invalid = 0, - // (undocumented) - Point = 5, - // (undocumented) - Portrait = 4, - // (undocumented) - SkyOpening = 9, - // (undocumented) - Solar = 1, - // (undocumented) - Spot = 6 -} - -// @public -enum LinePixels { - // (undocumented) - Code0 = 0, - // (undocumented) - Code1 = 2155905152, - // (undocumented) - Code2 = 4177066232, - // (undocumented) - Code3 = 4292935648, - // (undocumented) - Code4 = 4262526480, - // (undocumented) - Code5 = 3772834016, - // (undocumented) - Code6 = 4169726088, - // (undocumented) - Code7 = 4279828248, - // (undocumented) - HiddenLine = 3435973836, - // (undocumented) - Invalid = -1, - // (undocumented) - Invisible = 1, - // (undocumented) - Solid = 0 -} - -// @public (undocumented) -module LineStyle { - class Info { - // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) - constructor(styleId: Id64String, styleMod?: Modifier); - // WARNING: The type "Info" needs to be exported by the package (e.g. added to index.ts) - clone(): Info; - // WARNING: The type "Info" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - equals(other: Info): boolean; - // (undocumented) - styleId: Id64String; - // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - styleMod?: Modifier; - } - - class Modifier implements ModifierProps { - // WARNING: The type "ModifierProps" needs to be exported by the package (e.g. added to index.ts) - constructor(props: ModifierProps); - // (undocumented) - applyTransform(transform: Transform): boolean; - // (undocumented) - centerPhase?: boolean; - // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) - clone(): Modifier; - // (undocumented) - dashScale?: number; - // (undocumented) - distPhase?: number; - // (undocumented) - endWidth?: number; - // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) - equals(other: Modifier): boolean; - // (undocumented) - fractPhase?: number; - // (undocumented) - gapScale?: number; - // (undocumented) - normal?: Vector3d; - // (undocumented) - physicalWidth?: boolean; - // (undocumented) - rotation?: YawPitchRollAngles; - // (undocumented) - scale?: number; - // (undocumented) - segmentMode?: boolean; - // (undocumented) - startWidth?: number; - } - - interface ModifierProps { - centerPhase?: boolean; - dashScale?: number; - distPhase?: number; - endWidth?: number; - fractPhase?: number; - gapScale?: number; - normal?: XYZProps; - physicalWidth?: boolean; - rotation?: YawPitchRollProps; - scale?: number; - segmentMode?: boolean; - startWidth?: number; - } - -} - -// @beta -interface LineStyleProps extends ElementProps { - // (undocumented) - data: string; - // (undocumented) - description?: string; -} - -// @public (undocumented) -module MarshalingBinaryMarker { - // (undocumented) - function createDefault(): MarshalingBinaryMarker; - -} - -// @public -interface MaterialProps { - materialId?: Id64String; - // (undocumented) - origin?: XYZProps; - // (undocumented) - rotation?: YawPitchRollProps; - // (undocumented) - size?: XYZProps; -} - -// @public (undocumented) -class MeshEdge { - constructor(index0?: number, index1?: number); - // (undocumented) - indices: number[]; -} - -// @public (undocumented) -class MeshEdges { - constructor(); - // (undocumented) - polylines: MeshPolylineList; - // (undocumented) - silhouette: MeshEdge[]; - // (undocumented) - silhouetteNormals: OctEncodedNormalPair[]; - // (undocumented) - visible: MeshEdge[]; -} - -// @public (undocumented) -class MeshPolyline { - constructor(indices?: number[]); - // (undocumented) - addIndex(index: number): void; - // (undocumented) - clear(): void; - // (undocumented) - readonly indices: number[]; -} - -// @public (undocumented) -class MeshPolylineList extends Array { - constructor(...args: MeshPolyline[]); -} - -// @public -class MobileRpcConfiguration extends RpcConfiguration { - static readonly isIOSFrontend: any; - static readonly isMobileBackend: boolean; - static readonly isMobileFrontend: boolean; - static readonly platform: RpcMobilePlatform; - // WARNING: The type "MobileRpcProtocol" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protocol: MobileRpcProtocol; -} - -// @public -class MobileRpcManager { - static initializeClient(interfaces: RpcInterfaceDefinition[]): MobileRpcConfiguration; - static initializeImpl(interfaces: RpcInterfaceDefinition[]): MobileRpcConfiguration; -} - -// @public -interface ModelProps extends EntityProps { - // (undocumented) - isPrivate?: boolean; - // (undocumented) - isTemplate?: boolean; - // (undocumented) - jsonProperties?: any; - // (undocumented) - modeledElement: RelatedElementProps; - // (undocumented) - name?: string; - // (undocumented) - parentModel?: Id64String; -} - -// @alpha -interface ModelQueryParams extends EntityQueryParams { - // (undocumented) - wantPrivate?: boolean; - // (undocumented) - wantTemplate?: boolean; -} - -// @public -interface ModelSelectorProps extends DefinitionElementProps { - // (undocumented) - models: Id64Array; -} - -// @public -interface NavigationBindingValue { - id: Id64String; - relClassName?: string; - relClassTableSpace?: string; -} - -// @public -interface NavigationValue { - id: Id64String; - relClassName?: string; -} - -// @public -export function nextHighestPowerOfTwo(num: number): number; - -// @public (undocumented) -class NonUniformColor { - constructor(colors: Uint32Array, indices: Uint16Array, hasAlpha: boolean); - // (undocumented) - readonly colors: Uint32Array; - // (undocumented) - readonly indices: Uint16Array; - // (undocumented) - readonly isOpaque: boolean; -} - -// @public -enum Npc { - _000 = 0, - _001 = 4, - _010 = 2, - _011 = 6, - _100 = 1, - _101 = 5, - _110 = 3, - _111 = 7, - CORNER_COUNT = 8, - // (undocumented) - LeftBottomFront = 4, - // (undocumented) - LeftBottomRear = 0, - // (undocumented) - LeftTopFront = 6, - // (undocumented) - LeftTopRear = 2, - // (undocumented) - RightBottomFront = 5, - // (undocumented) - RightBottomRear = 1, - // (undocumented) - RightTopFront = 7, - // (undocumented) - RightTopRear = 3 -} - -// @public (undocumented) -class OctEncodedNormal { - constructor(val: number); - // (undocumented) - decode(): Vector3d | undefined; - // (undocumented) - static fromVector(val: XYAndZ): OctEncodedNormal; - // (undocumented) - readonly value: number; -} - -// @public (undocumented) -class OctEncodedNormalPair { - constructor(first: OctEncodedNormal, second: OctEncodedNormal); - // (undocumented) - first: OctEncodedNormal; - // (undocumented) - second: OctEncodedNormal; -} - -// @public -class Placement2d implements Placement2dProps { - constructor(origin: Point2d, angle: Angle, bbox: ElementAlignedBox2d); - // (undocumented) - angle: Angle; - // (undocumented) - bbox: ElementAlignedBox2d; - calculateRange(): AxisAlignedBox3d; - static fromJSON(json?: Placement2dProps): Placement2d; - getWorldCorners(out?: Frustum): Frustum; - readonly isValid: boolean; - // (undocumented) - origin: Point2d; - readonly rotation: Matrix3d; - setFrom(other: Placement2d): void; - readonly transform: Transform; -} - -// @public -interface Placement2dProps { - // (undocumented) - angle: AngleProps; - // (undocumented) - bbox?: LowAndHighXY; - // (undocumented) - origin: XYProps; -} - -// @public -class Placement3d implements Placement3dProps { - constructor(origin: Point3d, angles: YawPitchRollAngles, bbox: ElementAlignedBox3d); - // (undocumented) - angles: YawPitchRollAngles; - // (undocumented) - bbox: ElementAlignedBox3d; - calculateRange(): AxisAlignedBox3d; - static fromJSON(json?: Placement3dProps): Placement3d; - getWorldCorners(out?: Frustum): Frustum; - readonly isValid: boolean; - // (undocumented) - origin: Point3d; - readonly rotation: Matrix3d; - setFrom(other: Placement3d): void; - readonly transform: Transform; -} - -// @public -interface Placement3dProps { - // (undocumented) - angles: YawPitchRollProps; - // (undocumented) - bbox?: LowAndHighXYZ; - // (undocumented) - origin: XYZProps; -} - -// @beta -interface PointWithStatus { - // (undocumented) - p: XYZProps; - // (undocumented) - s: GeoCoordStatus; -} - -// @public (undocumented) -class PolylineData { - constructor(vertIndices?: number[], numIndices?: number); - // (undocumented) - init(polyline: MeshPolyline): boolean; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - numIndices: number; - // (undocumented) - reset(): void; - // (undocumented) - vertIndices: number[]; -} - -// @public (undocumented) -class PolylineEdgeArgs { - constructor(lines?: PolylineData[]); - // (undocumented) - clear(): void; - // (undocumented) - init(lines?: PolylineData[]): boolean; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - lines?: PolylineData[]; - // (undocumented) - readonly numLines: number; -} - -// @public -class PolylineFlags { - constructor(is2d?: boolean, isPlanar?: boolean, isDisjoint?: boolean, type?: PolylineTypeFlags); - // (undocumented) - clone(): PolylineFlags; - // (undocumented) - equals(other: PolylineFlags): boolean; - // (undocumented) - initDefaults(): void; - // (undocumented) - is2d: boolean; - // (undocumented) - readonly isAnyEdge: boolean; - // (undocumented) - isDisjoint: boolean; - // (undocumented) - readonly isNormalEdge: boolean; - // (undocumented) - readonly isOutlineEdge: boolean; - // (undocumented) - isPlanar: boolean; - pack(): number; - // (undocumented) - setIsNormalEdge(): void; - // (undocumented) - setIsOutlineEdge(): void; - // (undocumented) - type: PolylineTypeFlags; - static unpack(value: number): PolylineFlags; -} - -// @public (undocumented) -enum PolylineTypeFlags { - // (undocumented) - Edge = 1, - // (undocumented) - Normal = 0, - // (undocumented) - Outline = 2 -} - -// @beta -enum PrimitiveTypeCode { - // (undocumented) - Binary = 257, - // (undocumented) - Boolean = 513, - // (undocumented) - DateTime = 769, - // (undocumented) - Double = 1025, - // (undocumented) - Integer = 1281, - // (undocumented) - Long = 1537, - // (undocumented) - Point2d = 1793, - // (undocumented) - Point3d = 2049, - // (undocumented) - String = 2305, - // (undocumented) - Uninitialized = 0 -} - -// @beta -class PropertyMetaData implements PropertyMetaDataProps { - constructor(jsonObj: PropertyMetaDataProps); - createProperty(jsonObj: any): any; - // (undocumented) - customAttributes?: CustomAttribute[]; - // (undocumented) - description?: string; - // (undocumented) - direction?: string; - // (undocumented) - displayLabel?: string; - // (undocumented) - extendedType?: string; - // (undocumented) - isCustomHandled?: boolean; - // (undocumented) - isCustomHandledOrphan?: boolean; - // (undocumented) - kindOfQuantity?: string; - // (undocumented) - maximumLength?: number; - // (undocumented) - maximumValue?: any; - // (undocumented) - maxOccurs?: number; - // (undocumented) - minimumLength?: number; - // (undocumented) - minimumValue?: any; - // (undocumented) - minOccurs?: number; - // (undocumented) - primitiveType?: PrimitiveTypeCode; - // (undocumented) - readOnly?: boolean; - // (undocumented) - relationshipClass?: string; - // (undocumented) - structName?: string; -} - -// @beta (undocumented) -interface PropertyMetaDataProps { - // (undocumented) - customAttributes?: CustomAttribute[]; - // (undocumented) - description?: string; - // (undocumented) - direction?: string; - // (undocumented) - displayLabel?: string; - // (undocumented) - extendedType?: string; - // (undocumented) - isCustomHandled?: boolean; - // (undocumented) - isCustomHandledOrphan?: boolean; - // (undocumented) - kindOfQuantity?: string; - // (undocumented) - maximumLength?: number; - // (undocumented) - maximumValue?: any; - // (undocumented) - maxOccurs?: number; - // (undocumented) - minimumLength?: number; - // (undocumented) - minimumValue?: any; - // (undocumented) - minOccurs?: number; - // (undocumented) - primitiveType?: number; - // (undocumented) - readOnly?: boolean; - // (undocumented) - relationshipClass?: string; - // (undocumented) - structName?: string; -} - -// @public -class QParams2d { - // (undocumented) - clone(out?: QParams2d): QParams2d; - // (undocumented) - copyFrom(src: QParams2d): void; - static fromNormalizedRange(): QParams2d; - static fromRange(range: Range2d, out?: QParams2d): QParams2d; - static fromZeroToOne(): QParams2d; - // (undocumented) - readonly origin: Point2d; - // (undocumented) - readonly scale: Point2d; - setFromRange(range: Range2d): void; -} - -// @public -class QParams3d { - // (undocumented) - clone(out?: QParams3d): QParams3d; - // (undocumented) - copyFrom(src: QParams3d): void; - static fromNormalizedRange(): QParams3d; - static fromOriginAndScale(origin: Point3d, scale: Point3d, out?: QParams3d): QParams3d; - static fromRange(range: Range3d, out?: QParams3d): QParams3d; - static fromZeroToOne(): QParams3d; - // (undocumented) - readonly origin: Point3d; - // (undocumented) - readonly scale: Point3d; - setFromOriginAndScale(origin: Point3d, scale: Point3d): void; - setFromRange(range: Range3d): void; -} - -// @public -class QPoint2d { - constructor(); - // (undocumented) - clone(out?: QPoint2d): QPoint2d; - // (undocumented) - copyFrom(src: QPoint2d): void; - static create(pos: Point2d, params: QParams2d): QPoint2d; - static fromScalars(x: number, y: number): QPoint2d; - init(pos: Point2d, params: QParams2d): void; - setFromScalars(x: number, y: number): void; - unquantize(params: QParams2d, out?: Point2d): Point2d; - // (undocumented) - x: number; - // (undocumented) - y: number; -} - -// @public -class QPoint2dList { - constructor(params: QParams2d); - add(pt: Point2d): void; - clear(): void; - static fromPoints(points: Point2d[], out?: QPoint2dList): QPoint2dList; - readonly length: number; - // (undocumented) - readonly params: QParams2d; - push(qpt: QPoint2d): void; - requantize(params: QParams2d): void; - reset(params: QParams2d): void; - toTypedArray(): Uint16Array; - unquantize(index: number, out?: Point2d): Point2d; -} - -// @public -class QPoint3d { - // (undocumented) - clone(out?: QPoint3d): QPoint3d; - // (undocumented) - compare(rhs: QPoint3d): number; - // (undocumented) - copyFrom(src: QPoint3d): void; - static create(pos: Point3d, params: QParams3d): QPoint3d; - // (undocumented) - equals(other: QPoint3d): boolean; - static fromScalars(x: number, y: number, z: number, out?: QPoint3d): QPoint3d; - init(pos: Point3d, params: QParams3d): void; - setFromScalars(x: number, y: number, z: number): void; - unquantize(params: QParams3d, out?: Point3d): Point3d; - // (undocumented) - x: number; - // (undocumented) - y: number; - // (undocumented) - z: number; -} - -// @public -class QPoint3dList { - // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores - // (undocumented) - __@iterator: { - next: () => IteratorResult; - } - constructor(paramsIn?: QParams3d); - add(pt: Point3d): void; - clear(): void; - // (undocumented) - static createFrom(points: Point3d[], params: QParams3d): QPoint3dList; - static fromPoints(points: Point3d[], out?: QPoint3dList): QPoint3dList; - readonly length: number; - // (undocumented) - readonly list: QPoint3d[]; - // (undocumented) - readonly params: QParams3d; - push(qpt: QPoint3d): void; - requantize(params: QParams3d): void; - reset(params: QParams3d): void; - toTypedArray(): Uint16Array; - unquantize(index: number, out?: Point3d): Point3d; -} - -// @public -module Quantization { - // (undocumented) - function computeScale(extent: number): number; - - // (undocumented) - function isInRange(qpos: number): boolean; - - // (undocumented) - function isQuantizable(pos: number, origin: number, scale: number): boolean; - - // (undocumented) - function isQuantized(qpos: number): boolean; - - // (undocumented) - function quantize(pos: number, origin: number, scale: number): number; - - // (undocumented) - function unquantize(qpos: number, origin: number, scale: number): number; - -} - -// @public -enum Rank { - Application = 2, - Domain = 1, - System = 0, - User = 3 -} - -// @public (undocumented) -interface ReadableFormData extends Readable { - // (undocumented) - getHeaders: { - [key: string]: any; - } -} - -// @public -class RelatedElement implements RelatedElementProps { - constructor(props: RelatedElementProps); - // (undocumented) - static fromJSON(json?: RelatedElementProps): RelatedElement | undefined; - readonly id: Id64String; - static idFromJson(json: any): Id64String; - readonly relClassName?: string; -} - -// @public -interface RelatedElementProps { - id: Id64String; - relClassName?: string; -} - -// @beta -class RenderMaterial { -} - -// @beta -interface RenderMaterialProps extends DefinitionElementProps { - description?: string; - // (undocumented) - jsonProperties?: { - materialAssets?: { - renderMaterial?: { - color?: RgbFactorProps; - diffuse?: number; - finish?: number; - HasBaseColor?: boolean; - HasDiffuse?: boolean; - HasFinish?: boolean; - HasReflect?: boolean; - HasReflectColor?: boolean; - HasSpecular?: boolean; - HasSpecularColor?: boolean; - HasTransmit?: boolean; - Map?: { - Pattern?: TextureMapProps; - } - reflect?: number; - reflect_color?: RgbFactorProps; - specular?: number; - specular_color?: RgbFactorProps; - transmit?: number; - } - } - } - paletteName: string; -} - -// @public -enum RenderMode { - HiddenLine = 3, - SmoothShade = 6, - SolidFill = 4, - Wireframe = 0 -} - -// @beta -module RenderSchedule { - // (undocumented) - interface ColorEntryProps extends TimelineEntryProps { - // (undocumented) - value: { - blue: number; - green: number; - red: number; - } - } - - // (undocumented) - interface CuttingPlaneEntryProps extends TimelineEntryProps { - // (undocumented) - value: CuttingPlaneProps; - } - - // (undocumented) - interface CuttingPlaneProps { - // (undocumented) - direction: number[]; - // (undocumented) - hidden?: boolean; - // (undocumented) - position: number[]; - // (undocumented) - visible?: boolean; - } - - // (undocumented) - interface ElementTimelineProps { - // (undocumented) - batchId: number; - // (undocumented) - colorTimeline?: ColorEntryProps[]; - // (undocumented) - cuttingPlaneTimeline?: CuttingPlaneEntryProps[]; - // (undocumented) - elementIds: Id64String[]; - // (undocumented) - transformTimeline?: TransformEntryProps[]; - // (undocumented) - visibilityTimeline?: VisibilityEntryProps[]; - } - - // (undocumented) - interface ModelTimelineProps { - // (undocumented) - elementTimelines: ElementTimelineProps[]; - // (undocumented) - modelId: Id64String; - } - - // (undocumented) - interface TimelineEntryProps { - // (undocumented) - interpolation: number; - // (undocumented) - time: number; - } - - // (undocumented) - interface TransformEntryProps extends TimelineEntryProps { - // (undocumented) - value: TransformProps; - } - - // (undocumented) - interface TransformProps { - // (undocumented) - orientation: number[]; - // (undocumented) - pivot: number[]; - // (undocumented) - position: number[]; - // (undocumented) - transform: number[][]; - } - - // (undocumented) - interface VisibilityEntryProps extends TimelineEntryProps { - // (undocumented) - value: number; - } - -} - -// @beta -class RenderTexture { -} - -// @beta -enum RepositoryStatus { - CannotCreateChangeSet = 86023, - ChangeSetRequired = 86025, - CodeNotReserved = 86027, - CodeUnavailable = 86026, - CodeUsed = 86028, - InvalidRequest = 86024, - InvalidResponse = 86020, - LockAlreadyHeld = 86018, - LockNotHeld = 86029, - LockUsed = 86022, - PendingTransactions = 86021, - RepositoryIsLocked = 86030, - ServerUnavailable = 86017, - // (undocumented) - Success = 0, - SyncError = 86019 -} - -// @public -class RgbColor { - constructor(r: number, g: number, b: number); - // (undocumented) - readonly b: number; - // (undocumented) - equals(other: RgbColor): boolean; - static fromColorDef(colorDef: ColorDef): RgbColor; - // (undocumented) - readonly g: number; - // (undocumented) - readonly r: number; -} - -// @alpha -interface RootSubjectProps { - description?: string; - name: string; -} - -// @public -class RpcConfiguration { - applicationAuthorizationKey: string; - applicationAuthorizationValue: string; - applicationVersionKey: string; - static applicationVersionValue: string; - static assign(definition: RpcInterfaceDefinition, supplier: RpcConfigurationSupplier): void; - readonly controlChannel: RpcControlChannel; - static developmentMode: boolean; - static initializeInterfaces(configuration: RpcConfiguration): void; - readonly interfaces: () => RpcInterfaceDefinition[]; - static obtain(configurationConstructor: { - new (): T; - }): T; - // (undocumented) - onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void; - // (undocumented) - onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void; - // (undocumented) - onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void; - // (undocumented) - onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void; - pendingOperationRetryInterval: number; - readonly protocol: RpcProtocol; - static strictMode: boolean; - // (undocumented) - static supply(definition: RpcInterface): RpcConfiguration; -} - -// @public -enum RpcContentType { - // (undocumented) - Binary = 2, - // (undocumented) - Multipart = 3, - // (undocumented) - Text = 1, - // (undocumented) - Unknown = 0 -} - -// @public -class RpcControlChannel { - // (undocumented) - static channels: RpcControlChannel[]; - // (undocumented) - describeEndpoints(): Promise; - // (undocumented) - handleUnknownOperation(invocation: RpcInvocation, _error: any): boolean; - // (undocumented) - initialize(): void; - // (undocumented) - static obtain(configuration: RpcConfiguration): RpcControlChannel; -} - -// @public -class RpcControlResponse { -} - -// @public (undocumented) -class RpcDefaultConfiguration extends RpcConfiguration { - // (undocumented) - applicationAuthorizationKey: string; - // (undocumented) - applicationAuthorizationValue: string; - // (undocumented) - interfaces: () => never[]; - // (undocumented) - protocol: RpcProtocol; -} - -// @public (undocumented) -class RpcDirectProtocol extends RpcProtocol { - // (undocumented) - readonly requestType: typeof RpcDirectRequest; -} - -// @public (undocumented) -class RpcDirectRequest extends RpcRequest { - // (undocumented) - fulfillment: RpcRequestFulfillment | undefined; - // (undocumented) - headers: Map; - // (undocumented) - protected load(): Promise; - // (undocumented) - protected send(): Promise; - // (undocumented) - protected setHeader(name: string, value: string): void; -} - -// @public -enum RpcEndpoint { - // (undocumented) - Backend = 1, - // (undocumented) - Frontend = 0 -} - -// @public -class RpcInterface { - readonly configuration: RpcConfiguration; - // (undocumented) - configurationSupplier: RpcConfigurationSupplier | undefined; - forward(parameters: IArguments): Promise; - static isVersionCompatible(backend: string, frontend: string): boolean; -} - -// @public (undocumented) -interface RpcInterfaceDefinition { - // (undocumented) - name: string; - // (undocumented) - prototype: T; - // (undocumented) - types: () => Function[]; - // (undocumented) - version: string; -} - -// @public -interface RpcInterfaceEndpoints { - // (undocumented) - compatible: boolean; - // (undocumented) - interfaceName: string; - // (undocumented) - interfaceVersion: string; - // (undocumented) - operationNames: string[]; -} - -// @beta -enum RpcInterfaceStatus { - IncompatibleVersion = 135168, - // (undocumented) - RPC_INTERFACE_ERROR_BASE = 135168, - // (undocumented) - Success = 0 -} - -// @public -class RpcInvocation { - constructor(protocol: RpcProtocol, request: SerializedRpcRequest); - static current(rpcImpl: RpcInterface): RpcInvocation; - readonly elapsed: number; - readonly fulfillment: Promise; - readonly operation: RpcOperation; - readonly protocol: RpcProtocol; - readonly request: SerializedRpcRequest; - readonly result: Promise; - readonly status: RpcRequestStatus; -} - -// @public -class RpcManager { - static describeAvailableEndpoints(): Promise; - static getClientForInterface(definition: RpcInterfaceDefinition): T; - static initializeInterface(definition: RpcInterfaceDefinition): void; - static registerImpl(definition: RpcInterfaceDefinition, implementation: RpcInterfaceImplementation): void; - static supplyImplInstance(definition: RpcInterfaceDefinition, instance: TImplementation): void; - static terminateInterface(definition: RpcInterfaceDefinition): void; - static unregisterImpl(definition: RpcInterfaceDefinition): void; -} - -// @public (undocumented) -class RpcMarshaling { - static deserialize(_operation: RpcOperation, _protocol: RpcProtocol | undefined, value: RpcSerializedValue): any; - static serialize(operation: RpcOperation | string, _protocol: RpcProtocol | undefined, value: any): RpcSerializedValue; -} - -// @public -enum RpcMarshalingDirective { - // (undocumented) - Binary = "__binary__", - // (undocumented) - Error = "__error__", - // (undocumented) - ErrorMessage = "__error_message__", - // (undocumented) - ErrorName = "__error_name__", - // (undocumented) - ErrorStack = "__error_stack__", - // (undocumented) - JSON = "__JSON__", - // (undocumented) - Map = "__map__", - // (undocumented) - Name = "__name__", - // (undocumented) - Set = "__set__", - // (undocumented) - Undefined = "__undefined__", - // (undocumented) - Unregistered = "__unregistered__" -} - -// @public -enum RpcMobilePlatform { - // (undocumented) - Android = 2, - // (undocumented) - iOS = 3, - // (undocumented) - Unknown = 0, - // (undocumented) - Window = 1 -} - -// @public -class RpcMultipart { - static createForm(value: RpcSerializedValue): FormData; - static createStream(_value: RpcSerializedValue): ReadableFormData; - static parseRequest(_req: HttpServerRequest): Promise; - // (undocumented) - static writeValueToForm(form: FormDataCommon, value: RpcSerializedValue): void; -} - -// @public -class RpcNotFoundResponse extends RpcControlResponse { -} - -// @public (undocumented) -class RpcOperation { -} - -// @public -class RpcOperationPolicy { - allowResponseCaching: RpcResponseCachingCallback_T; - invocationCallback: RpcInvocationCallback_T; - requestCallback: RpcRequestCallback_T; - requestId: RpcRequestIdSupplier_T; - retryInterval: RpcRequestInitialRetryIntervalSupplier_T; - sentCallback: RpcRequestCallback_T; - token: RpcRequestTokenSupplier_T; -} - -// @public -interface RpcOperationsProfile { - // (undocumented) - readonly lastRequest: number; - // (undocumented) - readonly lastResponse: number; -} - -// @public -class RpcPendingQueue { - // (undocumented) - static initialize(): void; - // (undocumented) - static instance: RpcPendingQueue; -} - -// @public -class RpcPendingResponse extends RpcControlResponse { - constructor(message?: string); - message: string; -} - -// @public -class RpcProtocol { - constructor(configuration: RpcConfiguration); - readonly authorizationHeaderName: string; - readonly configuration: RpcConfiguration; - static readonly events: BeEvent; - fulfill(request: SerializedRpcRequest): Promise; - getCode(status: RpcRequestStatus): number; - getOperationFromPath(path: string): SerializedRpcOperation; - getStatus(code: number): RpcRequestStatus; - readonly invocationType: typeof RpcInvocation; - // (undocumented) - onRpcClientInitialized(_definition: RpcInterfaceDefinition, _client: RpcInterface): void; - // (undocumented) - onRpcClientTerminated(_definition: RpcInterfaceDefinition, _client: RpcInterface): void; - // (undocumented) - onRpcImplInitialized(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void; - // (undocumented) - onRpcImplTerminated(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void; - requestIdHeaderName: string; - readonly requestType: typeof RpcRequest; - serialize(request: RpcRequest): SerializedRpcRequest; - supplyPathForOperation(operation: RpcOperation, _request: RpcRequest | undefined): string; - readonly versionHeaderName: string; -} - -// @public -enum RpcProtocolEvent { - // (undocumented) - BackendErrorOccurred = 11, - // (undocumented) - BackendErrorReceived = 5, - // (undocumented) - BackendReportedNotFound = 10, - // (undocumented) - BackendReportedPending = 9, - // (undocumented) - BackendResponseCreated = 8, - // (undocumented) - ConnectionAborted = 6, - // (undocumented) - ConnectionErrorReceived = 3, - // (undocumented) - RequestCreated = 0, - // (undocumented) - RequestReceived = 7, - // (undocumented) - ResponseLoaded = 1, - // (undocumented) - ResponseLoading = 2, - // (undocumented) - UnknownErrorReceived = 4 -} - -// @public (undocumented) -class RpcRegistry { - // (undocumented) - definitionClasses: Map; - // (undocumented) - describeAvailableEndpoints(): Promise; - // (undocumented) - getClientForInterface(definition: RpcInterfaceDefinition): T; - // (undocumented) - getImplForInterface(definition: RpcInterfaceDefinition): T; - // (undocumented) - id: () => number; - // (undocumented) - implementationClasses: Map; - // (undocumented) - implementations: Map; - // (undocumented) - initializeRpcInterface(definition: RpcInterfaceDefinition): void; - // (undocumented) - static readonly instance: RpcRegistry; - // (undocumented) - isRpcInterfaceInitialized(definition: RpcInterfaceDefinition): boolean; - // (undocumented) - lookupImpl(interfaceName: string): T; - // (undocumented) - lookupInterfaceDefinition(name: string): RpcInterfaceDefinition; - // (undocumented) - proxies: Map; - // (undocumented) - registerImpl(definition: RpcInterfaceDefinition, implementation: RpcInterfaceImplementation): void; - // (undocumented) - suppliedImplementations: Map; - // (undocumented) - supplyImplInstance(definition: RpcInterfaceDefinition, instance: TImplementation): void; - // (undocumented) - terminateRpcInterface(definition: RpcInterfaceDefinition): void; - // (undocumented) - types: Map; - // (undocumented) - unregisterImpl(definition: RpcInterfaceDefinition): void; -} - -// @public -class RpcRequest { - constructor(client: RpcInterface, operation: string, parameters: any[]); - static readonly aggregateLoad: RpcOperationsProfile; - readonly client: RpcInterface; - readonly connecting: boolean; - static current(context: RpcInterface): RpcRequest; - // (undocumented) - dispose(): void; - readonly elapsed: number; - static readonly events: BeEvent; - readonly extendedStatus: string; - findParameterOfType(requestConstructor: { - new (...args: any[]): T; - }): T | undefined; - readonly id: string; - readonly lastSubmitted: number; - readonly lastUpdated: number; - protected abstract load(): Promise; - method: string; - static readonly notFoundHandlers: BeEvent; - readonly operation: RpcOperation; - parameters: any[]; - path: string; - readonly pending: boolean; - readonly protocol: RpcProtocol; - readonly response: Promise; - retryInterval: number; - protected abstract send(): Promise; - protected abstract setHeader(name: string, value: string): void; - protected setLastUpdatedTime(): void; - readonly status: RpcRequestStatus; - // (undocumented) - submit(): Promise; -} - -// @public -enum RpcRequestEvent { - // (undocumented) - PendingUpdateReceived = 1, - // (undocumented) - StatusChanged = 0 -} - -// @public (undocumented) -interface RpcRequestFulfillment { -} - -// @public -enum RpcRequestStatus { - // (undocumented) - Created = 1, - // (undocumented) - Disposed = 6, - // (undocumented) - NotFound = 7, - // (undocumented) - Pending = 3, - // (undocumented) - Rejected = 5, - // (undocumented) - Resolved = 4, - // (undocumented) - Submitted = 2, - // (undocumented) - Unknown = 0 -} - -// @public -enum RpcResponseCacheControl { - // (undocumented) - Immutable = 1, - // (undocumented) - None = 0 -} - -// @public (undocumented) -interface RpcSerializedValue { -} - -// @public (undocumented) -class SceneLights { - // WARNING: The type "ImageLight.Solar" needs to be exported by the package (e.g. added to index.ts) - constructor(imageBased: { - environmentalMap: RenderTexture; - diffuseImage: RenderTexture; - solar: ImageLight.Solar; - }, fstop?: number); - // (undocumented) - addLight(light: Light): void; - // (undocumented) - fstop: number; - // WARNING: The type "ImageLight.Solar" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - imageBased: { - diffuseImage: RenderTexture; - environmentalMap: RenderTexture; - solar: ImageLight.Solar; - } - // (undocumented) - readonly isEmpty: boolean; -} - -// @public -interface SerializedRpcOperation { - // (undocumented) - encodedRequest?: string; - // (undocumented) - interfaceDefinition: string; - // (undocumented) - interfaceVersion: string; - // (undocumented) - operationName: string; -} - -// @public -interface SerializedRpcRequest { - // (undocumented) - authorization: string; - // (undocumented) - caching: RpcResponseCacheControl; - // (undocumented) - id: string; - // (undocumented) - method: string; - // (undocumented) - operation: SerializedRpcOperation; - // (undocumented) - parameters: RpcSerializedValue; - // (undocumented) - path: string; - // (undocumented) - version: string; -} - -// @public (undocumented) -class ServerError extends IModelError { - constructor(errorNumber: number, message: string, log?: LogFunction); -} - -// @beta -interface SheetBorderTemplateProps extends ElementProps { - // (undocumented) - height?: number; - // (undocumented) - width?: number; -} - -// @beta -interface SheetProps extends ElementProps { - // (undocumented) - attachments?: Id64String[]; - // (undocumented) - height?: number; - // (undocumented) - scale?: number; - // (undocumented) - sheetTemplate?: Id64String; - // (undocumented) - width?: number; -} - -// @beta -interface SheetTemplateProps extends ElementProps { - // (undocumented) - border?: Id64String; - // (undocumented) - height?: number; - // (undocumented) - width?: number; -} - -// @public (undocumented) -class SilhouetteEdgeArgs extends EdgeArgs { - // (undocumented) - clear(): void; - // (undocumented) - init(meshEdges?: MeshEdges): boolean; - // (undocumented) - normals?: OctEncodedNormalPair[]; -} - -// @public -interface SkyBoxImageProps { - texture?: Id64String; - textures?: SkyCubeProps; - type?: SkyBoxImageType; -} - -// @public -enum SkyBoxImageType { - Cube = 2, - Cylindrical = 3, - // (undocumented) - None = 0, - Spherical = 1 -} - -// @public -interface SkyBoxProps { - display?: boolean; - groundColor?: ColorDefProps; - groundExponent?: number; - image?: SkyBoxImageProps; - nadirColor?: ColorDefProps; - skyColor?: ColorDefProps; - skyExponent?: number; - twoColor?: boolean; - zenithColor?: ColorDefProps; -} - -// @public -interface SkyCubeProps { - // (undocumented) - back?: Id64String; - // (undocumented) - bottom?: Id64String; - // (undocumented) - front?: Id64String; - // (undocumented) - left?: Id64String; - // (undocumented) - right?: Id64String; - // (undocumented) - top?: Id64String; -} - -// @beta -interface SnapRequestProps { - // (undocumented) - closePoint: XYZProps; - // (undocumented) - decorationGeometry?: DecorationGeometryProps[]; - // (undocumented) - geometryClass?: GeometryClass; - // (undocumented) - id: Id64String; - // (undocumented) - intersectCandidates?: Id64Array; - // (undocumented) - snapAperture?: number; - // (undocumented) - snapDivisor?: number; - // (undocumented) - snapModes?: number[]; - // (undocumented) - subCategoryId?: Id64String; - // (undocumented) - testPoint: XYZProps; - // (undocumented) - viewFlags?: any; - // (undocumented) - worldToView: Matrix4dProps; -} - -// @beta -interface SnapResponseProps { - // (undocumented) - curve?: any; - // (undocumented) - geomType?: number; - // (undocumented) - heat?: number; - // (undocumented) - hitPoint?: XYZProps; - // (undocumented) - intersectCurve?: any; - // (undocumented) - intersectId?: string; - // (undocumented) - normal?: XYZProps; - // (undocumented) - parentGeomType?: number; - // (undocumented) - snapMode?: number; - // (undocumented) - snapPoint?: XYZProps; - // (undocumented) - status: number; -} - -// @public -interface SpatialViewDefinitionProps extends ViewDefinition3dProps { - // (undocumented) - modelSelectorId: Id64String; -} - -// @public -class Spot extends Light { - constructor(opts?: SpotProps); - // (undocumented) - inner: Angle; - // (undocumented) - outer: Angle; -} - -// @public -interface SpotProps extends LightProps { - // (undocumented) - inner?: AngleProps; - // (undocumented) - outer?: AngleProps; -} - -// @alpha -class StandaloneIModelRpcInterface extends RpcInterface { - // (undocumented) - closeStandalone(_iModelToken: IModelToken): Promise; - static getClient(): StandaloneIModelRpcInterface; - // (undocumented) - openStandalone(_fileName: string, _openMode: OpenMode): Promise; - static types: () => (typeof IModelToken)[]; - static version: string; -} - -// @public (undocumented) -class SubCategoryAppearance { -} - -// @public -class SubCategoryOverride { - readonly anyOverridden: boolean; - readonly color?: ColorDef; - static defaults: SubCategoryOverride; - // WARNING: The type "SubCategoryAppearance.Props" needs to be exported by the package (e.g. added to index.ts) - static fromJSON(json?: SubCategoryAppearance.Props): SubCategoryOverride; - readonly invisible?: boolean; - readonly material?: Id64String; - override(appearance: SubCategoryAppearance): SubCategoryAppearance; - readonly priority?: number; - readonly style?: Id64String; - // WARNING: The type "SubCategoryAppearance.Props" needs to be exported by the package (e.g. added to index.ts) - toJSON(): SubCategoryAppearance.Props; - readonly transparency?: number; - readonly weight?: number; -} - -// @public -interface SubCategoryProps extends ElementProps { - // (undocumented) - appearance?: SubCategoryAppearance.Props; - // (undocumented) - description?: string; -} - -// @public -interface SubjectProps extends ElementProps { - // (undocumented) - description?: string; -} - -// @public -class TestRpcManager { - // (undocumented) - static initialize(interfaces: RpcInterfaceDefinition[]): void; -} - -// @public -class TextString { - constructor(props: TextStringProps); - bold?: boolean; - font: number; - // (undocumented) - height: number; - italic?: boolean; - readonly origin: Point3d; - readonly rotation: YawPitchRollAngles; - text: string; - // (undocumented) - toJSON(): TextStringProps; - // (undocumented) - transformInPlace(transform: Transform): boolean; - underline?: boolean; - // (undocumented) - readonly width: number; - // (undocumented) - widthFactor?: number; -} - -// @public -interface TextStringProps { - bold?: boolean; - font: number; - // (undocumented) - height: number; - italic?: boolean; - origin?: XYZProps; - rotation?: YawPitchRollProps; - text: string; - underline?: boolean; - // (undocumented) - widthFactor?: number; -} - -// @beta (undocumented) -enum TextureFlags { - // (undocumented) - None = 0 -} - -// @beta (undocumented) -class TextureMapping { -} - -// @beta -interface TextureMapProps { - pattern_angle?: number; - pattern_flip?: boolean; - pattern_mapping?: TextureMapping.Mode; - pattern_offset?: DPoint2dProps; - pattern_scale?: DPoint2dProps; - pattern_scalemode?: TextureMapUnits; - pattern_u_flip?: boolean; - pattern_weight?: number; - TextureId: Id64String; -} - -// @beta (undocumented) -enum TextureMapUnits { - // (undocumented) - Feet = 5, - // (undocumented) - Inches = 6, - // (undocumented) - Meters = 3, - // (undocumented) - Millimeters = 4, - // (undocumented) - Relative = 0 -} - -// @beta -interface TextureProps extends DefinitionElementProps { - data: string; - description?: string; - flags: TextureFlags; - format: ImageSourceFormat; - height: number; - width: number; -} - -// @alpha -interface ThumbnailFormatProps { - format: "jpeg" | "png"; - height: number; - width: number; -} - -// @alpha -interface ThumbnailProps extends ThumbnailFormatProps { - // (undocumented) - image: Uint8Array; -} - -// @public (undocumented) -interface TileProps { - contentId: string; - contentRange?: Range3dProps; - isLeaf?: boolean; - maximumSize: number; - range: Range3dProps; - sizeMultiplier?: number; - transformToRoot?: TransformProps; -} - -// @public (undocumented) -interface TileTreeProps { - id: string; - isTerrain?: boolean; - location: TransformProps; - maxTilesToSkip?: number; - rootTile: TileProps; - yAxisUp?: boolean; -} - -// @public -class TypeDefinition extends RelatedElement { -} - -// @public -interface TypeDefinitionElementProps extends DefinitionElementProps { - // (undocumented) - recipe?: RelatedElementProps; -} - -// @public (undocumented) -interface ViewAttachmentLabelProps extends GeometricElement2dProps { - // (undocumented) - viewAttachment?: RelatedElementProps; -} - -// @public -interface ViewAttachmentProps extends GeometricElement2dProps { - // (undocumented) - view: RelatedElementProps; -} - -// @public -interface ViewDefinition2dProps extends ViewDefinitionProps { - // (undocumented) - angle: AngleProps; - // (undocumented) - baseModelId: Id64String; - // (undocumented) - delta: XYProps; - // (undocumented) - origin: XYProps; -} - -// @public -interface ViewDefinition3dProps extends ViewDefinitionProps { - angles?: YawPitchRollProps; - camera: CameraProps; - cameraOn: boolean; - extents: XYZProps; - origin: XYZProps; -} - -// @public -interface ViewDefinitionProps extends DefinitionElementProps { - // (undocumented) - categorySelectorId: Id64String; - // (undocumented) - description?: string; - // (undocumented) - displayStyleId: Id64String; -} - -// @public (undocumented) -module ViewFlag { - class Overrides { - constructor(flags?: ViewFlags); - // (undocumented) - anyOverridden(): boolean; - apply(base: ViewFlags): ViewFlags; - // (undocumented) - clear(): void; - // WARNING: The type "Overrides" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - clone(out?: Overrides): Overrides; - // WARNING: The type "Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - copyFrom(other: Overrides): void; - // WARNING: The type "PresenceFlag" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - isPresent(flag: PresenceFlag): boolean; - // (undocumented) - overrideAll(flags?: ViewFlags): void; - // (undocumented) - setEdgeMask(val: number): void; - // (undocumented) - setIgnoreGeometryMap(val: boolean): void; - // (undocumented) - setMonochrome(val: boolean): void; - // WARNING: The type "PresenceFlag" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setPresent(flag: PresenceFlag): void; - // (undocumented) - setRenderMode(val: RenderMode): void; - // (undocumented) - setShowBackgroundMap(val: boolean): void; - // (undocumented) - setShowCameraLights(val: boolean): void; - // (undocumented) - setShowClipVolume(val: boolean): void; - // (undocumented) - setShowConstructions(val: boolean): void; - // (undocumented) - setShowDimensions(val: boolean): void; - // (undocumented) - setShowFill(val: boolean): void; - // (undocumented) - setShowHiddenEdges(val: boolean): void; - // (undocumented) - setShowMaterials(val: boolean): void; - // (undocumented) - setShowPatterns(val: boolean): void; - // (undocumented) - setShowShadows(val: boolean): void; - // (undocumented) - setShowSolarLight(val: boolean): void; - // (undocumented) - setShowSourceLights(val: boolean): void; - // (undocumented) - setShowStyles(val: boolean): void; - // (undocumented) - setShowTextures(val: boolean): void; - // (undocumented) - setShowTransparency(val: boolean): void; - // (undocumented) - setShowVisibleEdges(val: boolean): void; - // (undocumented) - setShowWeights(val: boolean): void; - // (undocumented) - setUseHlineMaterialColors(val: boolean): void; - } - - // (undocumented) - enum PresenceFlag { - // (undocumented) - kBackgroundMap = 23, - // (undocumented) - kCameraLights = 14, - // (undocumented) - kClipVolume = 17, - // (undocumented) - kConstructions = 18, - // (undocumented) - kContinuousRendering = 7, - // (undocumented) - kDimensions = 2, - // (undocumented) - kEdgeMask = 22, - // (undocumented) - kFill = 8, - // (undocumented) - kGeometryMap = 20, - // (undocumented) - kHiddenEdges = 12, - // (undocumented) - kHlineMaterialColors = 21, - // (undocumented) - kMaterials = 10, - // (undocumented) - kMonochrome = 19, - // (undocumented) - kPatterns = 3, - // (undocumented) - kRenderMode = 0, - // (undocumented) - kShadows = 16, - // (undocumented) - kSolarLight = 15, - // (undocumented) - kSourceLights = 13, - // (undocumented) - kStyles = 5, - // (undocumented) - kText = 1, - // (undocumented) - kTextures = 9, - // (undocumented) - kTransparency = 6, - // (undocumented) - kVisibleEdges = 11, - // (undocumented) - kWeights = 4 - } - -} - -// @public -interface ViewFlagProps { - acs?: boolean; - ambientOcclusion?: boolean; - backgroundMap?: boolean; - clipVol?: boolean; - contRend?: boolean; - // (undocumented) - edgeMask?: number; - grid?: boolean; - hidEdges?: boolean; - hlMatColors?: boolean; - monochrome?: boolean; - noCameraLights?: boolean; - noConstruct?: boolean; - noDim?: boolean; - noFill?: boolean; - noMaterial?: boolean; - noPattern?: boolean; - noSolarLight?: boolean; - noSourceLights?: boolean; - noStyle?: boolean; - noTexture?: boolean; - noTransp?: boolean; - noWeight?: boolean; - renderMode?: number; - shadows?: boolean; - visEdges?: boolean; -} - -// @public -class ViewFlags { - acsTriad: boolean; - ambientOcclusion: boolean; - backgroundMap: boolean; - cameraLights: boolean; - clipVolume: boolean; - // (undocumented) - clone(out?: ViewFlags): ViewFlags; - constructions: boolean; - continuousRendering: boolean; - // (undocumented) - static createFrom(other?: ViewFlags, out?: ViewFlags): ViewFlags; - dimensions: boolean; - edgeMask: number; - // (undocumented) - edgesRequired(): boolean; - // (undocumented) - equals(other: ViewFlags): boolean; - fill: boolean; - // (undocumented) - static fromJSON(json?: ViewFlagProps): ViewFlags; - grid: boolean; - hiddenEdges: boolean; - // (undocumented) - hiddenEdgesVisible(): boolean; - hLineMaterialColors: boolean; - materials: boolean; - monochrome: boolean; - noGeometryMap: boolean; - patterns: boolean; - renderMode: RenderMode; - shadows: boolean; - solarLight: boolean; - sourceLights: boolean; - styles: boolean; - textures: boolean; - // (undocumented) - toJSON(): ViewFlagProps; - transparency: boolean; - visibleEdges: boolean; - weights: boolean; -} - -// @alpha -interface ViewQueryParams extends EntityQueryParams { - // (undocumented) - wantPrivate?: boolean; -} - -// @public -interface ViewStateProps { - // (undocumented) - categorySelectorProps: CategorySelectorProps; - // (undocumented) - displayStyleProps: DisplayStyleProps; - // (undocumented) - modelSelectorProps?: ModelSelectorProps; - // (undocumented) - sheetAttachments?: Id64Array; - // (undocumented) - sheetProps?: SheetProps; - // (undocumented) - viewDefinitionProps: ViewDefinitionProps; -} - -// @public -class WebAppRpcProtocol extends RpcProtocol { - constructor(configuration: RpcConfiguration); - static computeContentType(httpType: string | null | undefined): RpcContentType; - getCode(status: RpcRequestStatus): number; - getStatus(code: number): RpcRequestStatus; - handleOpenApiDescriptionRequest(_req: HttpServerRequest, res: HttpServerResponse): void; - handleOperationGetRequest(req: HttpServerRequest, res: HttpServerResponse): Promise; - handleOperationPostRequest(req: HttpServerRequest, res: HttpServerResponse): Promise; - // WARNING: The type "OpenAPIInfo" needs to be exported by the package (e.g. added to index.ts) - info: OpenAPIInfo; - // WARNING: The type "RpcOpenAPIDescription" needs to be exported by the package (e.g. added to index.ts) - readonly openAPIDescription: RpcOpenAPIDescription; - pathPrefix: string; - readonly requestType: typeof WebAppRpcRequest; - // WARNING: The type "OpenAPIParameter" needs to be exported by the package (e.g. added to index.ts) - abstract supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[]; -} - -// @public -class WebAppRpcRequest extends RpcRequest { - constructor(client: RpcInterface, operation: string, parameters: any[]); - protected static computeTransportType(value: RpcSerializedValue, source: any): RpcContentType; - // (undocumented) - protected load(): Promise; - static maxUrlComponentSize: number; - metadata: { - message: string; - status: number; - } - method: HttpMethod_T; - static parseRequest(protocol: WebAppRpcProtocol, req: HttpServerRequest): Promise; - readonly protocol: WebAppRpcProtocol; - protected send(): Promise; - static sendResponse(_protocol: WebAppRpcProtocol, request: SerializedRpcRequest, fulfillment: RpcRequestFulfillment, res: HttpServerResponse): void; - protected setHeader(name: string, value: string): void; -} - -// @public -class WipRpcInterface extends RpcInterface { - // (undocumented) - attachChangeCache(_iModelToken: IModelToken): Promise; - // (undocumented) - detachChangeCache(_iModelToken: IModelToken): Promise; - // (undocumented) - getChangedElements(_iModelToken: IModelToken, _startChangesetId: string, _endChangesetId: string): Promise; - static getClient(): WipRpcInterface; - // (undocumented) - isChangeCacheAttached(_iModelToken: IModelToken): Promise; - // (undocumented) - isChangesetProcessed(_iModelToken: IModelToken, _changesetId: string): Promise; - // (undocumented) - placeholder(_iModelToken: IModelToken): Promise; - static types: () => (typeof IModelToken)[]; - static version: string; -} - -// WARNING: Unsupported export: CodeScopeProps -// WARNING: Unsupported export: ColorDefProps -// WARNING: Unsupported export: PlacementProps -// WARNING: Unsupported export: PropertyCallback -// WARNING: Unsupported export: GateValue -// WARNING: Unsupported export: NpcCorners -// WARNING: Unsupported export: NpcCenter -// WARNING: Unsupported export: RpcInterfaceImplementation -// WARNING: Unsupported export: GetMetaDataFunction -// WARNING: Unsupported export: LogFunction -// WARNING: Unsupported export: RgbFactorProps -// WARNING: Unsupported export: DPoint2dProps -// WARNING: Unsupported export: GeometryStreamProps -// WARNING: Unsupported export: AxisAlignedBox3d -// WARNING: Unsupported export: ElementAlignedBox3d -// WARNING: Unsupported export: ElementAlignedBox2d -// WARNING: Unsupported export: LocalAlignedBox3d -// WARNING: Unsupported export: WEB_RPC_CONSTANTS -// WARNING: Unsupported export: RpcConfigurationSupplier -// WARNING: Unsupported export: RpcInvocationCallback_T -// WARNING: Unsupported export: RpcProtocolEventHandler -// WARNING: Unsupported export: REGISTRY -// WARNING: Unsupported export: OPERATION -// WARNING: Unsupported export: POLICY -// WARNING: Unsupported export: INSTANCE -// WARNING: Unsupported export: CURRENT_REQUEST -// WARNING: Unsupported export: CURRENT_INVOCATION -// WARNING: Unsupported export: builtins -// WARNING: Unsupported export: RpcRequestTokenSupplier_T -// WARNING: Unsupported export: RpcRequestIdSupplier_T -// WARNING: Unsupported export: RpcRequestInitialRetryIntervalSupplier_T -// WARNING: Unsupported export: RpcRequestCallback_T -// WARNING: Unsupported export: RpcResponseCachingCallback_T -// WARNING: Unsupported export: RpcRequestEventHandler -// WARNING: Unsupported export: RpcRequestNotFoundHandler -// WARNING: Unsupported export: initializeRpcRequest -// WARNING: Unsupported export: HttpMethod_T -// (No @packagedocumentation comment for this package) +// @beta +module AmbientOcclusion { + interface Props { + readonly bias?: number; + readonly blurDelta?: number; + readonly blurSigma?: number; + // (undocumented) + readonly blurTexelStepSize?: number; + readonly intensity?: number; + readonly texelStepSize?: number; + readonly zLengthCap?: number; + } + + class Settings implements Props { + // (undocumented) + readonly bias?: number; + // (undocumented) + readonly blurDelta?: number; + // (undocumented) + readonly blurSigma?: number; + // (undocumented) + readonly blurTexelStepSize?: number; + // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static defaults: Settings; + // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static fromJSON(json?: Props): Settings; + // (undocumented) + readonly intensity?: number; + // (undocumented) + readonly texelStepSize?: number; + // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + toJSON(): Props; + // (undocumented) + readonly zLengthCap?: number; + } + +} + +// @alpha (undocumented) +class AnalysisStyle implements AnalysisStyleProps { + // (undocumented) + clone(out?: AnalysisStyle): AnalysisStyle; + // (undocumented) + copyFrom(source: AnalysisStyle): void; + // (undocumented) + displacementChannelName?: string; + // (undocumented) + displacementScale?: number; + // (undocumented) + static fromJSON(json?: AnalysisStyleProps): AnalysisStyle; + // (undocumented) + inputName?: string; + // (undocumented) + inputRange?: Range1d; + // (undocumented) + normalChannelName?: string; + // (undocumented) + scalarChannelName?: string; + // (undocumented) + scalarRange?: Range1d; + // WARNING: The type "Gradient.ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + scalarThematicSettings?: Gradient.ThematicSettings; + // (undocumented) + scalarThematicTexture?: RenderTexture; +} + +// @alpha +interface AnalysisStyleProps { + // (undocumented) + displacementChannelName?: string; + // (undocumented) + displacementScale?: number; + // (undocumented) + inputName?: string; + // (undocumented) + inputRange?: Range1d; + // (undocumented) + normalChannelName?: string; + // (undocumented) + scalarChannelName?: string; + // (undocumented) + scalarRange?: Range1d; + // (undocumented) + scalarThematicSettings?: Gradient.ThematicSettingsProps; +} + +// @public (undocumented) +enum AntiAliasPref { + // (undocumented) + Detect = 0, + // (undocumented) + Off = 2, + // (undocumented) + On = 1 +} + +// @public +interface AreaFillProps { + backgroundFill?: BackgroundFill; + color?: ColorDefProps; + display: FillDisplay; + gradient?: Gradient.SymbProps; + transparency?: number; +} + +// @public (undocumented) +module AreaPattern { + // (undocumented) + class HatchDefLine implements HatchDefLineProps { + // WARNING: The type "HatchDefLineProps" needs to be exported by the package (e.g. added to index.ts) + constructor(json: HatchDefLineProps); + // (undocumented) + angle?: Angle; + // (undocumented) + dashes?: number[]; + // (undocumented) + offset?: Point2d; + // (undocumented) + through?: Point2d; + } + + interface HatchDefLineProps { + angle?: AngleProps; + dashes?: number[]; + offset?: XYProps; + through?: XYProps; + } + + class Params implements ParamsProps { + // (undocumented) + angle1?: Angle; + // (undocumented) + angle2?: Angle; + // (undocumented) + applyTransform(transform: Transform): boolean; + // WARNING: The type "Params" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + clone(): Params; + // (undocumented) + color?: ColorDef; + // WARNING: The type "HatchDefLine" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + defLines?: HatchDefLine[]; + // WARNING: The type "Params" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + equals(other: Params): boolean; + // WARNING: The type "ParamsProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Params" needs to be exported by the package (e.g. added to index.ts) + static fromJSON(json?: ParamsProps): Params; + // (undocumented) + static getTransformPatternScale(transform: Transform): number; + // (undocumented) + invisibleBoundary?: boolean; + // (undocumented) + origin?: Point3d; + // (undocumented) + rotation?: YawPitchRollAngles; + // (undocumented) + scale?: number; + // (undocumented) + snappable?: boolean; + // (undocumented) + space1?: number; + // (undocumented) + space2?: number; + // (undocumented) + symbolId?: Id64String; + // (undocumented) + static transformPatternSpace(transform: Transform, oldSpace: number, patRot: Matrix3d, angle?: Angle): number; + // (undocumented) + weight?: number; + } + + interface ParamsProps { + angle1?: AngleProps; + angle2?: AngleProps; + color?: ColorDefProps; + defLines?: HatchDefLineProps[]; + invisibleBoundary?: boolean; + origin?: XYZProps; + rotation?: YawPitchRollProps; + scale?: number; + snappable?: boolean; + space1?: number; + space2?: number; + symbolId?: Id64String; + weight?: number; + } + +} + +// @beta +enum AuthStatus { + // (undocumented) + AUTHSTATUS_BASE = 131072, + // (undocumented) + Error = 131072, + // (undocumented) + Success = 0 +} + +// @public +interface AuxCoordSystem2dProps extends AuxCoordSystemProps { + angle?: AngleProps; + origin?: XYProps; +} + +// @public +interface AuxCoordSystem3dProps extends AuxCoordSystemProps { + origin?: XYZProps; + pitch?: AngleProps; + // (undocumented) + roll?: AngleProps; + // (undocumented) + yaw?: AngleProps; +} + +// @public (undocumented) +interface AuxCoordSystemProps extends ElementProps { + // (undocumented) + description?: string; + // (undocumented) + type?: number; +} + +// @public +enum BackgroundFill { + None = 0, + Outline = 2, + Solid = 1 +} + +// @public +interface BackgroundMapProps { + // (undocumented) + groundBias?: number; + // (undocumented) + providerData?: { + mapType?: BackgroundMapType; + } + providerName?: string; +} + +// @public +enum BackgroundMapType { + // (undocumented) + Aerial = 2, + // (undocumented) + Hybrid = 3, + // (undocumented) + Street = 1 +} + +// @beta +enum BatchType { + Classifier = 1, + Primary = 0 +} + +// @public +class BentleyCloudRpcConfiguration extends RpcConfiguration { + applicationAuthorizationKey: string; + applicationVersionKey: string; + // WARNING: The type "BentleyCloudRpcProtocol" needs to be exported by the package (e.g. added to index.ts) + readonly protocol: BentleyCloudRpcProtocol; +} + +// @public +class BentleyCloudRpcManager extends RpcManager { + static initializeClient(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration; + static initializeImpl(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration; +} + +// @public +interface BentleyCloudRpcParams { + info: OpenAPIInfo; + pendingRequestListener?: RpcRequestEventHandler; + protocol?: typeof BentleyCloudRpcProtocol; + uriPrefix?: string; +} + +// @public +class BentleyError extends Error { + constructor(errorNumber: number | IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | RepositoryStatus | ChangeSetStatus | HttpStatus | WSStatus | IModelHubStatus, message?: string, log?: LogFunction, category?: string, getMetaData?: GetMetaDataFunction); + protected _initName(): string; + // (undocumented) + errorNumber: number; + // (undocumented) + getMetaData(): any; + // (undocumented) + readonly hasMetaData: boolean; +} + +// @public +enum BentleyStatus { + // (undocumented) + ERROR = 32768, + // (undocumented) + SUCCESS = 0 +} + +// @public +enum BisCodeSpec { + // (undocumented) + annotationFrameStyle = "bis:AnnotationFrameStyle", + // (undocumented) + annotationLeaderStyle = "bis:AnnotationLeaderStyle", + // (undocumented) + annotationTextStyle = "bis:AnnotationTextStyle", + // (undocumented) + auxCoordSystem2d = "bis:AuxCoordSystem2d", + // (undocumented) + auxCoordSystem3d = "bis:AuxCoordSystem3d", + // (undocumented) + auxCoordSystemSpatial = "bis:AuxCoordSystemSpatial", + // (undocumented) + categorySelector = "bis:CategorySelector", + // (undocumented) + colorBook = "bis:ColorBook", + // (undocumented) + displayStyle = "bis:DisplayStyle", + // (undocumented) + drawing = "bis:Drawing", + // (undocumented) + drawingCategory = "bis:DrawingCategory", + // (undocumented) + geometryPart = "bis:GeometryPart", + // (undocumented) + graphicalType2d = "bis:GraphicalType2d", + // (undocumented) + informationPartitionElement = "bis:InformationPartitionElement", + // (undocumented) + lineStyle = "bis:LineStyle", + // (undocumented) + linkElement = "bis:LinkElement", + // (undocumented) + modelSelector = "bis:ModelSelector", + // (undocumented) + nullCodeSpec = "bis:NullCodeSpec", + // (undocumented) + physicalMaterial = "bis:PhysicalMaterial", + // (undocumented) + physicalType = "bis:PhysicalType", + // (undocumented) + renderMaterial = "bis:RenderMaterial", + // (undocumented) + sheet = "bis:Sheet", + // (undocumented) + spatialCategory = "bis:SpatialCategory", + // (undocumented) + spatialLocationType = "bis:SpatialLocationType", + // (undocumented) + subCategory = "bis:SubCategory", + // (undocumented) + subject = "bis:Subject", + // (undocumented) + templateRecipe2d = "bis:TemplateRecipe2d", + // (undocumented) + templateRecipe3d = "bis:TemplateRecipe3d", + // (undocumented) + textAnnotationSeed = "bis:TextAnnotationSeed", + // (undocumented) + texture = "bis:Texture", + // (undocumented) + viewDefinition = "bis:ViewDefinition" +} + +// @public +class BoundingSphere { + constructor(center?: Point3d, radius?: number); + // (undocumented) + center: Point3d; + // (undocumented) + init(center: Point3d, radius: number): void; + // (undocumented) + radius: number; + // (undocumented) + transformBy(transform: Transform, result: BoundingSphere): BoundingSphere; +} + +// @beta (undocumented) +module BRepEntity { + interface DataProps { + data?: string; + faceSymbology?: FaceSymbologyProps[]; + transform?: TransformProps; + type?: Type; + } + + interface FaceSymbologyProps { + color?: ColorDefProps; + materialId?: Id64String; + transparency?: number; + } + + enum Type { + Sheet = 1, + Solid = 0, + Wire = 2 + } + +} + +// @beta +enum BriefcaseStatus { + // (undocumented) + CannotAcquire = 131072, + // (undocumented) + CannotApplyChanges = 131078, + // (undocumented) + CannotCopy = 131075, + // (undocumented) + CannotDelete = 131076, + // (undocumented) + CannotDownload = 131073, + // (undocumented) + CannotUpload = 131074, + // (undocumented) + VersionNotFound = 131077 +} + +// @public (undocumented) +interface CalloutProps extends GeometricElement2dProps { + // (undocumented) + drawingModel?: RelatedElementProps; +} + +// @public +class Camera implements CameraProps { + constructor(props?: CameraProps); + // (undocumented) + clone(): Camera; + // (undocumented) + copyFrom(rhs: Camera): void; + // (undocumented) + equals(other: Camera): boolean; + // (undocumented) + readonly eye: Point3d; + // (undocumented) + focusDist: number; + // (undocumented) + getEyePoint(): Point3d; + // (undocumented) + getFocusDistance(): number; + // (undocumented) + getLensAngle(): Angle; + // (undocumented) + invalidateFocus(): void; + // (undocumented) + readonly isFocusValid: boolean; + // (undocumented) + readonly isLensValid: boolean; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + static isValidLensAngle(val: Angle): boolean; + // (undocumented) + readonly lens: Angle; + // (undocumented) + setEyePoint(pt: XYAndZ): void; + // (undocumented) + setFocusDistance(dist: number): void; + // (undocumented) + setLensAngle(angle: Angle): void; + // (undocumented) + validateLens(): void; + // (undocumented) + static validateLensAngle(val: Angle): void; +} + +// @public +interface CameraProps { + // (undocumented) + eye: XYZProps; + // (undocumented) + focusDist: number; + // (undocumented) + lens: AngleProps; +} + +// @public +class Cartographic implements LatLongAndHeight { + constructor(longitude?: number, latitude?: number, height?: number); + clone(result?: Cartographic): Cartographic; + equals(right: LatLongAndHeight): boolean; + equalsEpsilon(right: LatLongAndHeight, epsilon: number): boolean; + static fromAngles(longitude: Angle, latitude: Angle, height: number, result?: Cartographic): Cartographic; + static fromDegrees(longitude: number, latitude: number, height: number, result?: Cartographic): Cartographic; + static fromEcef(cartesian: Point3d, result?: Cartographic): Cartographic | undefined; + static fromRadians(longitude: number, latitude: number, height?: number, result?: Cartographic): Cartographic; + // (undocumented) + height: number; + // (undocumented) + latitude: number; + // (undocumented) + longitude: number; + toEcef(result?: Point3d): Point3d; + toString(): string; +} + +// @public +class CartographicRange { + constructor(spatialRange: Range3d, spatialToEcef: Transform); + getLongitudeLatitudeBoundingBox(): Range2d; + // (undocumented) + intersectsRange(other: CartographicRange): boolean; +} + +// @public +interface CategoryProps extends ElementProps { + // (undocumented) + description?: string; + // (undocumented) + rank?: Rank; +} + +// @public +interface CategorySelectorProps extends DefinitionElementProps { + // (undocumented) + categories: Id64Array; +} + +// @beta (undocumented) +interface ChangedElements { + // (undocumented) + classIds: Id64String[]; + // (undocumented) + elements: Id64String[]; + // (undocumented) + opcodes: number[]; +} + +// @public +enum ChangedValueState { + // (undocumented) + AfterInsert = 1, + // (undocumented) + AfterUpdate = 3, + // (undocumented) + BeforeDelete = 4, + // (undocumented) + BeforeUpdate = 2 +} + +// @public +enum ChangeOpCode { + // (undocumented) + Delete = 4, + // (undocumented) + Insert = 1, + // (undocumented) + Update = 2 +} + +// @beta +enum ChangeSetStatus { + ApplyError = 90113, + CannotMergeIntoMaster = 90136, + CannotMergeIntoReadonly = 90135, + CannotMergeIntoReversed = 90137, + // (undocumented) + CHANGESET_ERROR_BASE = 90112, + ChangeTrackingNotEnabled = 90114, + CorruptedChangeStream = 90115, + CouldNotOpenDgnDb = 90131, + FileNotFound = 90116, + FileWriteError = 90117, + HasLocalChanges = 90118, + HasUncommittedChanges = 90119, + InDynamicTransaction = 90122, + InvalidId = 90120, + InvalidVersion = 90121, + IsCreatingChangeSet = 90123, + IsNotCreatingChangeSet = 90124, + MergePropagationError = 90125, + MergeSchemaChangesOnOpen = 90132, + NothingToMerge = 90126, + NoTransactions = 90127, + ParentMismatch = 90128, + ProcessSchemaChangesOnOpen = 90134, + ReverseOrReinstateSchemaChangesOnOpen = 90133, + SQLiteError = 90129, + // (undocumented) + Success = 0, + WrongDgnDb = 90130 +} + +// @public +class Code implements CodeProps { + constructor(val: CodeProps); + static createEmpty(): Code; + // (undocumented) + equals(other: Code): boolean; + // (undocumented) + static fromJSON(json?: any): Code; + // (undocumented) + getValue(): string; + scope: string; + spec: Id64String; + value?: string; +} + +// @public +interface CodeProps { + // (undocumented) + scope: CodeScopeProps; + // (undocumented) + spec: Id64String; + // (undocumented) + value?: string; +} + +// @public +module CodeScopeSpec { + // @public + enum ScopeRequirement { + ElementId = 1, + FederationGuid = 2 + } + + // @public + enum Type { + Model = 2, + ParentElement = 3, + RelatedElement = 4, + Repository = 1 + } + +} + +// @public +class CodeSpec { + // WARNING: The type "CodeScopeSpec.Type" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "CodeScopeSpec.ScopeRequirement" needs to be exported by the package (e.g. added to index.ts) + constructor(iModel: IModel, id: Id64String, name: string, specScopeType: CodeScopeSpec.Type, scopeReq?: CodeScopeSpec.ScopeRequirement, properties?: any); + id: Id64String; + iModel: IModel; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + name: string; + // (undocumented) + properties: any; + // WARNING: The type "CodeScopeSpec.ScopeRequirement" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + scopeReq: CodeScopeSpec.ScopeRequirement; + // WARNING: The type "CodeScopeSpec.Type" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + specScopeType: CodeScopeSpec.Type; +} + +// @public +enum ColorByName { + // (undocumented) + aliceBlue = 16775408, + // (undocumented) + amber = 49151, + // (undocumented) + antiqueWhite = 14150650, + // (undocumented) + aqua = 16776960, + // (undocumented) + aquamarine = 13959039, + // (undocumented) + azure = 16777200, + // (undocumented) + beige = 14480885, + // (undocumented) + bisque = 12903679, + // (undocumented) + black = 0, + // (undocumented) + blanchedAlmond = 13495295, + // (undocumented) + blue = 16711680, + // (undocumented) + blueViolet = 14822282, + // (undocumented) + brown = 2763429, + // (undocumented) + burlyWood = 8894686, + // (undocumented) + cadetBlue = 10526303, + // (undocumented) + chartreuse = 65407, + // (undocumented) + chocolate = 1993170, + // (undocumented) + coral = 5275647, + // (undocumented) + cornflowerBlue = 15570276, + // (undocumented) + cornSilk = 14481663, + // (undocumented) + crimson = 3937500, + // (undocumented) + cyan = 16776960, + // (undocumented) + darkBlue = 9109504, + // (undocumented) + darkBrown = 2179941, + // (undocumented) + darkCyan = 9145088, + // (undocumented) + darkGoldenrod = 755384, + // (undocumented) + darkGray = 11119017, + // (undocumented) + darkGreen = 25600, + // (undocumented) + darkGrey = 11119017, + // (undocumented) + darkKhaki = 7059389, + // (undocumented) + darkMagenta = 9109643, + // (undocumented) + darkOliveGreen = 3107669, + // (undocumented) + darkOrange = 36095, + // (undocumented) + darkOrchid = 13382297, + // (undocumented) + darkRed = 139, + // (undocumented) + darkSalmon = 8034025, + // (undocumented) + darkSeagreen = 9419919, + // (undocumented) + darkSlateBlue = 9125192, + // (undocumented) + darkSlateGray = 5197615, + // (undocumented) + darkSlateGrey = 5197615, + // (undocumented) + darkTurquoise = 13749760, + // (undocumented) + darkViolet = 13828244, + // (undocumented) + deepPink = 9639167, + // (undocumented) + deepSkyBlue = 16760576, + // (undocumented) + dimGray = 6908265, + // (undocumented) + dimGrey = 6908265, + // (undocumented) + dodgerBlue = 16748574, + // (undocumented) + fireBrick = 2237106, + // (undocumented) + floralWhite = 15792895, + // (undocumented) + forestGreen = 2263842, + // (undocumented) + fuchsia = 16711935, + // (undocumented) + gainsboro = 14474460, + // (undocumented) + ghostWhite = 16775416, + // (undocumented) + gold = 55295, + // (undocumented) + goldenrod = 2139610, + // (undocumented) + gray = 8421504, + // (undocumented) + green = 32768, + // (undocumented) + greenYellow = 3145645, + // (undocumented) + grey = 8421504, + // (undocumented) + honeydew = 15794160, + // (undocumented) + hotPink = 11823615, + // (undocumented) + indianRed = 6053069, + // (undocumented) + indigo = 8519755, + // (undocumented) + ivory = 15794175, + // (undocumented) + khaki = 9234160, + // (undocumented) + lavender = 16443110, + // (undocumented) + lavenderBlush = 16118015, + // (undocumented) + lawnGreen = 64636, + // (undocumented) + lemonChiffon = 13499135, + // (undocumented) + lightBlue = 15128749, + // (undocumented) + lightCoral = 8421616, + // (undocumented) + lightCyan = 16777184, + // (undocumented) + lightGoldenrodYellow = 13826810, + // (undocumented) + lightGray = 13882323, + // (undocumented) + lightGreen = 9498256, + // (undocumented) + lightGrey = 13882323, + // (undocumented) + lightPink = 12695295, + // (undocumented) + lightSalmon = 8036607, + // (undocumented) + lightSeagreen = 11186720, + // (undocumented) + lightSkyBlue = 16436871, + // (undocumented) + lightSlateGray = 10061943, + // (undocumented) + lightSlateGrey = 10061943, + // (undocumented) + lightSteelBlue = 14599344, + // (undocumented) + lightyellow = 14745599, + // (undocumented) + lime = 65280, + // (undocumented) + limeGreen = 3329330, + // (undocumented) + linen = 15134970, + // (undocumented) + magenta = 16711935, + // (undocumented) + maroon = 128, + // (undocumented) + mediumAquamarine = 11193702, + // (undocumented) + mediumBlue = 13434880, + // (undocumented) + mediumOrchid = 13850042, + // (undocumented) + mediumPurple = 14381203, + // (undocumented) + mediumSeaGreen = 7451452, + // (undocumented) + mediumSlateBlue = 15624315, + // (undocumented) + mediumSpringGreen = 10156544, + // (undocumented) + mediumTurquoise = 13422920, + // (undocumented) + mediumVioletRed = 8721863, + // (undocumented) + midnightBlue = 7346457, + // (undocumented) + mintCream = 16449525, + // (undocumented) + mistyRose = 14804223, + // (undocumented) + moccasin = 11920639, + // (undocumented) + navajoWhite = 11394815, + // (undocumented) + navy = 8388608, + // (undocumented) + oldLace = 15136253, + // (undocumented) + olive = 32896, + // (undocumented) + oliveDrab = 2330219, + // (undocumented) + orange = 42495, + // (undocumented) + orangeRed = 17919, + // (undocumented) + orchid = 14053594, + // (undocumented) + paleGoldenrod = 11200750, + // (undocumented) + paleGreen = 10025880, + // (undocumented) + paleTurquoise = 15658671, + // (undocumented) + paleVioletRed = 9662683, + // (undocumented) + papayaWhip = 14020607, + // (undocumented) + peachPuff = 12180223, + // (undocumented) + peru = 4163021, + // (undocumented) + pink = 13353215, + // (undocumented) + plum = 14524637, + // (undocumented) + powderBlue = 15130800, + // (undocumented) + purple = 8388736, + // (undocumented) + rebeccaPurple = 10040166, + // (undocumented) + red = 255, + // (undocumented) + rosyBrown = 9408444, + // (undocumented) + royalBlue = 14772545, + // (undocumented) + saddleBrown = 1262987, + // (undocumented) + salmon = 7504122, + // (undocumented) + sandyBrown = 6333684, + // (undocumented) + seaGreen = 5737262, + // (undocumented) + seaShell = 15660543, + // (undocumented) + sienna = 2970272, + // (undocumented) + silver = 12632256, + // (undocumented) + skyBlue = 15453831, + // (undocumented) + slateBlue = 13458026, + // (undocumented) + slateGray = 9470064, + // (undocumented) + slateGrey = 9470064, + // (undocumented) + snow = 16448255, + // (undocumented) + springGreen = 8388352, + // (undocumented) + steelBlue = 11829830, + // (undocumented) + tan = 9221330, + // (undocumented) + teal = 8421376, + // (undocumented) + thistle = 14204888, + // (undocumented) + tomato = 4678655, + // (undocumented) + turquoise = 13688896, + // (undocumented) + violet = 15631086, + // (undocumented) + wheat = 11788021, + // (undocumented) + white = 16777215, + // (undocumented) + whiteSmoke = 16119285, + // (undocumented) + yellow = 65535, + // (undocumented) + yellowGreen = 3329434 +} + +// @public +class ColorDef { + constructor(val?: string | ColorDefProps); + adjustForContrast(other: ColorDef, alpha?: number): ColorDef; + static readonly black: ColorDef; + static readonly blue: ColorDef; + clone(): ColorDef; + readonly colors: { + b: number; + g: number; + r: number; + t: number; + } + equals(other: ColorDef): boolean; + static from(red: number, green: number, blue: number, transparency?: number, result?: ColorDef): ColorDef; + static fromHSL(h: number, s: number, l: number, out?: ColorDef): ColorDef; + static fromHSV(hsv: HSVColor, out?: ColorDef): ColorDef; + static fromJSON(json?: any): ColorDef; + getAbgr(): number; + getAlpha(): number; + getRgb(): number; + static readonly green: ColorDef; + invert(): ColorDef; + readonly isOpaque: boolean; + lerp(color2: ColorDef, weight: number, result?: ColorDef): ColorDef; + readonly name: string | undefined; + static readonly red: ColorDef; + static rgb2bgr(val: number): number; + setAlpha(alpha: number): void; + setFrom(other: ColorDef): void; + setTransparency(transparency: number): void; + tbgr: number; + toHexString(): string; + toHSL(opt?: HSLColor): HSLColor; + toHSV(out?: HSVColor): HSVColor; + toJSON(): ColorDefProps; + toRgbString(): string; + static readonly white: ColorDef; +} + +// @public (undocumented) +class ColorIndex { + constructor(); + // (undocumented) + readonly hasAlpha: boolean; + // (undocumented) + initNonUniform(colors: Uint32Array, indices: number[], hasAlpha: boolean): void; + // (undocumented) + initUniform(color: ColorDef | number): void; + // (undocumented) + readonly isUniform: boolean; + // (undocumented) + readonly nonUniform: NonUniformColor | undefined; + // (undocumented) + readonly numColors: number; + // (undocumented) + reset(): void; + // (undocumented) + readonly uniform: ColorDef | undefined; +} + +// @public +interface ContextRealityModelProps { + // (undocumented) + description?: string; + // (undocumented) + name?: string; + // (undocumented) + tilesetUrl: string; +} + +// @public +interface CreateIModelProps extends IModelProps { + client?: string; + guid?: GuidString; + thumbnail?: ThumbnailProps; +} + +// @beta +interface CustomAttribute { + ecclass: string; + properties: { + [propName: string]: any; + } +} + +// @public +enum DbResult { + BE_SQLITE_ABORT = 4, + // (undocumented) + BE_SQLITE_ABORT_ROLLBACK = 516, + BE_SQLITE_AUTH = 23, + BE_SQLITE_BUSY = 5, + // (undocumented) + BE_SQLITE_BUSY_RECOVERY = 261, + BE_SQLITE_CANTOPEN = 14, + // (undocumented) + BE_SQLITE_CANTOPEN_FULLPATH = 782, + // (undocumented) + BE_SQLITE_CANTOPEN_ISDIR = 526, + // (undocumented) + BE_SQLITE_CANTOPEN_NOTEMPDIR = 270, + BE_SQLITE_CONSTRAINT_BASE = 19, + // (undocumented) + BE_SQLITE_CONSTRAINT_CHECK = 275, + // (undocumented) + BE_SQLITE_CONSTRAINT_COMMITHOOK = 531, + // (undocumented) + BE_SQLITE_CONSTRAINT_FOREIGNKEY = 787, + // (undocumented) + BE_SQLITE_CONSTRAINT_FUNCTION = 1043, + // (undocumented) + BE_SQLITE_CONSTRAINT_NOTNULL = 1299, + // (undocumented) + BE_SQLITE_CONSTRAINT_PRIMARYKEY = 1555, + // (undocumented) + BE_SQLITE_CONSTRAINT_TRIGGER = 1811, + // (undocumented) + BE_SQLITE_CONSTRAINT_UNIQUE = 2067, + // (undocumented) + BE_SQLITE_CONSTRAINT_VTAB = 2323, + BE_SQLITE_CORRUPT = 11, + // (undocumented) + BE_SQLITE_CORRUPT_VTAB = 267, + BE_SQLITE_DONE = 101, + BE_SQLITE_EMPTY = 16, + BE_SQLITE_ERROR = 1, + BE_SQLITE_ERROR_AlreadyOpen = 33554442, + BE_SQLITE_ERROR_BadDbProfile = 100663306, + BE_SQLITE_ERROR_ChangeTrackError = 218103818, + BE_SQLITE_ERROR_CouldNotAcquireLocksOrCodes = 352321546, + BE_SQLITE_ERROR_FileExists = 16777226, + BE_SQLITE_ERROR_FileNotFound = 67108874, + BE_SQLITE_ERROR_InvalidChangeSetVersion = 234881034, + BE_SQLITE_ERROR_InvalidProfileVersion = 117440522, + BE_SQLITE_ERROR_NoPropertyTable = 50331658, + BE_SQLITE_ERROR_NoTxnActive = 83886090, + BE_SQLITE_ERROR_ProfileTooNew = 201326602, + BE_SQLITE_ERROR_ProfileTooNewForReadWrite = 184549386, + BE_SQLITE_ERROR_ProfileTooOld = 167772170, + BE_SQLITE_ERROR_ProfileTooOldForReadWrite = 150994954, + BE_SQLITE_ERROR_ProfileUpgradeFailed = 134217738, + BE_SQLITE_ERROR_SchemaImportFailed = 335544330, + BE_SQLITE_ERROR_SchemaLockFailed = 301989898, + BE_SQLITE_ERROR_SchemaTooNew = 268435466, + BE_SQLITE_ERROR_SchemaTooOld = 285212682, + BE_SQLITE_ERROR_SchemaUpgradeFailed = 318767114, + BE_SQLITE_ERROR_SchemaUpgradeRequired = 251658250, + BE_SQLITE_FORMAT = 24, + BE_SQLITE_FULL = 13, + BE_SQLITE_INTERNAL = 2, + BE_SQLITE_INTERRUPT = 9, + BE_SQLITE_IOERR = 10, + // (undocumented) + BE_SQLITE_IOERR_ACCESS = 3338, + // (undocumented) + BE_SQLITE_IOERR_BLOCKED = 2826, + // (undocumented) + BE_SQLITE_IOERR_CHECKRESERVEDLOCK = 3594, + // (undocumented) + BE_SQLITE_IOERR_CLOSE = 4106, + // (undocumented) + BE_SQLITE_IOERR_DELETE = 2570, + // (undocumented) + BE_SQLITE_IOERR_DELETE_NOENT = 5898, + // (undocumented) + BE_SQLITE_IOERR_DIR_CLOSE = 4362, + // (undocumented) + BE_SQLITE_IOERR_DIR_FSYNC = 1290, + // (undocumented) + BE_SQLITE_IOERR_FSTAT = 1802, + // (undocumented) + BE_SQLITE_IOERR_FSYNC = 1034, + // (undocumented) + BE_SQLITE_IOERR_LOCK = 3850, + // (undocumented) + BE_SQLITE_IOERR_NOMEM = 3082, + // (undocumented) + BE_SQLITE_IOERR_RDLOCK = 2314, + // (undocumented) + BE_SQLITE_IOERR_READ = 266, + // (undocumented) + BE_SQLITE_IOERR_SEEK = 5642, + // (undocumented) + BE_SQLITE_IOERR_SHMLOCK = 5130, + // (undocumented) + BE_SQLITE_IOERR_SHMMAP = 5386, + // (undocumented) + BE_SQLITE_IOERR_SHMOPEN = 4618, + // (undocumented) + BE_SQLITE_IOERR_SHMSIZE = 4874, + // (undocumented) + BE_SQLITE_IOERR_SHORT_READ = 522, + // (undocumented) + BE_SQLITE_IOERR_TRUNCATE = 1546, + // (undocumented) + BE_SQLITE_IOERR_UNLOCK = 2058, + // (undocumented) + BE_SQLITE_IOERR_WRITE = 778, + BE_SQLITE_LOCKED = 6, + // (undocumented) + BE_SQLITE_LOCKED_SHAREDCACHE = 262, + BE_SQLITE_MISMATCH = 20, + BE_SQLITE_MISUSE = 21, + BE_SQLITE_NOLFS = 22, + BE_SQLITE_NOMEM = 7, + BE_SQLITE_NOTADB = 26, + BE_SQLITE_NOTFOUND = 12, + // (undocumented) + BE_SQLITE_OK = 0, + BE_SQLITE_PERM = 3, + BE_SQLITE_PROTOCOL = 15, + BE_SQLITE_RANGE = 25, + BE_SQLITE_READONLY = 8, + // (undocumented) + BE_SQLITE_READONLY_CANTLOCK = 520, + // (undocumented) + BE_SQLITE_READONLY_RECOVERY = 264, + // (undocumented) + BE_SQLITE_READONLY_ROLLBACK = 776, + BE_SQLITE_ROW = 100, + BE_SQLITE_SCHEMA = 17, + BE_SQLITE_TOOBIG = 18 +} + +// @beta +class DecorationGeometryProps { + constructor(id: Id64String, geometryStream: GeometryStreamProps); + // (undocumented) + readonly geometryStream: GeometryStreamProps; + // (undocumented) + readonly id: Id64String; +} + +// @public +interface DefinitionElementProps extends ElementProps { + // (undocumented) + isPrivate?: boolean; +} + +// @beta +interface DisplayStyle3dProps extends DisplayStyleProps { + jsonProperties?: { + styles?: DisplayStyle3dSettingsProps; + } +} + +// @beta +class DisplayStyle3dSettings extends DisplayStyleSettings { + constructor(jsonProperties: { + styles?: DisplayStyle3dSettingsProps; + }); + // WARNING: The type "AmbientOcclusion.Settings" needs to be exported by the package (e.g. added to index.ts) + ambientOcclusionSettings: AmbientOcclusion.Settings; + // (undocumented) + environment: EnvironmentProps; + // WARNING: The type "HiddenLine.Settings" needs to be exported by the package (e.g. added to index.ts) + hiddenLineSettings: HiddenLine.Settings; + // (undocumented) + toJSON(): DisplayStyle3dSettingsProps; +} + +// @beta +interface DisplayStyle3dSettingsProps extends DisplayStyleSettingsProps { + ao?: AmbientOcclusion.Props; + environment?: EnvironmentProps; + hline?: HiddenLine.SettingsProps; +} + +// @beta +interface DisplayStyleProps extends DefinitionElementProps { + jsonProperties?: { + styles?: DisplayStyleSettingsProps; + } +} + +// @beta +class DisplayStyleSettings { + constructor(jsonProperties: { + styles?: DisplayStyleSettingsProps; + }); + // (undocumented) + protected readonly _json: DisplayStyleSettingsProps; + backgroundColor: ColorDef; + // (undocumented) + backgroundMap: BackgroundMapProps | undefined; + dropSubCategoryOverride(id: Id64String): void; + getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined; + readonly hasSubCategoryOverride: boolean; + monochromeColor: ColorDef; + overrideSubCategory(id: Id64String, ovr: SubCategoryOverride): void; + // (undocumented) + toJSON(): DisplayStyleSettingsProps; + viewFlags: ViewFlags; +} + +// @beta +interface DisplayStyleSettingsProps { + analysisStyle?: AnalysisStyleProps; + backgroundColor?: ColorDefProps; + backgroundMap?: BackgroundMapProps; + ContextRealityModels?: ContextRealityModelProps[]; + monochromeColor?: ColorDefProps; + scheduleScript?: RenderSchedule.ElementTimelineProps[]; + subCategoryOvr?: DisplayStyleSubCategoryProps[]; + // (undocumented) + viewflags?: ViewFlagProps; +} + +// @public +interface DisplayStyleSubCategoryProps extends SubCategoryAppearance.Props { + subCategory?: Id64String; +} + +// @public +class EcefLocation implements EcefLocationProps { + constructor(props: EcefLocationProps); + static createFromCartographicOrigin(origin: Cartographic): EcefLocation; + getTransform(): Transform; + readonly orientation: YawPitchRollAngles; + readonly origin: Point3d; +} + +// @public +interface EcefLocationProps { + orientation: YawPitchRollProps; + origin: XYZProps; +} + +// @public +class ECJsNames { + static systemPropertyToJsName(systemPropertyType: ECSqlSystemProperty): string; + static toJsName(propName: string, isSystemProperty?: boolean): string; +} + +// @public +enum ECSqlSystemProperty { + // (undocumented) + ECClassId = 1, + // (undocumented) + ECInstanceId = 0, + // (undocumented) + NavigationId = 6, + // (undocumented) + NavigationRelClassId = 7, + // (undocumented) + PointX = 8, + // (undocumented) + PointY = 9, + // (undocumented) + PointZ = 10, + // (undocumented) + SourceECClassId = 3, + // (undocumented) + SourceECInstanceId = 2, + // (undocumented) + TargetECClassId = 5, + // (undocumented) + TargetECInstanceId = 4 +} + +// @public +enum ECSqlValueType { + // (undocumented) + Blob = 1, + // (undocumented) + Boolean = 2, + // (undocumented) + DateTime = 3, + // (undocumented) + Double = 4, + // (undocumented) + Geometry = 5, + // (undocumented) + Guid = 16, + // (undocumented) + Id = 6, + // (undocumented) + Int = 7, + // (undocumented) + Int64 = 8, + // (undocumented) + Navigation = 12, + // (undocumented) + Point2d = 9, + // (undocumented) + Point3d = 10, + // (undocumented) + PrimitiveArray = 14, + // (undocumented) + String = 11, + // (undocumented) + Struct = 13, + // (undocumented) + StructArray = 15 +} + +// @public (undocumented) +class EdgeArgs { + // (undocumented) + clear(): void; + // (undocumented) + edges?: MeshEdge[]; + // (undocumented) + init(meshEdges?: MeshEdges): boolean; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + readonly numEdges: number; +} + +// @public +class ElectronRpcConfiguration extends RpcConfiguration { + // (undocumented) + static readonly isElectron: boolean; + // WARNING: The type "ElectronRpcProtocol" needs to be exported by the package (e.g. added to index.ts) + protocol: ElectronRpcProtocol; +} + +// @public +class ElectronRpcManager extends RpcManager { + static initializeClient(params: ElectronRpcParams, interfaces: RpcInterfaceDefinition[]): ElectronRpcConfiguration; + static initializeImpl(params: ElectronRpcParams, interfaces: RpcInterfaceDefinition[]): ElectronRpcConfiguration; +} + +// @public +interface ElectronRpcParams { + // (undocumented) + protocol?: typeof ElectronRpcProtocol; +} + +// @public +interface ElementAspectProps extends EntityProps { + // (undocumented) + element: RelatedElementProps; +} + +// @public +interface ElementLoadProps { + // (undocumented) + code?: CodeProps; + // (undocumented) + federationGuid?: GuidString; + // (undocumented) + id?: Id64String; + wantBRepData?: boolean; + wantGeometry?: boolean; +} + +// @public +interface ElementProps extends EntityProps { + code: CodeProps; + federationGuid?: GuidString; + jsonProperties?: any; + model: Id64String; + parent?: RelatedElementProps; + userLabel?: string; +} + +// @beta +class EntityMetaData implements EntityMetaDataProps { + constructor(jsonObj: EntityMetaDataProps); + readonly baseClasses: string[]; + readonly customAttributes?: CustomAttribute[]; + // (undocumented) + readonly description?: string; + // (undocumented) + readonly displayLabel?: string; + readonly ecclass: string; + // (undocumented) + readonly modifier?: string; + readonly properties: { + [propName: string]: PropertyMetaData; + } +} + +// @beta (undocumented) +interface EntityMetaDataProps { + baseClasses: string[]; + customAttributes?: CustomAttribute[]; + // (undocumented) + description?: string; + // (undocumented) + displayLabel?: string; + // (undocumented) + ecclass: string; + // (undocumented) + modifier?: string; + properties: { + [propName: string]: PropertyMetaData; + } +} + +// @public +interface EntityProps { + // (undocumented) + [propName: string]: any; + classFullName: string; + id?: Id64String; +} + +// @alpha +interface EntityQueryParams { + from?: string; + limit?: number; + offset?: number; + only?: boolean; + orderBy?: string; + where?: string; +} + +// @public +interface EnvironmentProps { + // (undocumented) + ground?: GroundPlaneProps; + // (undocumented) + sky?: SkyBoxProps; +} + +// @beta +class Feature { + constructor(elementId?: Id64String, subCategoryId?: Id64String, geometryClass?: GeometryClass); + // (undocumented) + compare(rhs: Feature): number; + // (undocumented) + readonly elementId: string; + // (undocumented) + equals(other: Feature): boolean; + // (undocumented) + readonly geometryClass: GeometryClass; + // (undocumented) + readonly isDefined: boolean; + // (undocumented) + readonly isUndefined: boolean; + // (undocumented) + readonly subCategoryId: string; +} + +// @public +class FeatureGates { + addMonitor(feature: string, monitor: (val: GateValue) => void): () => void; + check(feature: string, defaultVal?: GateValue): GateValue; + readonly gates: Map; + onChanged: BeEvent<(feature: string, val: GateValue) => void>; + setGate(feature: string, val: GateValue): void; +} + +// @public (undocumented) +class FeatureIndex { + constructor(); + // (undocumented) + featureID: number; + // (undocumented) + featureIDs?: Uint32Array; + // (undocumented) + readonly isEmpty: boolean; + // (undocumented) + readonly isUniform: boolean; + // (undocumented) + reset(): void; + // (undocumented) + type: FeatureIndexType; +} + +// @public (undocumented) +enum FeatureIndexType { + // (undocumented) + Empty = 0, + // (undocumented) + NonUniform = 2, + // (undocumented) + Uniform = 1 +} + +// @beta +class FeatureTable extends IndexMap { + constructor(maxFeatures: number, modelId?: Id64String, type?: BatchType); + // (undocumented) + readonly anyDefined: boolean; + findFeature(index: number): Feature | undefined; + // (undocumented) + getArray(): Array>; + // (undocumented) + insertWithIndex(feature: Feature, index: number): void; + readonly isClassifier: boolean; + readonly isUniform: boolean; + readonly maxFeatures: number; + // (undocumented) + readonly modelId: Id64String; + // (undocumented) + readonly type: BatchType; + readonly uniform: Feature | undefined; +} + +// @public (undocumented) +interface FilePropertyProps { + // (undocumented) + id?: number | string; + // (undocumented) + name: string; + // (undocumented) + namespace: string; + // (undocumented) + subId?: number | string; +} + +// @public +enum FillDisplay { + Always = 2, + Blanking = 3, + ByView = 1, + Never = 0 +} + +// @public +enum FillFlags { + Always = 2, + Background = 8, + Behind = 4, + Blanking = 6, + ByView = 1, + // (undocumented) + None = 0 +} + +// @public +class FontMap { + constructor(props: FontMapProps); + // (undocumented) + readonly fonts: Map; + getFont(arg: string | number): FontProps | undefined; + // (undocumented) + toJSON(): FontMapProps; +} + +// @public +interface FontMapProps { + // (undocumented) + fonts: FontProps[]; +} + +// @public +interface FontProps { + // (undocumented) + id: number; + // (undocumented) + name: string; + // (undocumented) + type: FontType; +} + +// @public +enum FontType { + // (undocumented) + Rsc = 2, + // (undocumented) + Shx = 3, + // (undocumented) + TrueType = 1 +} + +// @public (undocumented) +interface FormDataCommon { + // (undocumented) + append(name: string, value: string | Blob | Buffer, fileName?: string): void; +} + +// @public +class Frustum { + constructor(); + clone(result?: Frustum): Frustum; + distance(corner1: number, corner2: number): number; + equals(rhs: Frustum): boolean; + fixPointOrder(): void; + static fromRange(range: LowAndHighXYZ | LowAndHighXY, out?: Frustum): Frustum; + getCenter(): Point3d; + getCorner(i: number): Point3d; + getFraction(): number; + getRangePlanes(clipFront: boolean, clipBack: boolean, expandPlaneDistance: number): ConvexClipPlaneSet; + readonly hasMirror: boolean; + initFromRange(range: LowAndHighXYZ | LowAndHighXY): void; + initNpc(): this; + invalidate(): void; + isSame(other: Frustum): boolean; + multiply(trans: Transform): void; + readonly points: Point3d[]; + scaleAboutCenter(scale: number): void; + setFrom(other: Frustum): void; + toMap4d(): Map4d | undefined; + toRange(range?: Range3d): Range3d; + transformBy(trans: Transform, result?: Frustum): Frustum; + translate(offset: Vector3d): void; +} + +// @public (undocumented) +class FrustumPlanes { +} + +// @public (undocumented) +interface FunctionalElementProps extends ElementProps { + // (undocumented) + typeDefinition?: RelatedElementProps; +} + +// @beta +interface GeoCoordinatesRequestProps { + // (undocumented) + iModelCoords: XYZProps[]; + // (undocumented) + targetDatum: string; +} + +// @beta +interface GeoCoordinatesResponseProps { + // (undocumented) + fromCache: number; + // (undocumented) + geoCoords: PointWithStatus[]; +} + +// @public (undocumented) +enum GeoCoordStatus { + // (undocumented) + CSMapError = 4096, + // (undocumented) + NoDatumConverter = 25, + // (undocumented) + NoGCSDefined = 100, + // (undocumented) + OutOfMathematicalDomain = 2, + // (undocumented) + OutOfUsefulRange = 1, + // (undocumented) + Pending = -41556, + // (undocumented) + Success = 0, + // (undocumented) + VerticalDatumConvertError = 26 +} + +// @public +interface GeometricElement2dProps extends GeometricElementProps { + // (undocumented) + placement?: Placement2dProps; + // (undocumented) + typeDefinition?: RelatedElementProps; +} + +// @public +interface GeometricElement3dProps extends GeometricElementProps { + // (undocumented) + placement?: Placement3dProps; + // (undocumented) + typeDefinition?: RelatedElementProps; +} + +// @public +interface GeometricElementProps extends ElementProps { + category: Id64String; + // (undocumented) + geom?: GeometryStreamProps; +} + +// @public +interface GeometricModel2dProps extends ModelProps { + // (undocumented) + globalOrigin?: XYProps; +} + +// @public +interface GeometryAppearanceProps { + color?: ColorDefProps; + displayPriority?: number; + geometryClass?: GeometryClass; + style?: Id64String; + subCategory?: Id64String; + transparency?: number; + weight?: number; +} + +// @alpha +enum GeometryClass { + Construction = 1, + Dimension = 2, + Pattern = 3, + Primary = 0 +} + +// @public +class GeometryParams { + constructor(categoryId: Id64String, subCategoryId?: string); + backgroundFill?: BackgroundFill; + // (undocumented) + categoryId: Id64String; + // (undocumented) + clone(): GeometryParams; + elmPriority?: number; + elmTransparency?: number; + fillColor?: ColorDef; + fillDisplay?: FillDisplay; + fillTransparency?: number; + geometryClass?: GeometryClass; + // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) + gradient?: Gradient.Symb; + isEquivalent(other: GeometryParams): boolean; + lineColor?: ColorDef; + materialId?: Id64String; + // WARNING: The type "AreaPattern.Params" needs to be exported by the package (e.g. added to index.ts) + pattern?: AreaPattern.Params; + resetAppearance(): void; + setCategoryId(categoryId: Id64String, clearAppearanceOverrides?: boolean): void; + setSubCategoryId(subCategoryId: Id64String, clearAppearanceOverrides?: boolean): void; + // WARNING: The type "LineStyle.Info" needs to be exported by the package (e.g. added to index.ts) + styleInfo?: LineStyle.Info; + // (undocumented) + subCategoryId: string; + weight?: number; +} + +// @public +interface GeometryPartInstanceProps { + origin?: XYZProps; + part: Id64String; + rotation?: YawPitchRollProps; + scale?: number; +} + +// @public +interface GeometryPartProps extends ElementProps { + // (undocumented) + bbox?: LowAndHighXYZ; + // (undocumented) + geom?: GeometryStreamProps; +} + +// @public +class GeometryStreamBuilder { + // WARNING: The type "BRepEntity.DataProps" needs to be exported by the package (e.g. added to index.ts) + appendBRepData(brep: BRepEntity.DataProps): boolean; + appendGeometry(geometry: GeometryQuery): boolean; + appendGeometryParamsChange(geomParams: GeometryParams): boolean; + appendGeometryPart2d(partId: Id64String, instanceOrigin?: Point2d, instanceRotation?: Angle, instanceScale?: number): boolean; + appendGeometryPart3d(partId: Id64String, instanceOrigin?: Point3d, instanceRotation?: YawPitchRollAngles, instanceScale?: number): boolean; + appendGeometryRanges(): void; + appendSubCategoryChange(subCategoryId: Id64String): boolean; + appendTextString(textString: TextString): boolean; + readonly geometryStream: GeometryStreamProps; + setLocalToWorld(localToWorld?: Transform): void; + setLocalToWorld2d(origin: Point2d, angle?: Angle): void; + setLocalToWorld3d(origin: Point3d, angles?: YawPitchRollAngles): void; +} + +// @public +interface GeometryStreamEntryProps extends GeomJson.GeometryProps { + // (undocumented) + appearance?: GeometryAppearanceProps; + // (undocumented) + brep?: BRepEntity.DataProps; + // (undocumented) + fill?: AreaFillProps; + // (undocumented) + geomPart?: GeometryPartInstanceProps; + // (undocumented) + material?: MaterialProps; + // (undocumented) + pattern?: AreaPattern.ParamsProps; + // (undocumented) + styleMod?: LineStyle.ModifierProps; + // (undocumented) + subRange?: LowAndHighXYZ; + // (undocumented) + textString?: TextStringProps; +} + +// @public +class GeometryStreamIterator implements IterableIterator { + // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores + // (undocumented) + [Symbol.iterator](): IterableIterator; + constructor(geometryStream: GeometryStreamProps, category?: Id64String); + entry: GeometryStreamIteratorEntry; + static fromGeometricElement2d(element: GeometricElement2dProps): GeometryStreamIterator; + static fromGeometricElement3d(element: GeometricElement3dProps): GeometryStreamIterator; + static fromGeometryPart(geomPart: GeometryPartProps, geomParams?: GeometryParams, partTransform?: Transform): GeometryStreamIterator; + geometryStream: GeometryStreamProps; + next(): IteratorResult; + partToWorld(): Transform | undefined; + setLocalToWorld(localToWorld?: Transform): void; + setLocalToWorld2d(origin: Point2d, angle?: Angle): void; + setLocalToWorld3d(origin: Point3d, angles?: YawPitchRollAngles): void; +} + +// @public +class GeometryStreamIteratorEntry { + constructor(category?: Id64String); + // WARNING: The type "BRepEntity.DataProps" needs to be exported by the package (e.g. added to index.ts) + brep?: BRepEntity.DataProps; + geometryQuery?: GeometryQuery; + geomParams: GeometryParams; + localRange?: Range3d; + localToWorld?: Transform; + partId?: Id64String; + partToLocal?: Transform; + textString?: TextString; +} + +// @beta (undocumented) +module Gradient { + enum Flags { + Invert = 1, + // (undocumented) + None = 0, + Outline = 2 + } + + class KeyColor implements KeyColorProps { + // WARNING: The type "KeyColorProps" needs to be exported by the package (e.g. added to index.ts) + constructor(json: KeyColorProps); + // (undocumented) + color: ColorDef; + // (undocumented) + value: number; + } + + interface KeyColorProps { + color: ColorDefProps; + value: number; + } + + enum Mode { + // (undocumented) + Curved = 2, + // (undocumented) + Cylindrical = 3, + // (undocumented) + Hemispherical = 5, + // (undocumented) + Linear = 1, + // (undocumented) + None = 0, + // (undocumented) + Spherical = 4, + // (undocumented) + Thematic = 6 + } + + class Symb implements SymbProps { + // (undocumented) + angle?: Angle; + // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + clone(): Symb; + // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) + compare(other: Symb): number; + // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) + static compareSymb(lhs: Gradient.Symb, rhs: Gradient.Symb): number; + // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static createThematic(settings: ThematicSettings): Symb; + // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) + equals(other: Symb): boolean; + // WARNING: The type "Flags" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + flags: Flags; + // WARNING: The type "SymbProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Symb" needs to be exported by the package (e.g. added to index.ts) + static fromJSON(json?: SymbProps): Symb; + getImage(width: number, height: number): ImageBuffer; + // (undocumented) + readonly hasTranslucency: boolean; + readonly isOutlined: boolean; + // WARNING: The type "KeyColor" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + keys: KeyColor[]; + // WARNING: The type "Mode" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + mode: Mode; + // (undocumented) + shift: number; + // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + thematicSettings?: ThematicSettings; + // (undocumented) + tint?: number; + } + + interface SymbProps { + angle?: AngleProps; + flags?: Flags; + keys: KeyColorProps[]; + mode: Mode; + shift?: number; + thematicSettings?: ThematicSettingsProps; + tint?: number; + } + + // (undocumented) + enum ThematicColorScheme { + // (undocumented) + BlueRed = 0, + // (undocumented) + Custom = 5, + // (undocumented) + Monochrome = 2, + // (undocumented) + RedBlue = 1, + // (undocumented) + SeaMountain = 4, + // (undocumented) + Topographic = 3 + } + + // (undocumented) + enum ThematicMode { + // (undocumented) + IsoLines = 3, + // (undocumented) + Smooth = 0, + // (undocumented) + Stepped = 1, + // (undocumented) + SteppedWithDelimiter = 2 + } + + class ThematicSettings implements ThematicSettingsProps { + // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + clone(out?: ThematicSettings): ThematicSettings; + // (undocumented) + colorScheme: number; + // (undocumented) + static readonly contentMax: number; + // (undocumented) + static readonly contentRange: number; + // WARNING: The type "ThematicSettingsProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + copyFrom(other: ThematicSettingsProps): void; + // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static defaults: ThematicSettings; + // WARNING: The type "ThematicSettingsProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "ThematicSettings" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static fromJSON(json: ThematicSettingsProps): ThematicSettings; + // (undocumented) + static readonly margin: number; + // (undocumented) + marginColor: ColorDef; + // WARNING: The type "ThematicMode" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + mode: ThematicMode; + // (undocumented) + range: Range1d; + // (undocumented) + rangeHigh: number; + // (undocumented) + rangeLow: number; + // (undocumented) + stepCount: number; + } + + // (undocumented) + interface ThematicSettingsProps { + // (undocumented) + colorScheme: number; + // (undocumented) + marginColor: ColorDefProps; + // (undocumented) + mode: ThematicMode; + // (undocumented) + rangeHigh: number; + // (undocumented) + rangeLow: number; + // (undocumented) + stepCount: number; + } + +} + +// @beta +class GraphicParams { + // (undocumented) + readonly fillColor: ColorDef; + // (undocumented) + fillFlags: FillFlags; + // (undocumented) + static fromBlankingFill(fillColor: ColorDef): GraphicParams; + // (undocumented) + static fromSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels?: LinePixels): GraphicParams; + // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + gradient?: Gradient.Symb; + // (undocumented) + readonly lineColor: ColorDef; + // (undocumented) + linePixels: LinePixels; + // (undocumented) + lineTexture?: RenderTexture; + // (undocumented) + material?: RenderMaterial; + // (undocumented) + rasterWidth: number; + setFillColor(fillColor: ColorDef): void; + // (undocumented) + setFillTransparency(transparency: number): void; + setLineColor(lineColor: ColorDef): void; + setLinePixels(code: LinePixels): void; + // (undocumented) + setLineTransparency(transparency: number): void; + // (undocumented) + trueWidthEnd: number; + // (undocumented) + trueWidthStart: number; +} + +// @public +class GroundPlane implements GroundPlaneProps { + constructor(ground?: GroundPlaneProps); + aboveColor: ColorDef; + belowColor: ColorDef; + display: boolean; + elevation: number; + // WARNING: The type "Gradient.Symb" needs to be exported by the package (e.g. added to index.ts) + getGroundPlaneGradient(aboveGround: boolean): Gradient.Symb; + // (undocumented) + toJSON(): GroundPlaneProps; +} + +// @public +interface GroundPlaneProps { + aboveColor?: ColorDefProps; + belowColor?: ColorDefProps; + display?: boolean; + elevation?: number; +} + +// @beta +module HiddenLine { + class Settings { + // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) + static defaults: Settings; + // WARNING: The type "SettingsProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Settings" needs to be exported by the package (e.g. added to index.ts) + static fromJSON(json?: SettingsProps): Settings; + // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) + readonly hidden: Style; + // WARNING: The type "SettingsProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + toJSON(): SettingsProps; + readonly transparencyThreshold: number; + // (undocumented) + readonly transThreshold: number; + // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) + readonly visible: Style; + } + + interface SettingsProps { + readonly hidden?: StyleProps; + readonly transThreshold?: number; + readonly visible?: StyleProps; + } + + class Style implements StyleProps { + readonly color?: ColorDef; + // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static defaults: Style; + // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) + equals(other: Style): boolean; + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static fromJSON(json?: StyleProps): Style; + // WARNING: The type "Style" needs to be exported by the package (e.g. added to index.ts) + overrideColor(color: ColorDef): Style; + // (undocumented) + readonly ovrColor: boolean; + readonly pattern?: LinePixels; + // WARNING: The type "StyleProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + toJSON(): StyleProps; + readonly width?: number; + } + + interface StyleProps { + readonly color?: ColorDefProps; + readonly ovrColor?: boolean; + readonly pattern?: LinePixels; + readonly width?: number; + } + +} + +// @public +module Hilite { + class Settings { + // WARNING: The type "Silhouette" needs to be exported by the package (e.g. added to index.ts) + constructor(color?: ColorDef, visibleRatio?: number, hiddenRatio?: number, silhouette?: Silhouette); + readonly color: ColorDef; + readonly hiddenRatio: number; + // WARNING: The type "Silhouette" needs to be exported by the package (e.g. added to index.ts) + silhouette: Silhouette; + readonly visibleRatio: number; + } + + enum Silhouette { + None = 0, + Thick = 2, + Thin = 1 + } + +} + +// @public +class HSLColor { + // (undocumented) + clone(): HSLColor; + // (undocumented) + static fromColorDef(val: ColorDef, out?: HSLColor): HSLColor; + // (undocumented) + h: number; + // (undocumented) + l: number; + // (undocumented) + s: number; + // (undocumented) + toColorDef(out?: ColorDef): ColorDef; +} + +// @public +class HSVColor { + // (undocumented) + adjustColor(darkenColor: boolean, delta: number): void; + // (undocumented) + clone(): HSVColor; + // (undocumented) + static fromColorDef(val: ColorDef, out?: HSVColor): HSVColor; + // (undocumented) + h: number; + // (undocumented) + s: number; + // (undocumented) + toColorDef(out?: ColorDef): ColorDef; + // (undocumented) + v: number; +} + +// @public +interface HttpServerRequest extends Readable { + // (undocumented) + body: string | Buffer; + // (undocumented) + connection: any; + // (undocumented) + destroy(error?: Error): void; + // (undocumented) + header: (field: string) => string | undefined; + // (undocumented) + headers: { + [header: string]: string | string[] | undefined; + } + // (undocumented) + httpVersion: string; + // (undocumented) + httpVersionMajor: number; + // (undocumented) + httpVersionMinor: number; + // (undocumented) + method: string; + // (undocumented) + path: string; + // (undocumented) + rawHeaders: string[]; + // (undocumented) + rawTrailers: string[]; + // (undocumented) + setTimeout(msecs: number, callback: () => void): this; + // (undocumented) + socket: any; + // (undocumented) + statusCode?: number; + // (undocumented) + statusMessage?: string; + // (undocumented) + trailers: { + [key: string]: string | undefined; + } + // (undocumented) + url?: string; +} + +// @public +interface HttpServerResponse extends Writable { + // (undocumented) + send(body?: any): HttpServerResponse; + // (undocumented) + set(field: string, value: string): void; + // (undocumented) + status(code: number): HttpServerResponse; +} + +// @public +class ImageBuffer { + protected constructor(data: Uint8Array, format: ImageBufferFormat, width: number); + // (undocumented) + protected static computeHeight(data: Uint8Array, format: ImageBufferFormat, width: number): number; + static create(data: Uint8Array, format: ImageBufferFormat, width: number): ImageBuffer | undefined; + readonly data: Uint8Array; + readonly format: ImageBufferFormat; + static getNumBytesPerPixel(format: ImageBufferFormat): number; + readonly height: number; + // (undocumented) + protected static isValidData(data: Uint8Array, format: ImageBufferFormat, width: number): boolean; + readonly numBytesPerPixel: number; + readonly width: number; +} + +// @public +enum ImageBufferFormat { + Alpha = 5, + Rgb = 2, + Rgba = 0 +} + +// @public (undocumented) +module ImageLight { + // (undocumented) + class Solar { + constructor(direction?: Vector3d, color?: ColorDef, intensity?: number); + // (undocumented) + color: ColorDef; + // (undocumented) + direction: Vector3d; + // (undocumented) + intensity: number; + } + +} + +// @public +class ImageSource { + constructor(data: Uint8Array, format: ImageSourceFormat); + readonly data: Uint8Array; + readonly format: ImageSourceFormat; +} + +// @public +enum ImageSourceFormat { + Jpeg = 0, + Png = 2 +} + +// @public +class IModel implements IModelProps { + protected constructor(iModelToken: IModelToken); + // (undocumented) + protected _token: IModelToken; + cartographicToSpatialFromEcef(cartographic: Cartographic, result?: Point3d): Point3d; + static readonly dictionaryId: Id64String; + readonly ecefLocation: EcefLocation | undefined; + ecefToSpatial(ecef: XYAndZ, result?: Point3d): Point3d; + static getDefaultSubCategoryId(categoryId: Id64String): Id64String; + getEcefTransform(): Transform; + readonly globalOrigin: Point3d; + readonly iModelToken: IModelToken; + // (undocumented) + protected initialize(name: string, props: IModelProps): void; + readonly isGeoLocated: boolean; + name: string; + projectExtents: AxisAlignedBox3d; + static readonly repositoryModelId: Id64String; + rootSubject: RootSubjectProps; + static readonly rootSubjectId: Id64String; + setEcefLocation(ecef: EcefLocationProps): void; + spatialToCartographicFromEcef(spatial: XYAndZ, result?: Cartographic): Cartographic; + spatialToEcef(spatial: XYAndZ, result?: Point3d): Point3d; + // (undocumented) + toJSON(): IModelProps; +} + +// @beta +interface IModelCoordinatesRequestProps { + // (undocumented) + geoCoords: XYZProps[]; + // (undocumented) + sourceDatum: string; +} + +// @beta (undocumented) +interface IModelCoordinatesResponseProps { + // (undocumented) + fromCache: number; + // (undocumented) + iModelCoords: PointWithStatus[]; +} + +// @public +class IModelError extends BentleyError { + constructor(errorNumber: number | IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | RepositoryStatus | ChangeSetStatus | RpcInterfaceStatus | AuthStatus, message: string, log?: LogFunction, category?: string, getMetaData?: GetMetaDataFunction); +} + +// @public +class IModelNotFoundResponse extends RpcNotFoundResponse { +} + +// @public +interface IModelProps { + ecefLocation?: EcefLocationProps; + globalOrigin?: XYZProps; + projectExtents?: Range3dProps; + rootSubject: RootSubjectProps; +} + +// @public +class IModelReadRpcInterface extends RpcInterface { + // (undocumented) + cancelSnap(_iModelToken: IModelToken, _sessionId: string): Promise; + // (undocumented) + close(_accessToken: AccessToken, _iModelToken: IModelToken): Promise; + // (undocumented) + getAllCodeSpecs(_iModelToken: IModelToken): Promise; + // (undocumented) + getClassHierarchy(_iModelToken: IModelToken, _startClassName: string): Promise; + static getClient(): IModelReadRpcInterface; + // (undocumented) + getDefaultViewId(_iModelToken: IModelToken): Promise; + // (undocumented) + getElementProps(_iModelToken: IModelToken, _elementIds: Id64Set): Promise; + // (undocumented) + getGeoCoordinatesFromIModelCoordinates(_iModelToken: IModelToken, _props: string): Promise; + // (undocumented) + getIModelCoordinatesFromGeoCoordinates(_iModelToken: IModelToken, _props: string): Promise; + // (undocumented) + getModelProps(_iModelToken: IModelToken, _modelIds: Id64Set): Promise; + // (undocumented) + getToolTipMessage(_iModelToken: IModelToken, _elementId: string): Promise; + // (undocumented) + getViewStateData(_iModelToken: IModelToken, _viewDefinitionId: string): Promise; + // (undocumented) + getViewThumbnail(_iModelToken: IModelToken, _viewId: string): Promise; + // (undocumented) + openForRead(_accessToken: AccessToken, _iModelToken: IModelToken): Promise; + // (undocumented) + queryElementProps(_iModelToken: IModelToken, _params: EntityQueryParams): Promise; + // (undocumented) + queryEntityIds(_iModelToken: IModelToken, _params: EntityQueryParams): Promise; + // (undocumented) + queryModelProps(_iModelToken: IModelToken, _params: EntityQueryParams): Promise; + // (undocumented) + queryModelRanges(_iModelToken: IModelToken, _modelIds: Id64Set): Promise; + // (undocumented) + queryPage(_iModelToken: IModelToken, _ecsql: string, _bindings?: any[] | object, _options?: PageOptions): Promise; + // (undocumented) + queryRowCount(_iModelToken: IModelToken, _ecsql: string, _bindings?: any[] | object): Promise; + // (undocumented) + readFontJson(_iModelToken: IModelToken): Promise; + // (undocumented) + requestSnap(_iModelToken: IModelToken, _sessionId: string, _props: SnapRequestProps): Promise; + static types: () => (typeof Point3d | typeof Vector3d | typeof Point2d | typeof IModelToken | typeof Code | typeof IModelNotFoundResponse | typeof AccessToken | typeof Vector2d)[]; + static version: string; +} + +// @public +enum IModelStatus { + // (undocumented) + AlreadyLoaded = 65537, + // (undocumented) + AlreadyOpen = 65538, + // (undocumented) + BadArg = 65539, + // (undocumented) + BadElement = 65540, + // (undocumented) + BadModel = 65541, + // (undocumented) + BadRequest = 65542, + // (undocumented) + BadSchema = 65543, + // (undocumented) + CannotUndo = 65544, + // (undocumented) + CodeNotReserved = 65545, + // (undocumented) + ConstraintNotUnique = 65601, + // (undocumented) + DeletionProhibited = 65546, + // (undocumented) + DuplicateCode = 65547, + // (undocumented) + DuplicateName = 65548, + // (undocumented) + ElementBlockedChange = 65549, + // (undocumented) + FileAlreadyExists = 65550, + // (undocumented) + FileNotFound = 65551, + // (undocumented) + FileNotLoaded = 65552, + // (undocumented) + ForeignKeyConstraint = 65553, + // (undocumented) + IdExists = 65554, + // (undocumented) + IMODEL_ERROR_BASE = 65536, + // (undocumented) + InDynamicTransaction = 65555, + // (undocumented) + InvalidCategory = 65556, + // (undocumented) + InvalidCode = 65557, + // (undocumented) + InvalidCodeSpec = 65558, + // (undocumented) + InvalidId = 65559, + // (undocumented) + InvalidName = 65560, + // (undocumented) + InvalidParent = 65561, + // (undocumented) + InvalidProfileVersion = 65562, + // (undocumented) + IsCreatingChangeSet = 65563, + // (undocumented) + LockNotHeld = 65564, + // (undocumented) + Mismatch2d3d = 65565, + // (undocumented) + MismatchGcs = 65566, + // (undocumented) + MissingDomain = 65567, + // (undocumented) + MissingHandler = 65568, + // (undocumented) + MissingId = 65569, + // (undocumented) + NoGeoLocation = 65602, + // (undocumented) + NoGeometry = 65570, + // (undocumented) + NoMultiTxnOperation = 65571, + // (undocumented) + NotDgnMarkupProject = 65572, + // (undocumented) + NotEnabled = 65573, + // (undocumented) + NotFound = 65574, + // (undocumented) + NothingToRedo = 65578, + // (undocumented) + NothingToUndo = 65579, + // (undocumented) + NotOpen = 65575, + // (undocumented) + NotOpenForWrite = 65576, + // (undocumented) + NotSameUnitBase = 65577, + // (undocumented) + ParentBlockedChange = 65580, + // (undocumented) + ReadError = 65581, + // (undocumented) + ReadOnly = 65582, + // (undocumented) + ReadOnlyDomain = 65583, + // (undocumented) + RepositoryManagerError = 65584, + // (undocumented) + SQLiteError = 65585, + // (undocumented) + Success = 0, + // (undocumented) + TransactionActive = 65586, + // (undocumented) + UnitsMissing = 65587, + // (undocumented) + UnknownFormat = 65588, + // (undocumented) + UpgradeFailed = 65589, + // (undocumented) + ValidationFailed = 65590, + // (undocumented) + VersionTooNew = 65591, + // (undocumented) + VersionTooOld = 65592, + // (undocumented) + ViewNotFound = 65593, + // (undocumented) + WriteError = 65594, + // (undocumented) + WrongClass = 65595, + // (undocumented) + WrongDomain = 65597, + // (undocumented) + WrongElement = 65598, + // (undocumented) + WrongHandler = 65599, + // (undocumented) + WrongIModel = 65596, + // (undocumented) + WrongModel = 65600 +} + +// @public (undocumented) +class IModelTileRpcInterface extends RpcInterface { + // (undocumented) + static getClient(): IModelTileRpcInterface; + // (undocumented) + getTileContent(_iModelToken: IModelToken, _treeId: string, _contentId: string): Promise; + // (undocumented) + getTileTreeProps(_iModelToken: IModelToken, _id: string): Promise; + // (undocumented) + requestTileContent(_iModelToken: IModelToken, _treeId: string, _contentId: string): Promise; + // (undocumented) + requestTileTreeProps(_iModelToken: IModelToken, _id: string): Promise; + // (undocumented) + static types: () => (typeof IModelToken)[]; + static version: string; +} + +// @public +class IModelToken { + constructor( + key?: string | undefined, + contextId?: string | undefined, + iModelId?: string | undefined, + changeSetId?: string | undefined, + openMode?: OpenMode | undefined); + changeSetId?: string | undefined; + readonly contextId?: string | undefined; + readonly iModelId?: string | undefined; + readonly key?: string | undefined; + openMode?: OpenMode | undefined; +} + +// @public +class IModelVersion { + static asOfChangeSet(changeSetId: string): IModelVersion; + evaluateChangeSet(alctx: ActivityLoggingContext, accessToken: AccessToken, iModelId: string, imodelClient: IModelClient): Promise; + static first(): IModelVersion; + static fromJson(jsonObj: any): IModelVersion; + getAsOfChangeSet(): string | undefined; + getName(): string | undefined; + readonly isFirst: boolean; + readonly isLatest: boolean; + static latest(): IModelVersion; + static named(versionName: string): IModelVersion; +} + +// @alpha +class IModelWriteRpcInterface extends RpcInterface { + static getClient(): IModelWriteRpcInterface; + // (undocumented) + openForWrite(_accessToken: AccessToken, _iModelToken: IModelToken): Promise; + // (undocumented) + saveChanges(_iModelToken: IModelToken, _description?: string): Promise; + // (undocumented) + saveThumbnail(_iModelToken: IModelToken, _val: Uint8Array): Promise; + static types: () => (typeof Point3d | typeof Range3d | typeof IModelToken | typeof IModelNotFoundResponse | typeof AccessToken)[]; + // (undocumented) + updateProjectExtents(_iModelToken: IModelToken, _newExtents: AxisAlignedBox3d): Promise; + static version: string; +} + +// @public +interface InformationPartitionElementProps extends DefinitionElementProps { + // (undocumented) + description?: string; +} + +// @public +export function isPowerOfTwo(num: number): boolean; + +// @public (undocumented) +export function isValidImageSourceFormat(format: ImageSourceFormat): boolean; + +// @public (undocumented) +interface LatAndLong { + // (undocumented) + latitude: number; + // (undocumented) + longitude: number; +} + +// @public (undocumented) +interface LatLongAndHeight extends LatAndLong { + // (undocumented) + height: number; +} + +// @public +class Light { + constructor(opts?: LightProps); + // (undocumented) + bulbs: number; + // (undocumented) + color: ColorDef; + // (undocumented) + color2?: ColorDef; + // (undocumented) + intensity: number; + // (undocumented) + intensity2?: number; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + readonly isVisible: boolean; + // (undocumented) + kelvin: number; + // (undocumented) + lightType: LightType; + // (undocumented) + lumens: number; + // (undocumented) + shadows: number; +} + +// @beta +interface LightLocationProps extends GeometricElement3dProps { + // (undocumented) + enabled?: boolean; +} + +// @public +interface LightProps { + // (undocumented) + bulbs?: number; + // (undocumented) + color?: ColorDefProps; + // (undocumented) + color2?: ColorDefProps; + // (undocumented) + intensity?: number; + // (undocumented) + intensity2?: number; + // (undocumented) + kelvin?: number; + // (undocumented) + lightType?: LightType; + // (undocumented) + lumens?: number; + // (undocumented) + shadows?: number; +} + +// @public +enum LightType { + // (undocumented) + Ambient = 2, + // (undocumented) + Area = 7, + // (undocumented) + Distant = 8, + // (undocumented) + Flash = 3, + // (undocumented) + Invalid = 0, + // (undocumented) + Point = 5, + // (undocumented) + Portrait = 4, + // (undocumented) + SkyOpening = 9, + // (undocumented) + Solar = 1, + // (undocumented) + Spot = 6 +} + +// @public +enum LinePixels { + // (undocumented) + Code0 = 0, + // (undocumented) + Code1 = 2155905152, + // (undocumented) + Code2 = 4177066232, + // (undocumented) + Code3 = 4292935648, + // (undocumented) + Code4 = 4262526480, + // (undocumented) + Code5 = 3772834016, + // (undocumented) + Code6 = 4169726088, + // (undocumented) + Code7 = 4279828248, + // (undocumented) + HiddenLine = 3435973836, + // (undocumented) + Invalid = -1, + // (undocumented) + Invisible = 1, + // (undocumented) + Solid = 0 +} + +// @public (undocumented) +module LineStyle { + class Info { + // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) + constructor(styleId: Id64String, styleMod?: Modifier); + // WARNING: The type "Info" needs to be exported by the package (e.g. added to index.ts) + clone(): Info; + // WARNING: The type "Info" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + equals(other: Info): boolean; + // (undocumented) + styleId: Id64String; + // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + styleMod?: Modifier; + } + + class Modifier implements ModifierProps { + // WARNING: The type "ModifierProps" needs to be exported by the package (e.g. added to index.ts) + constructor(props: ModifierProps); + // (undocumented) + applyTransform(transform: Transform): boolean; + // (undocumented) + centerPhase?: boolean; + // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) + clone(): Modifier; + // (undocumented) + dashScale?: number; + // (undocumented) + distPhase?: number; + // (undocumented) + endWidth?: number; + // WARNING: The type "Modifier" needs to be exported by the package (e.g. added to index.ts) + equals(other: Modifier): boolean; + // (undocumented) + fractPhase?: number; + // (undocumented) + gapScale?: number; + // (undocumented) + normal?: Vector3d; + // (undocumented) + physicalWidth?: boolean; + // (undocumented) + rotation?: YawPitchRollAngles; + // (undocumented) + scale?: number; + // (undocumented) + segmentMode?: boolean; + // (undocumented) + startWidth?: number; + } + + interface ModifierProps { + centerPhase?: boolean; + dashScale?: number; + distPhase?: number; + endWidth?: number; + fractPhase?: number; + gapScale?: number; + normal?: XYZProps; + physicalWidth?: boolean; + rotation?: YawPitchRollProps; + scale?: number; + segmentMode?: boolean; + startWidth?: number; + } + +} + +// @beta +interface LineStyleProps extends ElementProps { + // (undocumented) + data: string; + // (undocumented) + description?: string; +} + +// @public (undocumented) +module MarshalingBinaryMarker { + // (undocumented) + function createDefault(): MarshalingBinaryMarker; + +} + +// @public +interface MaterialProps { + materialId?: Id64String; + // (undocumented) + origin?: XYZProps; + // (undocumented) + rotation?: YawPitchRollProps; + // (undocumented) + size?: XYZProps; +} + +// @public (undocumented) +class MeshEdge { + constructor(index0?: number, index1?: number); + // (undocumented) + indices: number[]; +} + +// @public (undocumented) +class MeshEdges { + constructor(); + // (undocumented) + polylines: MeshPolylineList; + // (undocumented) + silhouette: MeshEdge[]; + // (undocumented) + silhouetteNormals: OctEncodedNormalPair[]; + // (undocumented) + visible: MeshEdge[]; +} + +// @public (undocumented) +class MeshPolyline { + constructor(indices?: number[]); + // (undocumented) + addIndex(index: number): void; + // (undocumented) + clear(): void; + // (undocumented) + readonly indices: number[]; +} + +// @public (undocumented) +class MeshPolylineList extends Array { + constructor(...args: MeshPolyline[]); +} + +// @public +class MobileRpcConfiguration extends RpcConfiguration { + static readonly isIOSFrontend: any; + static readonly isMobileBackend: boolean; + static readonly isMobileFrontend: boolean; + static readonly platform: RpcMobilePlatform; + // WARNING: The type "MobileRpcProtocol" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protocol: MobileRpcProtocol; +} + +// @public +class MobileRpcManager { + static initializeClient(interfaces: RpcInterfaceDefinition[]): MobileRpcConfiguration; + static initializeImpl(interfaces: RpcInterfaceDefinition[]): MobileRpcConfiguration; +} + +// @public +interface ModelProps extends EntityProps { + // (undocumented) + isPrivate?: boolean; + // (undocumented) + isTemplate?: boolean; + // (undocumented) + jsonProperties?: any; + // (undocumented) + modeledElement: RelatedElementProps; + // (undocumented) + name?: string; + // (undocumented) + parentModel?: Id64String; +} + +// @alpha +interface ModelQueryParams extends EntityQueryParams { + // (undocumented) + wantPrivate?: boolean; + // (undocumented) + wantTemplate?: boolean; +} + +// @public +interface ModelSelectorProps extends DefinitionElementProps { + // (undocumented) + models: Id64Array; +} + +// @public +interface NavigationBindingValue { + id: Id64String; + relClassName?: string; + relClassTableSpace?: string; +} + +// @public +interface NavigationValue { + id: Id64String; + relClassName?: string; +} + +// @public +export function nextHighestPowerOfTwo(num: number): number; + +// @public (undocumented) +class NonUniformColor { + constructor(colors: Uint32Array, indices: number[], hasAlpha: boolean); + // (undocumented) + readonly colors: Uint32Array; + // (undocumented) + readonly indices: Uint16Array; + // (undocumented) + readonly isOpaque: boolean; +} + +// @public +enum Npc { + _000 = 0, + _001 = 4, + _010 = 2, + _011 = 6, + _100 = 1, + _101 = 5, + _110 = 3, + _111 = 7, + CORNER_COUNT = 8, + // (undocumented) + LeftBottomFront = 4, + // (undocumented) + LeftBottomRear = 0, + // (undocumented) + LeftTopFront = 6, + // (undocumented) + LeftTopRear = 2, + // (undocumented) + RightBottomFront = 5, + // (undocumented) + RightBottomRear = 1, + // (undocumented) + RightTopFront = 7, + // (undocumented) + RightTopRear = 3 +} + +// @public (undocumented) +class OctEncodedNormal { + constructor(val: number); + // (undocumented) + decode(): Vector3d | undefined; + // (undocumented) + static fromVector(val: XYAndZ): OctEncodedNormal; + // (undocumented) + readonly value: number; +} + +// @public (undocumented) +class OctEncodedNormalPair { + constructor(first: OctEncodedNormal, second: OctEncodedNormal); + // (undocumented) + first: OctEncodedNormal; + // (undocumented) + second: OctEncodedNormal; +} + +// @public (undocumented) +interface PageableECSql { + query(ecsql: string, bindings?: any[] | object, options?: PageOptions): AsyncIterableIterator; + queryPage(ecsql: string, bindings?: any[] | object, options?: PageOptions): Promise; + queryRowCount(ecsql: string, bindings?: any[] | object): Promise; +} + +// @public +interface PageOptions { + retries?: number; + size?: number; + start?: number; +} + +// @public +class Placement2d implements Placement2dProps { + constructor(origin: Point2d, angle: Angle, bbox: ElementAlignedBox2d); + // (undocumented) + angle: Angle; + // (undocumented) + bbox: ElementAlignedBox2d; + calculateRange(): AxisAlignedBox3d; + static fromJSON(json?: Placement2dProps): Placement2d; + getWorldCorners(out?: Frustum): Frustum; + readonly isValid: boolean; + // (undocumented) + origin: Point2d; + readonly rotation: Matrix3d; + setFrom(other: Placement2d): void; + readonly transform: Transform; +} + +// @public +interface Placement2dProps { + // (undocumented) + angle: AngleProps; + // (undocumented) + bbox?: LowAndHighXY; + // (undocumented) + origin: XYProps; +} + +// @public +class Placement3d implements Placement3dProps { + constructor(origin: Point3d, angles: YawPitchRollAngles, bbox: ElementAlignedBox3d); + // (undocumented) + angles: YawPitchRollAngles; + // (undocumented) + bbox: ElementAlignedBox3d; + calculateRange(): AxisAlignedBox3d; + static fromJSON(json?: Placement3dProps): Placement3d; + getWorldCorners(out?: Frustum): Frustum; + readonly isValid: boolean; + // (undocumented) + origin: Point3d; + readonly rotation: Matrix3d; + setFrom(other: Placement3d): void; + readonly transform: Transform; +} + +// @public +interface Placement3dProps { + // (undocumented) + angles: YawPitchRollProps; + // (undocumented) + bbox?: LowAndHighXYZ; + // (undocumented) + origin: XYZProps; +} + +// @beta +interface PointWithStatus { + // (undocumented) + p: XYZProps; + // (undocumented) + s: GeoCoordStatus; +} + +// @public (undocumented) +class PolylineData { + constructor(vertIndices?: number[], numIndices?: number); + // (undocumented) + init(polyline: MeshPolyline): boolean; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + numIndices: number; + // (undocumented) + reset(): void; + // (undocumented) + vertIndices: number[]; +} + +// @public (undocumented) +class PolylineEdgeArgs { + constructor(lines?: PolylineData[]); + // (undocumented) + clear(): void; + // (undocumented) + init(lines?: PolylineData[]): boolean; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + lines?: PolylineData[]; + // (undocumented) + readonly numLines: number; +} + +// @public +class PolylineFlags { + constructor(is2d?: boolean, isPlanar?: boolean, isDisjoint?: boolean, type?: PolylineTypeFlags); + // (undocumented) + clone(): PolylineFlags; + // (undocumented) + equals(other: PolylineFlags): boolean; + // (undocumented) + initDefaults(): void; + // (undocumented) + is2d: boolean; + // (undocumented) + readonly isAnyEdge: boolean; + // (undocumented) + isDisjoint: boolean; + // (undocumented) + readonly isNormalEdge: boolean; + // (undocumented) + readonly isOutlineEdge: boolean; + // (undocumented) + isPlanar: boolean; + pack(): number; + // (undocumented) + setIsNormalEdge(): void; + // (undocumented) + setIsOutlineEdge(): void; + // (undocumented) + type: PolylineTypeFlags; + static unpack(value: number): PolylineFlags; +} + +// @public (undocumented) +enum PolylineTypeFlags { + // (undocumented) + Edge = 1, + // (undocumented) + Normal = 0, + // (undocumented) + Outline = 2 +} + +// @beta +enum PrimitiveTypeCode { + // (undocumented) + Binary = 257, + // (undocumented) + Boolean = 513, + // (undocumented) + DateTime = 769, + // (undocumented) + Double = 1025, + // (undocumented) + Integer = 1281, + // (undocumented) + Long = 1537, + // (undocumented) + Point2d = 1793, + // (undocumented) + Point3d = 2049, + // (undocumented) + String = 2305, + // (undocumented) + Uninitialized = 0 +} + +// @beta +class PropertyMetaData implements PropertyMetaDataProps { + constructor(jsonObj: PropertyMetaDataProps); + createProperty(jsonObj: any): any; + // (undocumented) + customAttributes?: CustomAttribute[]; + // (undocumented) + description?: string; + // (undocumented) + direction?: string; + // (undocumented) + displayLabel?: string; + // (undocumented) + extendedType?: string; + // (undocumented) + isCustomHandled?: boolean; + // (undocumented) + isCustomHandledOrphan?: boolean; + // (undocumented) + kindOfQuantity?: string; + // (undocumented) + maximumLength?: number; + // (undocumented) + maximumValue?: any; + // (undocumented) + maxOccurs?: number; + // (undocumented) + minimumLength?: number; + // (undocumented) + minimumValue?: any; + // (undocumented) + minOccurs?: number; + // (undocumented) + primitiveType?: PrimitiveTypeCode; + // (undocumented) + readOnly?: boolean; + // (undocumented) + relationshipClass?: string; + // (undocumented) + structName?: string; +} + +// @beta (undocumented) +interface PropertyMetaDataProps { + // (undocumented) + customAttributes?: CustomAttribute[]; + // (undocumented) + description?: string; + // (undocumented) + direction?: string; + // (undocumented) + displayLabel?: string; + // (undocumented) + extendedType?: string; + // (undocumented) + isCustomHandled?: boolean; + // (undocumented) + isCustomHandledOrphan?: boolean; + // (undocumented) + kindOfQuantity?: string; + // (undocumented) + maximumLength?: number; + // (undocumented) + maximumValue?: any; + // (undocumented) + maxOccurs?: number; + // (undocumented) + minimumLength?: number; + // (undocumented) + minimumValue?: any; + // (undocumented) + minOccurs?: number; + // (undocumented) + primitiveType?: number; + // (undocumented) + readOnly?: boolean; + // (undocumented) + relationshipClass?: string; + // (undocumented) + structName?: string; +} + +// @public +class QParams2d { + // (undocumented) + clone(out?: QParams2d): QParams2d; + // (undocumented) + copyFrom(src: QParams2d): void; + static fromNormalizedRange(): QParams2d; + static fromRange(range: Range2d, out?: QParams2d): QParams2d; + static fromZeroToOne(): QParams2d; + // (undocumented) + readonly origin: Point2d; + // (undocumented) + readonly scale: Point2d; + setFromRange(range: Range2d): void; +} + +// @public +class QParams3d { + // (undocumented) + clone(out?: QParams3d): QParams3d; + // (undocumented) + copyFrom(src: QParams3d): void; + static fromNormalizedRange(): QParams3d; + static fromOriginAndScale(origin: Point3d, scale: Point3d, out?: QParams3d): QParams3d; + static fromRange(range: Range3d, out?: QParams3d): QParams3d; + static fromZeroToOne(): QParams3d; + // (undocumented) + readonly origin: Point3d; + // (undocumented) + readonly scale: Point3d; + setFromOriginAndScale(origin: Point3d, scale: Point3d): void; + setFromRange(range: Range3d): void; +} + +// @public +class QPoint2d { + constructor(); + // (undocumented) + clone(out?: QPoint2d): QPoint2d; + // (undocumented) + copyFrom(src: QPoint2d): void; + static create(pos: Point2d, params: QParams2d): QPoint2d; + static fromScalars(x: number, y: number): QPoint2d; + init(pos: Point2d, params: QParams2d): void; + setFromScalars(x: number, y: number): void; + unquantize(params: QParams2d, out?: Point2d): Point2d; + // (undocumented) + x: number; + // (undocumented) + y: number; +} + +// @public +class QPoint2dList { + constructor(params: QParams2d); + add(pt: Point2d): void; + clear(): void; + static fromPoints(points: Point2d[], out?: QPoint2dList): QPoint2dList; + readonly length: number; + // (undocumented) + readonly params: QParams2d; + push(qpt: QPoint2d): void; + requantize(params: QParams2d): void; + reset(params: QParams2d): void; + toTypedArray(): Uint16Array; + unquantize(index: number, out?: Point2d): Point2d; +} + +// @public +class QPoint3d { + // (undocumented) + clone(out?: QPoint3d): QPoint3d; + // (undocumented) + compare(rhs: QPoint3d): number; + // (undocumented) + copyFrom(src: QPoint3d): void; + static create(pos: Point3d, params: QParams3d): QPoint3d; + // (undocumented) + equals(other: QPoint3d): boolean; + static fromScalars(x: number, y: number, z: number, out?: QPoint3d): QPoint3d; + init(pos: Point3d, params: QParams3d): void; + setFromScalars(x: number, y: number, z: number): void; + unquantize(params: QParams3d, out?: Point3d): Point3d; + // (undocumented) + x: number; + // (undocumented) + y: number; + // (undocumented) + z: number; +} + +// @public +class QPoint3dList { + // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores + // (undocumented) + __@iterator: { + next: () => IteratorResult; + } + constructor(paramsIn?: QParams3d); + add(pt: Point3d): void; + clear(): void; + // (undocumented) + static createFrom(points: Point3d[], params: QParams3d): QPoint3dList; + static fromPoints(points: Point3d[], out?: QPoint3dList): QPoint3dList; + readonly length: number; + // (undocumented) + readonly list: QPoint3d[]; + // (undocumented) + readonly params: QParams3d; + push(qpt: QPoint3d): void; + requantize(params: QParams3d): void; + reset(params: QParams3d): void; + toTypedArray(): Uint16Array; + unquantize(index: number, out?: Point3d): Point3d; +} + +// @public +module Quantization { + // (undocumented) + function computeScale(extent: number): number; + + // (undocumented) + function isInRange(qpos: number): boolean; + + // (undocumented) + function isQuantizable(pos: number, origin: number, scale: number): boolean; + + // (undocumented) + function isQuantized(qpos: number): boolean; + + // (undocumented) + function quantize(pos: number, origin: number, scale: number): number; + + // (undocumented) + function unquantize(qpos: number, origin: number, scale: number): number; + +} + +// @public +enum Rank { + Application = 2, + Domain = 1, + System = 0, + User = 3 +} + +// @public (undocumented) +interface ReadableFormData extends Readable { + // (undocumented) + getHeaders: { + [key: string]: any; + } +} + +// @public +class RelatedElement implements RelatedElementProps { + constructor(props: RelatedElementProps); + // (undocumented) + static fromJSON(json?: RelatedElementProps): RelatedElement | undefined; + readonly id: Id64String; + static idFromJson(json: any): Id64String; + readonly relClassName?: string; +} + +// @public +interface RelatedElementProps { + id: Id64String; + relClassName?: string; +} + +// @beta +class RenderMaterial { +} + +// @beta +interface RenderMaterialProps extends DefinitionElementProps { + description?: string; + // (undocumented) + jsonProperties?: { + materialAssets?: { + renderMaterial?: { + color?: RgbFactorProps; + diffuse?: number; + finish?: number; + HasBaseColor?: boolean; + HasDiffuse?: boolean; + HasFinish?: boolean; + HasReflect?: boolean; + HasReflectColor?: boolean; + HasSpecular?: boolean; + HasSpecularColor?: boolean; + HasTransmit?: boolean; + Map?: { + Pattern?: TextureMapProps; + } + reflect?: number; + reflect_color?: RgbFactorProps; + specular?: number; + specular_color?: RgbFactorProps; + transmit?: number; + } + } + } + paletteName: string; +} + +// @public +enum RenderMode { + HiddenLine = 3, + SmoothShade = 6, + SolidFill = 4, + Wireframe = 0 +} + +// @beta +module RenderSchedule { + // (undocumented) + interface ColorEntryProps extends TimelineEntryProps { + // (undocumented) + value: { + blue: number; + green: number; + red: number; + } + } + + // (undocumented) + interface CuttingPlaneEntryProps extends TimelineEntryProps { + // (undocumented) + value: CuttingPlaneProps; + } + + // (undocumented) + interface CuttingPlaneProps { + // (undocumented) + direction: number[]; + // (undocumented) + hidden?: boolean; + // (undocumented) + position: number[]; + // (undocumented) + visible?: boolean; + } + + // (undocumented) + interface ElementTimelineProps { + // (undocumented) + batchId: number; + // (undocumented) + colorTimeline?: ColorEntryProps[]; + // (undocumented) + cuttingPlaneTimeline?: CuttingPlaneEntryProps[]; + // (undocumented) + elementIds: Id64String[]; + // (undocumented) + transformTimeline?: TransformEntryProps[]; + // (undocumented) + visibilityTimeline?: VisibilityEntryProps[]; + } + + // (undocumented) + interface ModelTimelineProps { + // (undocumented) + elementTimelines: ElementTimelineProps[]; + // (undocumented) + modelId: Id64String; + } + + // (undocumented) + interface TimelineEntryProps { + // (undocumented) + interpolation: number; + // (undocumented) + time: number; + } + + // (undocumented) + interface TransformEntryProps extends TimelineEntryProps { + // (undocumented) + value: TransformProps; + } + + // (undocumented) + interface TransformProps { + // (undocumented) + orientation: number[]; + // (undocumented) + pivot: number[]; + // (undocumented) + position: number[]; + // (undocumented) + transform: number[][]; + } + + // (undocumented) + interface VisibilityEntryProps extends TimelineEntryProps { + // (undocumented) + value: number; + } + +} + +// @beta +class RenderTexture { +} + +// @beta +enum RepositoryStatus { + CannotCreateChangeSet = 86023, + ChangeSetRequired = 86025, + CodeNotReserved = 86027, + CodeUnavailable = 86026, + CodeUsed = 86028, + InvalidRequest = 86024, + InvalidResponse = 86020, + LockAlreadyHeld = 86018, + LockNotHeld = 86029, + LockUsed = 86022, + PendingTransactions = 86021, + RepositoryIsLocked = 86030, + ServerUnavailable = 86017, + // (undocumented) + Success = 0, + SyncError = 86019 +} + +// @public +class RgbColor { + constructor(r: number, g: number, b: number); + // (undocumented) + readonly b: number; + // (undocumented) + equals(other: RgbColor): boolean; + static fromColorDef(colorDef: ColorDef): RgbColor; + // (undocumented) + readonly g: number; + // (undocumented) + readonly r: number; +} + +// @alpha +interface RootSubjectProps { + description?: string; + name: string; +} + +// @public +class RpcConfiguration { + applicationAuthorizationKey: string; + applicationAuthorizationValue: string; + applicationVersionKey: string; + static applicationVersionValue: string; + static assign(definition: RpcInterfaceDefinition, supplier: RpcConfigurationSupplier): void; + readonly controlChannel: RpcControlChannel; + static developmentMode: boolean; + static initializeInterfaces(configuration: RpcConfiguration): void; + readonly interfaces: () => RpcInterfaceDefinition[]; + static obtain(configurationConstructor: { + new (): T; + }): T; + // (undocumented) + onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void; + // (undocumented) + onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void; + // (undocumented) + onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void; + // (undocumented) + onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void; + pendingOperationRetryInterval: number; + readonly protocol: RpcProtocol; + static strictMode: boolean; + // (undocumented) + static supply(definition: RpcInterface): RpcConfiguration; +} + +// @public +enum RpcContentType { + // (undocumented) + Binary = 2, + // (undocumented) + Multipart = 3, + // (undocumented) + Text = 1, + // (undocumented) + Unknown = 0 +} + +// @public +class RpcControlChannel { + // (undocumented) + static channels: RpcControlChannel[]; + // (undocumented) + describeEndpoints(): Promise; + // (undocumented) + handleUnknownOperation(invocation: RpcInvocation, _error: any): boolean; + // (undocumented) + initialize(): void; + // (undocumented) + static obtain(configuration: RpcConfiguration): RpcControlChannel; +} + +// @public +class RpcControlResponse { +} + +// @public (undocumented) +class RpcDefaultConfiguration extends RpcConfiguration { + // (undocumented) + applicationAuthorizationKey: string; + // (undocumented) + applicationAuthorizationValue: string; + // (undocumented) + interfaces: () => never[]; + // (undocumented) + protocol: RpcProtocol; +} + +// @public (undocumented) +class RpcDirectProtocol extends RpcProtocol { + // (undocumented) + readonly requestType: typeof RpcDirectRequest; +} + +// @public (undocumented) +class RpcDirectRequest extends RpcRequest { + // (undocumented) + fulfillment: RpcRequestFulfillment | undefined; + // (undocumented) + headers: Map; + // (undocumented) + protected load(): Promise; + // (undocumented) + protected send(): Promise; + // (undocumented) + protected setHeader(name: string, value: string): void; +} + +// @public +enum RpcEndpoint { + // (undocumented) + Backend = 1, + // (undocumented) + Frontend = 0 +} + +// @public +class RpcInterface { + readonly configuration: RpcConfiguration; + // (undocumented) + configurationSupplier: RpcConfigurationSupplier | undefined; + forward(parameters: IArguments): Promise; + static isVersionCompatible(backend: string, frontend: string): boolean; +} + +// @public (undocumented) +interface RpcInterfaceDefinition { + // (undocumented) + name: string; + // (undocumented) + prototype: T; + // (undocumented) + types: () => Function[]; + // (undocumented) + version: string; +} + +// @public +interface RpcInterfaceEndpoints { + // (undocumented) + compatible: boolean; + // (undocumented) + interfaceName: string; + // (undocumented) + interfaceVersion: string; + // (undocumented) + operationNames: string[]; +} + +// @beta +enum RpcInterfaceStatus { + IncompatibleVersion = 135168, + // (undocumented) + RPC_INTERFACE_ERROR_BASE = 135168, + // (undocumented) + Success = 0 +} + +// @public +class RpcInvocation { + constructor(protocol: RpcProtocol, request: SerializedRpcRequest); + static current(rpcImpl: RpcInterface): RpcInvocation; + readonly elapsed: number; + readonly fulfillment: Promise; + readonly operation: RpcOperation; + readonly protocol: RpcProtocol; + readonly request: SerializedRpcRequest; + readonly result: Promise; + readonly status: RpcRequestStatus; +} + +// @public +class RpcManager { + static describeAvailableEndpoints(): Promise; + static getClientForInterface(definition: RpcInterfaceDefinition): T; + static initializeInterface(definition: RpcInterfaceDefinition): void; + static registerImpl(definition: RpcInterfaceDefinition, implementation: RpcInterfaceImplementation): void; + static supplyImplInstance(definition: RpcInterfaceDefinition, instance: TImplementation): void; + static terminateInterface(definition: RpcInterfaceDefinition): void; + static unregisterImpl(definition: RpcInterfaceDefinition): void; +} + +// @public (undocumented) +class RpcMarshaling { + static deserialize(_operation: RpcOperation, protocol: RpcProtocol | undefined, value: RpcSerializedValue): any; + static serialize(operation: RpcOperation | string, protocol: RpcProtocol | undefined, value: any): RpcSerializedValue; +} + +// @public +enum RpcMarshalingDirective { + // (undocumented) + Binary = "__binary__", + // (undocumented) + Error = "__error__", + // (undocumented) + ErrorMessage = "__error_message__", + // (undocumented) + ErrorName = "__error_name__", + // (undocumented) + ErrorStack = "__error_stack__", + // (undocumented) + JSON = "__JSON__", + // (undocumented) + Map = "__map__", + // (undocumented) + Name = "__name__", + // (undocumented) + Set = "__set__", + // (undocumented) + Undefined = "__undefined__", + // (undocumented) + Unregistered = "__unregistered__" +} + +// @public +enum RpcMobilePlatform { + // (undocumented) + Android = 2, + // (undocumented) + iOS = 3, + // (undocumented) + Unknown = 0, + // (undocumented) + Window = 1 +} + +// @public +class RpcMultipart { + static createForm(value: RpcSerializedValue): FormData; + static createStream(_value: RpcSerializedValue): ReadableFormData; + static parseRequest(_req: HttpServerRequest): Promise; + // (undocumented) + static writeValueToForm(form: FormDataCommon, value: RpcSerializedValue): void; +} + +// @public +class RpcNotFoundResponse extends RpcControlResponse { +} + +// @public (undocumented) +class RpcOperation { +} + +// @public +class RpcOperationPolicy { + allowResponseCaching: RpcResponseCachingCallback_T; + invocationCallback: RpcInvocationCallback_T; + requestCallback: RpcRequestCallback_T; + requestId: RpcRequestIdSupplier_T; + retryInterval: RpcRequestInitialRetryIntervalSupplier_T; + sentCallback: RpcRequestCallback_T; + token: RpcRequestTokenSupplier_T; +} + +// @public +interface RpcOperationsProfile { + // (undocumented) + readonly lastRequest: number; + // (undocumented) + readonly lastResponse: number; +} + +// @public +class RpcPendingQueue { + // (undocumented) + static initialize(): void; + // (undocumented) + static instance: RpcPendingQueue; +} + +// @public +class RpcPendingResponse extends RpcControlResponse { + constructor(message?: string); + message: string; +} + +// @public +class RpcProtocol { + constructor(configuration: RpcConfiguration); + readonly authorizationHeaderName: string; + readonly configuration: RpcConfiguration; + static readonly events: BeEvent; + fulfill(request: SerializedRpcRequest): Promise; + getCode(status: RpcRequestStatus): number; + getOperationFromPath(path: string): SerializedRpcOperation; + getStatus(code: number): RpcRequestStatus; + readonly invocationType: typeof RpcInvocation; + // (undocumented) + onRpcClientInitialized(_definition: RpcInterfaceDefinition, _client: RpcInterface): void; + // (undocumented) + onRpcClientTerminated(_definition: RpcInterfaceDefinition, _client: RpcInterface): void; + // (undocumented) + onRpcImplInitialized(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void; + // (undocumented) + onRpcImplTerminated(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void; + requestIdHeaderName: string; + readonly requestType: typeof RpcRequest; + serialize(request: RpcRequest): SerializedRpcRequest; + supplyPathForOperation(operation: RpcOperation, _request: RpcRequest | undefined): string; + transferChunkThreshold: number; + readonly versionHeaderName: string; +} + +// @public +enum RpcProtocolEvent { + // (undocumented) + BackendErrorOccurred = 11, + // (undocumented) + BackendErrorReceived = 5, + // (undocumented) + BackendReportedNotFound = 10, + // (undocumented) + BackendReportedPending = 9, + // (undocumented) + BackendResponseCreated = 8, + // (undocumented) + ConnectionAborted = 6, + // (undocumented) + ConnectionErrorReceived = 3, + // (undocumented) + RequestCreated = 0, + // (undocumented) + RequestReceived = 7, + // (undocumented) + ResponseLoaded = 1, + // (undocumented) + ResponseLoading = 2, + // (undocumented) + UnknownErrorReceived = 4 +} + +// @public (undocumented) +class RpcRegistry { + // (undocumented) + definitionClasses: Map; + // (undocumented) + describeAvailableEndpoints(): Promise; + // (undocumented) + getClientForInterface(definition: RpcInterfaceDefinition): T; + // (undocumented) + getImplForInterface(definition: RpcInterfaceDefinition): T; + // (undocumented) + id: () => number; + // (undocumented) + implementationClasses: Map; + // (undocumented) + implementations: Map; + // (undocumented) + initializeRpcInterface(definition: RpcInterfaceDefinition): void; + // (undocumented) + static readonly instance: RpcRegistry; + // (undocumented) + isRpcInterfaceInitialized(definition: RpcInterfaceDefinition): boolean; + // (undocumented) + lookupImpl(interfaceName: string): T; + // (undocumented) + lookupInterfaceDefinition(name: string): RpcInterfaceDefinition; + // (undocumented) + proxies: Map; + // (undocumented) + registerImpl(definition: RpcInterfaceDefinition, implementation: RpcInterfaceImplementation): void; + // (undocumented) + suppliedImplementations: Map; + // (undocumented) + supplyImplInstance(definition: RpcInterfaceDefinition, instance: TImplementation): void; + // (undocumented) + terminateRpcInterface(definition: RpcInterfaceDefinition): void; + // (undocumented) + types: Map; + // (undocumented) + unregisterImpl(definition: RpcInterfaceDefinition): void; +} + +// @public +class RpcRequest { + constructor(client: RpcInterface, operation: string, parameters: any[]); + static readonly aggregateLoad: RpcOperationsProfile; + readonly client: RpcInterface; + readonly connecting: boolean; + static current(context: RpcInterface): RpcRequest; + // (undocumented) + dispose(): void; + readonly elapsed: number; + static readonly events: BeEvent; + readonly extendedStatus: string; + findParameterOfType(requestConstructor: { + new (...args: any[]): T; + }): T | undefined; + // (undocumented) + protected handleUnknownResponse(code: number): void; + readonly id: string; + readonly lastSubmitted: number; + readonly lastUpdated: number; + protected abstract load(): Promise; + method: string; + static readonly notFoundHandlers: BeEvent; + readonly operation: RpcOperation; + parameters: any[]; + path: string; + readonly pending: boolean; + readonly protocol: RpcProtocol; + // (undocumented) + protected reject(reason: any): void; + readonly response: Promise; + retryInterval: number; + protected abstract send(): Promise; + protected abstract setHeader(name: string, value: string): void; + protected setLastUpdatedTime(): void; + readonly status: RpcRequestStatus; + // (undocumented) + submit(): Promise; +} + +// @public +enum RpcRequestEvent { + // (undocumented) + PendingUpdateReceived = 1, + // (undocumented) + StatusChanged = 0 +} + +// @public (undocumented) +interface RpcRequestFulfillment { +} + +// @public +enum RpcRequestStatus { + // (undocumented) + Created = 1, + // (undocumented) + Disposed = 6, + // (undocumented) + NotFound = 7, + // (undocumented) + Pending = 3, + // (undocumented) + Rejected = 5, + // (undocumented) + Resolved = 4, + // (undocumented) + Submitted = 2, + // (undocumented) + Unknown = 0 +} + +// @public +enum RpcResponseCacheControl { + // (undocumented) + Immutable = 1, + // (undocumented) + None = 0 +} + +// @public (undocumented) +interface RpcSerializedValue { +} + +// @public (undocumented) +class SceneLights { + // WARNING: The type "ImageLight.Solar" needs to be exported by the package (e.g. added to index.ts) + constructor(imageBased: { + environmentalMap: RenderTexture; + diffuseImage: RenderTexture; + solar: ImageLight.Solar; + }, fstop?: number); + // (undocumented) + addLight(light: Light): void; + // (undocumented) + fstop: number; + // WARNING: The type "ImageLight.Solar" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + imageBased: { + diffuseImage: RenderTexture; + environmentalMap: RenderTexture; + solar: ImageLight.Solar; + } + // (undocumented) + readonly isEmpty: boolean; +} + +// @public +interface SerializedRpcOperation { + // (undocumented) + encodedRequest?: string; + // (undocumented) + interfaceDefinition: string; + // (undocumented) + interfaceVersion: string; + // (undocumented) + operationName: string; +} + +// @public +interface SerializedRpcRequest { + // (undocumented) + authorization: string; + // (undocumented) + caching: RpcResponseCacheControl; + // (undocumented) + id: string; + // (undocumented) + method: string; + // (undocumented) + operation: SerializedRpcOperation; + // (undocumented) + parameters: RpcSerializedValue; + // (undocumented) + path: string; + // (undocumented) + version: string; +} + +// @public (undocumented) +class ServerError extends IModelError { + constructor(errorNumber: number, message: string, log?: LogFunction); +} + +// @public (undocumented) +class ServerTimeoutError extends ServerError { + constructor(errorNumber: number, message: string, log?: LogFunction); +} + +// @beta +interface SheetBorderTemplateProps extends ElementProps { + // (undocumented) + height?: number; + // (undocumented) + width?: number; +} + +// @beta +interface SheetProps extends ElementProps { + // (undocumented) + attachments?: Id64String[]; + // (undocumented) + height?: number; + // (undocumented) + scale?: number; + // (undocumented) + sheetTemplate?: Id64String; + // (undocumented) + width?: number; +} + +// @beta +interface SheetTemplateProps extends ElementProps { + // (undocumented) + border?: Id64String; + // (undocumented) + height?: number; + // (undocumented) + width?: number; +} + +// @public (undocumented) +class SilhouetteEdgeArgs extends EdgeArgs { + // (undocumented) + clear(): void; + // (undocumented) + init(meshEdges?: MeshEdges): boolean; + // (undocumented) + normals?: OctEncodedNormalPair[]; +} + +// @public +interface SkyBoxImageProps { + texture?: Id64String; + textures?: SkyCubeProps; + type?: SkyBoxImageType; +} + +// @public +enum SkyBoxImageType { + Cube = 2, + Cylindrical = 3, + // (undocumented) + None = 0, + Spherical = 1 +} + +// @public +interface SkyBoxProps { + display?: boolean; + groundColor?: ColorDefProps; + groundExponent?: number; + image?: SkyBoxImageProps; + nadirColor?: ColorDefProps; + skyColor?: ColorDefProps; + skyExponent?: number; + twoColor?: boolean; + zenithColor?: ColorDefProps; +} + +// @public +interface SkyCubeProps { + back?: Id64String; + bottom?: Id64String; + front?: Id64String; + left?: Id64String; + right?: Id64String; + top?: Id64String; +} + +// @beta +interface SnapRequestProps { + // (undocumented) + closePoint: XYZProps; + // (undocumented) + decorationGeometry?: DecorationGeometryProps[]; + // (undocumented) + geometryClass?: GeometryClass; + // (undocumented) + id: Id64String; + // (undocumented) + intersectCandidates?: Id64Array; + // (undocumented) + snapAperture?: number; + // (undocumented) + snapDivisor?: number; + // (undocumented) + snapModes?: number[]; + // (undocumented) + subCategoryId?: Id64String; + // (undocumented) + testPoint: XYZProps; + // (undocumented) + viewFlags?: any; + // (undocumented) + worldToView: Matrix4dProps; +} + +// @beta +interface SnapResponseProps { + // (undocumented) + curve?: any; + // (undocumented) + geomType?: number; + // (undocumented) + heat?: number; + // (undocumented) + hitPoint?: XYZProps; + // (undocumented) + intersectCurve?: any; + // (undocumented) + intersectId?: string; + // (undocumented) + normal?: XYZProps; + // (undocumented) + parentGeomType?: number; + // (undocumented) + snapMode?: number; + // (undocumented) + snapPoint?: XYZProps; + // (undocumented) + status: number; +} + +// @public +interface SpatialViewDefinitionProps extends ViewDefinition3dProps { + // (undocumented) + modelSelectorId: Id64String; +} + +// @public +class Spot extends Light { + constructor(opts?: SpotProps); + // (undocumented) + inner: Angle; + // (undocumented) + outer: Angle; +} + +// @public +interface SpotProps extends LightProps { + // (undocumented) + inner?: AngleProps; + // (undocumented) + outer?: AngleProps; +} + +// @alpha +class StandaloneIModelRpcInterface extends RpcInterface { + // (undocumented) + closeStandalone(_iModelToken: IModelToken): Promise; + static getClient(): StandaloneIModelRpcInterface; + // (undocumented) + openStandalone(_fileName: string, _openMode: OpenMode): Promise; + static types: () => (typeof IModelToken)[]; + static version: string; +} + +// @public (undocumented) +class SubCategoryAppearance { +} + +// @public +class SubCategoryOverride { + readonly anyOverridden: boolean; + readonly color?: ColorDef; + static defaults: SubCategoryOverride; + // WARNING: The type "SubCategoryAppearance.Props" needs to be exported by the package (e.g. added to index.ts) + static fromJSON(json?: SubCategoryAppearance.Props): SubCategoryOverride; + readonly invisible?: boolean; + readonly material?: Id64String; + override(appearance: SubCategoryAppearance): SubCategoryAppearance; + readonly priority?: number; + readonly style?: Id64String; + // WARNING: The type "SubCategoryAppearance.Props" needs to be exported by the package (e.g. added to index.ts) + toJSON(): SubCategoryAppearance.Props; + readonly transparency?: number; + readonly weight?: number; +} + +// @public +interface SubCategoryProps extends ElementProps { + // (undocumented) + appearance?: SubCategoryAppearance.Props; + // (undocumented) + description?: string; +} + +// @public +interface SubjectProps extends ElementProps { + // (undocumented) + description?: string; +} + +// @public +class TestRpcManager { + // (undocumented) + static initialize(interfaces: RpcInterfaceDefinition[]): void; +} + +// @public +class TextString { + constructor(props: TextStringProps); + bold?: boolean; + font: number; + // (undocumented) + height: number; + italic?: boolean; + readonly origin: Point3d; + readonly rotation: YawPitchRollAngles; + text: string; + // (undocumented) + toJSON(): TextStringProps; + // (undocumented) + transformInPlace(transform: Transform): boolean; + underline?: boolean; + // (undocumented) + readonly width: number; + // (undocumented) + widthFactor?: number; +} + +// @public +interface TextStringProps { + bold?: boolean; + font: number; + // (undocumented) + height: number; + italic?: boolean; + origin?: XYZProps; + rotation?: YawPitchRollProps; + text: string; + underline?: boolean; + // (undocumented) + widthFactor?: number; +} + +// @beta (undocumented) +enum TextureFlags { + // (undocumented) + None = 0 +} + +// @beta (undocumented) +class TextureMapping { +} + +// @beta +interface TextureMapProps { + pattern_angle?: number; + pattern_flip?: boolean; + pattern_mapping?: TextureMapping.Mode; + pattern_offset?: DPoint2dProps; + pattern_scale?: DPoint2dProps; + pattern_scalemode?: TextureMapUnits; + pattern_u_flip?: boolean; + pattern_weight?: number; + TextureId: Id64String; +} + +// @beta (undocumented) +enum TextureMapUnits { + // (undocumented) + Feet = 5, + // (undocumented) + Inches = 6, + // (undocumented) + Meters = 3, + // (undocumented) + Millimeters = 4, + // (undocumented) + Relative = 0 +} + +// @beta +interface TextureProps extends DefinitionElementProps { + data: string; + description?: string; + flags: TextureFlags; + format: ImageSourceFormat; + height: number; + width: number; +} + +// @alpha +interface ThumbnailFormatProps { + format: "jpeg" | "png"; + height: number; + width: number; +} + +// @alpha +interface ThumbnailProps extends ThumbnailFormatProps { + // (undocumented) + image: Uint8Array; +} + +// @public (undocumented) +interface TileProps { + contentId: string; + contentRange?: Range3dProps; + isLeaf?: boolean; + maximumSize: number; + range: Range3dProps; + sizeMultiplier?: number; + transformToRoot?: TransformProps; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +interface TileTreeProps { + formatVersion?: number; + id: string; + isTerrain?: boolean; + location: TransformProps; + maxTilesToSkip?: number; + rootTile: TileProps; + yAxisUp?: boolean; +} + +// @public +class TypeDefinition extends RelatedElement { +} + +// @public +interface TypeDefinitionElementProps extends DefinitionElementProps { + // (undocumented) + recipe?: RelatedElementProps; +} + +// @public (undocumented) +interface ViewAttachmentLabelProps extends GeometricElement2dProps { + // (undocumented) + viewAttachment?: RelatedElementProps; +} + +// @public +interface ViewAttachmentProps extends GeometricElement2dProps { + // (undocumented) + view: RelatedElementProps; +} + +// @public +interface ViewDefinition2dProps extends ViewDefinitionProps { + // (undocumented) + angle: AngleProps; + // (undocumented) + baseModelId: Id64String; + // (undocumented) + delta: XYProps; + // (undocumented) + origin: XYProps; +} + +// @public +interface ViewDefinition3dProps extends ViewDefinitionProps { + angles?: YawPitchRollProps; + camera: CameraProps; + cameraOn: boolean; + extents: XYZProps; + origin: XYZProps; +} + +// @public +interface ViewDefinitionProps extends DefinitionElementProps { + // (undocumented) + categorySelectorId: Id64String; + // (undocumented) + description?: string; + // (undocumented) + displayStyleId: Id64String; +} + +// @public (undocumented) +module ViewFlag { + class Overrides { + constructor(flags?: ViewFlags); + // (undocumented) + anyOverridden(): boolean; + apply(base: ViewFlags): ViewFlags; + // (undocumented) + clear(): void; + // WARNING: The type "Overrides" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + clone(out?: Overrides): Overrides; + // WARNING: The type "Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + copyFrom(other: Overrides): void; + // WARNING: The type "PresenceFlag" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + isPresent(flag: PresenceFlag): boolean; + // (undocumented) + overrideAll(flags?: ViewFlags): void; + // (undocumented) + setEdgeMask(val: number): void; + // (undocumented) + setIgnoreGeometryMap(val: boolean): void; + // (undocumented) + setMonochrome(val: boolean): void; + // WARNING: The type "PresenceFlag" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setPresent(flag: PresenceFlag): void; + // (undocumented) + setRenderMode(val: RenderMode): void; + // (undocumented) + setShowBackgroundMap(val: boolean): void; + // (undocumented) + setShowCameraLights(val: boolean): void; + // (undocumented) + setShowClipVolume(val: boolean): void; + // (undocumented) + setShowConstructions(val: boolean): void; + // (undocumented) + setShowDimensions(val: boolean): void; + // (undocumented) + setShowFill(val: boolean): void; + // (undocumented) + setShowHiddenEdges(val: boolean): void; + // (undocumented) + setShowMaterials(val: boolean): void; + // (undocumented) + setShowPatterns(val: boolean): void; + // (undocumented) + setShowShadows(val: boolean): void; + // (undocumented) + setShowSolarLight(val: boolean): void; + // (undocumented) + setShowSourceLights(val: boolean): void; + // (undocumented) + setShowStyles(val: boolean): void; + // (undocumented) + setShowTextures(val: boolean): void; + // (undocumented) + setShowTransparency(val: boolean): void; + // (undocumented) + setShowVisibleEdges(val: boolean): void; + // (undocumented) + setShowWeights(val: boolean): void; + // (undocumented) + setUseHlineMaterialColors(val: boolean): void; + } + + // (undocumented) + enum PresenceFlag { + // (undocumented) + kBackgroundMap = 23, + // (undocumented) + kCameraLights = 14, + // (undocumented) + kClipVolume = 17, + // (undocumented) + kConstructions = 18, + // (undocumented) + kContinuousRendering = 7, + // (undocumented) + kDimensions = 2, + // (undocumented) + kEdgeMask = 22, + // (undocumented) + kFill = 8, + // (undocumented) + kGeometryMap = 20, + // (undocumented) + kHiddenEdges = 12, + // (undocumented) + kHlineMaterialColors = 21, + // (undocumented) + kMaterials = 10, + // (undocumented) + kMonochrome = 19, + // (undocumented) + kPatterns = 3, + // (undocumented) + kRenderMode = 0, + // (undocumented) + kShadows = 16, + // (undocumented) + kSolarLight = 15, + // (undocumented) + kSourceLights = 13, + // (undocumented) + kStyles = 5, + // (undocumented) + kText = 1, + // (undocumented) + kTextures = 9, + // (undocumented) + kTransparency = 6, + // (undocumented) + kVisibleEdges = 11, + // (undocumented) + kWeights = 4 + } + +} + +// @public +interface ViewFlagProps { + acs?: boolean; + ambientOcclusion?: boolean; + backgroundMap?: boolean; + clipVol?: boolean; + contRend?: boolean; + // (undocumented) + edgeMask?: number; + grid?: boolean; + hidEdges?: boolean; + hlMatColors?: boolean; + monochrome?: boolean; + noCameraLights?: boolean; + noConstruct?: boolean; + noDim?: boolean; + noFill?: boolean; + noMaterial?: boolean; + noPattern?: boolean; + noSolarLight?: boolean; + noSourceLights?: boolean; + noStyle?: boolean; + noTexture?: boolean; + noTransp?: boolean; + noWeight?: boolean; + renderMode?: number; + shadows?: boolean; + visEdges?: boolean; +} + +// @public +class ViewFlags { + acsTriad: boolean; + ambientOcclusion: boolean; + backgroundMap: boolean; + cameraLights: boolean; + clipVolume: boolean; + // (undocumented) + clone(out?: ViewFlags): ViewFlags; + constructions: boolean; + continuousRendering: boolean; + // (undocumented) + static createFrom(other?: ViewFlags, out?: ViewFlags): ViewFlags; + dimensions: boolean; + edgeMask: number; + // (undocumented) + edgesRequired(): boolean; + // (undocumented) + equals(other: ViewFlags): boolean; + fill: boolean; + // (undocumented) + static fromJSON(json?: ViewFlagProps): ViewFlags; + grid: boolean; + hiddenEdges: boolean; + // (undocumented) + hiddenEdgesVisible(): boolean; + hLineMaterialColors: boolean; + materials: boolean; + monochrome: boolean; + noGeometryMap: boolean; + patterns: boolean; + renderMode: RenderMode; + shadows: boolean; + solarLight: boolean; + sourceLights: boolean; + styles: boolean; + textures: boolean; + // (undocumented) + toJSON(): ViewFlagProps; + transparency: boolean; + visibleEdges: boolean; + weights: boolean; +} + +// @alpha +interface ViewQueryParams extends EntityQueryParams { + // (undocumented) + wantPrivate?: boolean; +} + +// @public +interface ViewStateProps { + // (undocumented) + categorySelectorProps: CategorySelectorProps; + // (undocumented) + displayStyleProps: DisplayStyleProps; + // (undocumented) + modelSelectorProps?: ModelSelectorProps; + // (undocumented) + sheetAttachments?: Id64Array; + // (undocumented) + sheetProps?: SheetProps; + // (undocumented) + viewDefinitionProps: ViewDefinitionProps; +} + +// @public +class WebAppRpcProtocol extends RpcProtocol { + constructor(configuration: RpcConfiguration); + static computeContentType(httpType: string | null | undefined): RpcContentType; + getCode(status: RpcRequestStatus): number; + getStatus(code: number): RpcRequestStatus; + handleOpenApiDescriptionRequest(_req: HttpServerRequest, res: HttpServerResponse): void; + handleOperationGetRequest(req: HttpServerRequest, res: HttpServerResponse): Promise; + handleOperationPostRequest(req: HttpServerRequest, res: HttpServerResponse): Promise; + // WARNING: The type "OpenAPIInfo" needs to be exported by the package (e.g. added to index.ts) + info: OpenAPIInfo; + isTimeout(code: number): boolean; + // WARNING: The type "RpcOpenAPIDescription" needs to be exported by the package (e.g. added to index.ts) + readonly openAPIDescription: RpcOpenAPIDescription; + pathPrefix: string; + readonly requestType: typeof WebAppRpcRequest; + // WARNING: The type "OpenAPIParameter" needs to be exported by the package (e.g. added to index.ts) + abstract supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[]; +} + +// @public +class WebAppRpcRequest extends RpcRequest { + constructor(client: RpcInterface, operation: string, parameters: any[]); + protected static computeTransportType(value: RpcSerializedValue, source: any): RpcContentType; + // (undocumented) + protected handleUnknownResponse(code: number): void; + // (undocumented) + protected load(): Promise; + static maxUrlComponentSize: number; + metadata: { + message: string; + status: number; + } + method: HttpMethod_T; + static parseRequest(protocol: WebAppRpcProtocol, req: HttpServerRequest): Promise; + readonly protocol: WebAppRpcProtocol; + protected send(): Promise; + static sendResponse(_protocol: WebAppRpcProtocol, request: SerializedRpcRequest, fulfillment: RpcRequestFulfillment, res: HttpServerResponse): void; + protected setHeader(name: string, value: string): void; +} + +// @public +class WipRpcInterface extends RpcInterface { + // (undocumented) + attachChangeCache(_iModelToken: IModelToken): Promise; + // (undocumented) + detachChangeCache(_iModelToken: IModelToken): Promise; + // (undocumented) + getChangedElements(_iModelToken: IModelToken, _startChangesetId: string, _endChangesetId: string): Promise; + static getClient(): WipRpcInterface; + // (undocumented) + isChangeCacheAttached(_iModelToken: IModelToken): Promise; + // (undocumented) + isChangesetProcessed(_iModelToken: IModelToken, _changesetId: string): Promise; + // (undocumented) + placeholder(_iModelToken: IModelToken): Promise; + static types: () => (typeof IModelToken)[]; + static version: string; +} + +// WARNING: Unsupported export: CodeScopeProps +// WARNING: Unsupported export: ColorDefProps +// WARNING: Unsupported export: PlacementProps +// WARNING: Unsupported export: PropertyCallback +// WARNING: Unsupported export: GateValue +// WARNING: Unsupported export: NpcCorners +// WARNING: Unsupported export: NpcCenter +// WARNING: Unsupported export: RpcInterfaceImplementation +// WARNING: Unsupported export: GetMetaDataFunction +// WARNING: Unsupported export: LogFunction +// WARNING: Unsupported export: RgbFactorProps +// WARNING: Unsupported export: DPoint2dProps +// WARNING: Unsupported export: kPagingDefaultOptions +// WARNING: Unsupported export: GeometryStreamProps +// WARNING: Unsupported export: AxisAlignedBox3d +// WARNING: Unsupported export: ElementAlignedBox3d +// WARNING: Unsupported export: ElementAlignedBox2d +// WARNING: Unsupported export: LocalAlignedBox3d +// WARNING: Unsupported export: WEB_RPC_CONSTANTS +// WARNING: Unsupported export: RpcConfigurationSupplier +// WARNING: Unsupported export: RpcInvocationCallback_T +// WARNING: Unsupported export: RpcProtocolEventHandler +// WARNING: Unsupported export: REGISTRY +// WARNING: Unsupported export: OPERATION +// WARNING: Unsupported export: POLICY +// WARNING: Unsupported export: INSTANCE +// WARNING: Unsupported export: CURRENT_REQUEST +// WARNING: Unsupported export: CURRENT_INVOCATION +// WARNING: Unsupported export: builtins +// WARNING: Unsupported export: RpcRequestTokenSupplier_T +// WARNING: Unsupported export: RpcRequestIdSupplier_T +// WARNING: Unsupported export: RpcRequestInitialRetryIntervalSupplier_T +// WARNING: Unsupported export: RpcRequestCallback_T +// WARNING: Unsupported export: RpcResponseCachingCallback_T +// WARNING: Unsupported export: RpcRequestEventHandler +// WARNING: Unsupported export: RpcRequestNotFoundHandler +// WARNING: Unsupported export: initializeRpcRequest +// WARNING: Unsupported export: HttpMethod_T +// (No @packagedocumentation comment for this package) diff --git a/common/api/imodeljs-frontend.api.ts b/common/api/imodeljs-frontend.api.ts index 4d36272..5ddb4b8 100644 --- a/common/api/imodeljs-frontend.api.ts +++ b/common/api/imodeljs-frontend.api.ts @@ -1,6557 +1,6827 @@ -// @public -class AccuDraw { - // (undocumented) - protected _acsPickId?: string; - // (undocumented) - protected _animationFrames: number; - // (undocumented) - protected _compassSizeInches: number; - // (undocumented) - protected readonly _fillColor: ColorDef; - // (undocumented) - protected readonly _fillColorNoFocus: ColorDef; - // (undocumented) - protected readonly _frameColor: ColorDef; - // (undocumented) - protected readonly _frameColorNoFocus: ColorDef; - // (undocumented) - protected readonly _indexColor: ColorDef; - // (undocumented) - protected _indexToleranceInches: number; - // (undocumented) - protected readonly _xColor: ColorDef; - // (undocumented) - protected readonly _yColor: ColorDef; - // (undocumented) - accountForAuxRotationPlane(rot: ThreeAxes, plane: RotationMode): void; - // (undocumented) - activate(): void; - // (undocumented) - adjustPoint(pointActive: Point3d, vp: ScreenViewport, fromSnap: boolean): boolean; - // (undocumented) - alwaysShowCompass: boolean; - // (undocumented) - angleLock(): void; - // (undocumented) - autoFocusFields: boolean; - // (undocumented) - autoPointPlacement: boolean; - // (undocumented) - readonly axes: ThreeAxes; - // (undocumented) - axisIndexing: boolean; - // (undocumented) - readonly baseAxes: ThreeAxes; - // (undocumented) - changeBaseRotationMode(mode: RotationMode): void; - // (undocumented) - changeCompassMode(animate?: boolean): void; - // (undocumented) - clearTentative(): boolean; - // (undocumented) - compassMode: CompassMode; - // (undocumented) - contextSensitive: boolean; - // (undocumented) - currentState: CurrentState; - // (undocumented) - currentView?: ScreenViewport; - // (undocumented) - deactivate(): void; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - readonly delta: Vector3d; - // (undocumented) - disableForSession(): void; - // (undocumented) - distanceIndexing: boolean; - // (undocumented) - distanceLock(synchText: boolean, saveInHistory: boolean): void; - // (undocumented) - doAutoPoint(index: ItemField, mode: CompassMode): void; - // (undocumented) - doLockAngle(isSnapped: boolean): void; - // (undocumented) - dontMoveFocus: boolean; - // (undocumented) - downgradeInactiveState(): boolean; - // (undocumented) - enableForSession(): void; - // (undocumented) - fixPointPolar(vp: Viewport): void; - // (undocumented) - fixPointRectangular(vp: Viewport): void; - // (undocumented) - readonly flags: Flags; - // (undocumented) - floatingOrigin: boolean; - // (undocumented) - static getCurrentOrientation(vp: Viewport, checkAccuDraw: boolean, checkACS: boolean, rMatrix?: Matrix3d): Matrix3d | undefined; - // (undocumented) - getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined; - // (undocumented) - getFieldLock(index: ItemField): boolean; - // (undocumented) - getKeyinStatus(index: ItemField): KeyinStatus; - // (undocumented) - getRotation(rMatrix?: Matrix3d): Matrix3d; - // (undocumented) - static getSnapRotation(snap: SnapDetail, currentVp: Viewport | undefined, out?: Matrix3d): Matrix3d | undefined; - // (undocumented) - static getStandardRotation(nStandard: StandardViewId, vp: Viewport | undefined, useACS: boolean, out?: Matrix3d): Matrix3d; - // (undocumented) - getValueByIndex(index: ItemField): number; - grabInputFocus(): void; - hardConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean; - // (undocumented) - readonly hasInputFocus: boolean; - // (undocumented) - indexed: LockedStates; - // (undocumented) - readonly isActive: boolean; - // (undocumented) - readonly isDeactivated: boolean; - // (undocumented) - readonly isEnabled: boolean; - // (undocumented) - readonly isInactive: boolean; - // (undocumented) - isZLocked(vp: Viewport): boolean; - // (undocumented) - readonly lastAxes: ThreeAxes; - // (undocumented) - locked: LockedStates; - // (undocumented) - newFocus: ItemField; - // (undocumented) - onBeginDynamics(): boolean; - // (undocumented) - onCompassModeChange(): void; - // (undocumented) - onEndDynamics(): boolean; - // (undocumented) - onFieldLockChange(_index: ItemField): void; - // (undocumented) - onFieldValueChange(_index: ItemField): void; - // (undocumented) - onInitialized(): void; - // (undocumented) - onInputCollectorExit(): boolean; - // (undocumented) - onInputCollectorInstall(): boolean; - onMotion(_ev: BeButtonEvent): void; - // (undocumented) - onPostButtonEvent(ev: BeButtonEvent): boolean; - // (undocumented) - onPreButtonEvent(ev: BeButtonEvent): boolean; - // (undocumented) - onPrimitiveToolInstall(): boolean; - // (undocumented) - onRotationModeChange(): void; - // (undocumented) - onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void; - // (undocumented) - onSnap(snap: SnapDetail): boolean; - // (undocumented) - onTentative(): boolean; - // (undocumented) - onViewToolExit(): boolean; - // (undocumented) - onViewToolInstall(): boolean; - // (undocumented) - readonly origin: Point3d; - // (undocumented) - readonly planePt: Point3d; - // (undocumented) - readonly point: Point3d; - // (undocumented) - processFieldInput(index: ItemField, input: string, synchText: boolean): void; - // (undocumented) - processHints(): void; - // (undocumented) - readonly published: AccudrawData; - // (undocumented) - refreshDecorationsAndDynamics(): void; - // (undocumented) - restoreState(stateBuffer: SavedState): void; - // (undocumented) - rotationMode: RotationMode; - // (undocumented) - saveCoordinate(index: ItemField, value: number): void; - // (undocumented) - readonly savedStateInputCollector: SavedState; - // (undocumented) - readonly savedStateViewTool: SavedState; - // (undocumented) - saveState(stateBuffer: SavedState): void; - // (undocumented) - sendDataPoint(pt: Point3d, vp: ScreenViewport): void; - // (undocumented) - setCompassMode(mode: CompassMode): void; - // (undocumented) - setContext(flags: AccuDrawFlags, originP?: Point3d, orientationP?: Matrix3d | Vector3d, deltaP?: Vector3d, distanceP?: number, angleP?: number, transP?: Transform): BentleyStatus; - // (undocumented) - setContextRotation(rMatrix: Matrix3d, locked: boolean, animate: boolean): void; - // (undocumented) - setFieldLock(index: ItemField, locked: boolean): void; - // (undocumented) - setFocusItem(_index: ItemField): void; - // (undocumented) - setKeyinStatus(index: ItemField, status: KeyinStatus): void; - // (undocumented) - setLastPoint(pt: Point3d): void; - // (undocumented) - protected setNewFocus(index: ItemField): void; - // (undocumented) - setRotationMode(mode: RotationMode): void; - // (undocumented) - setValueByIndex(index: ItemField, value: number): void; - // (undocumented) - smartKeyin: boolean; - // (undocumented) - softConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean; - // (undocumented) - stickyZLock: boolean; - // (undocumented) - testDecorationHit(id: string): boolean; - // (undocumented) - unlockAllFields(): void; - // (undocumented) - static updateAuxCoordinateSystem(acs: AuxCoordSystemState, vp: Viewport, allViews?: boolean): void; - // (undocumented) - updateFieldLock(index: ItemField, locked: boolean): void; - // (undocumented) - updateRotation(animate?: boolean, newRotationIn?: Matrix3d): void; - // (undocumented) - upgradeToActiveState(): boolean; - // (undocumented) - readonly vector: Vector3d; -} - -// @public (undocumented) -class AccudrawData { - // (undocumented) - angle: number; - // (undocumented) - readonly delta: Point3d; - // (undocumented) - distance: number; - // (undocumented) - flags: number; - // (undocumented) - readonly origin: Point3d; - // (undocumented) - readonly rMatrix: Matrix3d; - // (undocumented) - readonly vector: Vector3d; - // (undocumented) - zero(): void; -} - -// @public (undocumented) -enum AccuDrawFlags { - // (undocumented) - AlwaysSetOrigin = 2097156, - // (undocumented) - Disable = 4096, - // (undocumented) - FixedOrigin = 8, - // (undocumented) - Lock_X = 512, - // (undocumented) - Lock_Y = 1024, - // (undocumented) - Lock_Z = 2048, - // (undocumented) - LockAngle = 524288, - // (undocumented) - LockDistance = 256, - // (undocumented) - OrientACS = 131072, - // (undocumented) - OrientDefault = 16384, - // (undocumented) - RedrawCompass = 4194304, - // (undocumented) - SetDistance = 128, - // (undocumented) - SetFocus = 32768, - // (undocumented) - SetModePolar = 1, - // (undocumented) - SetModeRect = 2, - // (undocumented) - SetNormal = 64, - // (undocumented) - SetOrigin = 4, - // (undocumented) - SetRMatrix = 16, - // (undocumented) - SetXAxis = 32, - // (undocumented) - SetXAxis2 = 262144, - // (undocumented) - SmartRotation = 16777216, - // (undocumented) - UpdateRotation = 8388608 -} - -// @public -class AccuDrawHintBuilder { - // (undocumented) - enableSmartRotation: boolean; - sendHints(activate?: boolean): boolean; - // (undocumented) - setAngle(angle: number): void; - // (undocumented) - setDistance(distance: number): void; - // (undocumented) - setLockAngle: boolean; - // (undocumented) - setLockDistance: boolean; - // (undocumented) - setLockX: boolean; - // (undocumented) - setLockY: boolean; - // (undocumented) - setLockZ: boolean; - // (undocumented) - setModePolar(): void; - // (undocumented) - setModeRectangular(): void; - // (undocumented) - setNormal(normal: Vector3d): void; - // (undocumented) - setOrigin(origin: Point3d): void; - // (undocumented) - setOriginAlways: boolean; - // (undocumented) - setOriginFixed: boolean; - // (undocumented) - setRotation(rMatrix: Matrix3d): void; - // (undocumented) - setXAxis(xAxis: Vector3d): void; - // (undocumented) - setXAxis2(xAxis: Vector3d): void; -} - -// @public -class AccuDrawShortcuts { - // (undocumented) - static alignView(): void; - // (undocumented) - static changeCompassMode(): void; - // (undocumented) - static defineACSByElement(): void; - // (undocumented) - static defineACSByPoints(): void; - // (undocumented) - static getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): BentleyStatus; - // (undocumented) - static itemFieldAcceptInput(index: ItemField, str: string): void; - // (undocumented) - static itemFieldLockToggle(index: ItemField): void; - // (undocumented) - static itemFieldNavigate(index: ItemField, str: string, forward: boolean): void; - // (undocumented) - static itemFieldNewInput(index: ItemField): void; - // (undocumented) - static itemFieldUnlockAll(): void; - // (undocumented) - static itemRotationModeChange(rotation: RotationMode): void; - // (undocumented) - static lockAngle(): void; - // (undocumented) - static lockDistance(): void; - // (undocumented) - lockIndex(): void; - // (undocumented) - static lockSmart(): void; - // (undocumented) - static lockX(): void; - // (undocumented) - static lockY(): void; - // (undocumented) - static lockZ(): void; - // (undocumented) - static processPendingHints(): void; - // (undocumented) - static requestInputFocus(): void; - // (undocumented) - static rotate90(axis: number): void; - // (undocumented) - static rotateAxes(aboutCurrentZ: boolean): void; - // (undocumented) - static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean; - // (undocumented) - static rotateCycle(updateCurrentACS: boolean): void; - // (undocumented) - static rotateToACS(): void; - // (undocumented) - static rotateToBase(): void; - // (undocumented) - static rotateToElement(updateCurrentACS: boolean): void; - // (undocumented) - static setOrigin(explicitOrigin?: Point3d): void; - // (undocumented) - static setStandardRotation(rotation: RotationMode): void; - // (undocumented) - static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean; - // (undocumented) - static writeACS(_acsName: string): BentleyStatus; -} - -// @public (undocumented) -class AccuDrawTool { - // (undocumented) - activateAccuDrawOnStart(): boolean; - // (undocumented) - abstract doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): Promise; - // (undocumented) - doManipulationStart(): void; - // (undocumented) - doManipulationStop(cancel: boolean): void; - // (undocumented) - static installTool(shortcut: AccuDrawTool): boolean; - // (undocumented) - onDecorate(_context: DecorateContext): void; - // (undocumented) - onManipulationComplete(): AccuDrawFlags; - // (undocumented) - static outputPrompt(messageKey: string): void; -} - -// @public (undocumented) -class AccuSnap { -} - -// @public (undocumented) -enum ACSDisplayOptions { - // (undocumented) - Active = 1, - // (undocumented) - CheckVisible = 8, - // (undocumented) - Deemphasized = 2, - // (undocumented) - Dynamics = 16, - // (undocumented) - Hilite = 4, - // (undocumented) - None = 0 -} - -// @public (undocumented) -enum ACSType { - // (undocumented) - Cylindrical = 2, - // (undocumented) - None = 0, - // (undocumented) - Rectangular = 1, - // (undocumented) - Spherical = 3 -} - -// @public -class ActivityMessageDetails { - constructor(showProgressBar: boolean, showPercentInMessage: boolean, supportsCancellation: boolean, showDialogInitially?: boolean); - onActivityCancelled(): void; - onActivityCompleted(): void; - // (undocumented) - showDialogInitially: boolean; - // (undocumented) - showPercentInMessage: boolean; - // (undocumented) - showProgressBar: boolean; - // (undocumented) - supportsCancellation: boolean; - // (undocumented) - wasCancelled: boolean; -} - -// @public -enum ActivityMessageEndReason { - // (undocumented) - Cancelled = 1, - // (undocumented) - Completed = 0 -} - -// @public -class AnimationBranchState { - // WARNING: The type "ClipPlanesVolume" needs to be exported by the package (e.g. added to index.ts) - constructor(transform?: Transform, clip?: ClipPlanesVolume, omit?: boolean); - // WARNING: The type "ClipPlanesVolume" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly clip?: ClipPlanesVolume; - // (undocumented) - readonly omit?: boolean; - // (undocumented) - readonly transform?: Transform; -} - -// @public (undocumented) -interface AppearanceOverrideProps { - // (undocumented) - color?: ColorDefProps; - // (undocumented) - ids?: Id64Set; - // (undocumented) - overrideType?: FeatureOverrideType; -} - -// @public -interface ArrayValue extends BasePropertyValue { - // (undocumented) - items: PropertyRecord[]; - // (undocumented) - itemsTypeName: string; - // (undocumented) - valueFormat: PropertyValueFormat.Array; -} - -// @public (undocumented) -module Attachments { - // (undocumented) - class Attachment { - protected constructor(props: ViewAttachmentProps, view: ViewState); - // WARNING: The type "Tree" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected _tree?: Tree; - clearClipping(): void; - // (undocumented) - clip: ClipVector; - static readonly DEBUG_BOUNDING_BOX_COLOR: ColorDef; - debugDrawBorder(context: SceneContext): void; - // (undocumented) - displayPriority: number; - getOrCreateClip(transform?: Transform): ClipVector; - // (undocumented) - id: Id64String; - readonly is2d: boolean; - readonly isReady: boolean; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - abstract load(sheetView: SheetViewState, sceneContext: SceneContext): State; - // (undocumented) - placement: Placement2d; - // (undocumented) - scale: number; - // WARNING: The type "Tree" needs to be exported by the package (e.g. added to index.ts) - tree: Tree | undefined; - // (undocumented) - readonly view: ViewState; - } - - // (undocumented) - class Attachment2d extends Attachment { - constructor(props: ViewAttachmentProps, view: ViewState2d); - // (undocumented) - readonly is2d: boolean; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - load(_sheetView: SheetViewState, _sceneContext: SceneContext): State; - } - - // (undocumented) - class Attachment3d extends Attachment { - constructor(props: ViewAttachmentProps, view: ViewState3d); - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - getState(depth: number): State; - // (undocumented) - readonly is2d: boolean; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - load(sheetView: SheetViewState, sceneContext: SceneContext): State; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - setState(depth: number, state: State): void; - } - - // (undocumented) - class AttachmentList { - constructor(); - // WARNING: The type "Attachment" needs to be exported by the package (e.g. added to index.ts) - add(attachment: Attachment): void; - readonly allReady: boolean; - clear(): void; - // WARNING: The type "Attachment" needs to be exported by the package (e.g. added to index.ts) - drop(attachment: Attachment): void; - readonly length: number; - // WARNING: The type "Attachment" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly list: Attachment[]; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - load(idx: number, sheetView: SheetViewState, sceneContext: SceneContext): State; - } - - // (undocumented) - class AttachmentTileLoader extends TileLoader { - // (undocumented) - getChildrenProps(_parent: Tile): Promise; - // (undocumented) - readonly is3dAttachment: boolean; - // WARNING: The type "Tile.LoadPriority" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly priority: Tile.LoadPriority; - // WARNING: The type "TileRequest.Response" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - requestTileContent(_tile: Tile): Promise; - // WARNING: The type "Tile.Params" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - tileRequiresLoading(_params: Tile.Params): boolean; - } - - // (undocumented) - class AttachmentViewport extends OffScreenViewport { - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createScene(currentState: State): State; - // (undocumented) - readonly isAspectRatioLocked: boolean; - // (undocumented) - renderImage(): ImageBuffer | undefined; - // (undocumented) - rendering: boolean; - // (undocumented) - renderTexture(): void; - // WARNING: The type "Tree3d" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - setSceneDepth(depth: number, tree: Tree3d): void; - // (undocumented) - readonly texture: RenderTexture | undefined; - // (undocumented) - toParent: Transform; - } - - enum State { - // (undocumented) - Empty = 1, - // (undocumented) - Loading = 2, - // (undocumented) - NotLoaded = 0, - // (undocumented) - Ready = 3 - } - - // (undocumented) - class Tile2d extends Tile { - // WARNING: The type "Tree2d" needs to be exported by the package (e.g. added to index.ts) - constructor(root: Tree2d, range: ElementAlignedBox2d); - // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - drawGraphics(args: Tile.DrawArgs): void; - // (undocumented) - readonly hasChildren: boolean; - // (undocumented) - readonly hasGraphics: boolean; - } - - // (undocumented) - class Tile3d extends Tile { - // WARNING: The type "Tree3d" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Tile3d" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Tile3dPlacement" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Tile3d" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static create(root: Tree3d, parent: Tile3d | undefined, placement: Tile3dPlacement): Tile3d; - // (undocumented) - createGraphics(context: SceneContext): void; - // (undocumented) - createPolyfaces(context: SceneContext): void; - // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - drawGraphics(args: Tile.DrawArgs): void; - // (undocumented) - readonly hasChildren: boolean; - // (undocumented) - readonly hasGraphics: boolean; - // (undocumented) - prepareChildren(): Tile[] | undefined; - // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Tile.SelectParent" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - selectTiles(selected: Tile[], args: Tile.DrawArgs, _numSkipped?: number): Tile.SelectParent; - } - - enum Tile3dPlacement { - // (undocumented) - LowerLeft = 2, - // (undocumented) - LowerRight = 3, - // (undocumented) - Root = 4, - // (undocumented) - UpperLeft = 0, - // (undocumented) - UpperRight = 1 - } - - // (undocumented) - class Tree extends TileTree { - // WARNING: The type "AttachmentTileLoader" needs to be exported by the package (e.g. added to index.ts) - constructor(loader: AttachmentTileLoader, iModel: IModelConnection, modelId: Id64String); - // (undocumented) - graphicsClip?: ClipVector; - } - - // (undocumented) - class Tree2d extends Tree { - // WARNING: The type "Attachment2d" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - static create(attachment: Attachment2d): State; - // (undocumented) - readonly drawingToAttachment: Transform; - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly symbologyOverrides: FeatureSymbology.Overrides; - // (undocumented) - readonly view: ViewState2d; - // (undocumented) - readonly viewRoot: TileTree; - } - - // (undocumented) - class Tree3d extends Tree { - // WARNING: The type "Attachment3d" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly attachment: Attachment3d; - // (undocumented) - readonly biasDistance: number; - // WARNING: The type "Attachment3d" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Tree3d" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static create(sheetView: SheetViewState, attachment: Attachment3d, sceneContext: SceneContext): Tree3d; - // (undocumented) - readonly featureTable: PackedFeatureTable; - getRootRange(result?: Range3d): Range3d; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - getState(depth: number): State; - // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) - setState(depth: number, state: State): void; - // (undocumented) - readonly sheetView: SheetViewState; - // (undocumented) - readonly tileColor: ColorDef; - // WARNING: The type "AttachmentViewport" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly viewport: AttachmentViewport; - } - -} - -// @public -class AuxCoordSystem2dState extends AuxCoordSystemState, implements AuxCoordSystem2dProps { - constructor(props: AuxCoordSystem2dProps, iModel: IModelConnection); - // (undocumented) - angle: number; - // (undocumented) - getOrigin(result?: Point3d): Point3d; - // (undocumented) - getRotation(result?: Matrix3d): Matrix3d; - // (undocumented) - readonly origin: Point2d; - // (undocumented) - setOrigin(val: XYAndZ | XAndY): void; - // (undocumented) - setRotation(val: Matrix3d): void; - // (undocumented) - toJSON(): AuxCoordSystem2dProps; -} - -// @public -class AuxCoordSystem3dState extends AuxCoordSystemState, implements AuxCoordSystem3dProps { - constructor(props: AuxCoordSystem3dProps, iModel: IModelConnection); - // (undocumented) - getOrigin(result?: Point3d): Point3d; - // (undocumented) - getRotation(result?: Matrix3d): Matrix3d; - // (undocumented) - readonly origin: Point3d; - // (undocumented) - pitch: number; - // (undocumented) - roll: number; - // (undocumented) - setOrigin(val: XYAndZ | XAndY): void; - // (undocumented) - setRotation(rMatrix: Matrix3d): void; - // (undocumented) - toJSON(): AuxCoordSystem3dProps; - // (undocumented) - yaw: number; -} - -// @public -class AuxCoordSystemSpatialState extends AuxCoordSystem3dState { -} - -// @public -class AuxCoordSystemState extends ElementState, implements AuxCoordSystemProps { - constructor(props: AuxCoordSystemProps, iModel: IModelConnection); - static createNew(acsName: string, iModel: IModelConnection): AuxCoordSystemState; - // (undocumented) - description?: string; - // (undocumented) - display(context: DecorateContext, options: ACSDisplayOptions): void; - // (undocumented) - drawGrid(context: DecorateContext): void; - // (undocumented) - static fromProps(props: AuxCoordSystemProps, iModel: IModelConnection): AuxCoordSystemState; - // (undocumented) - abstract getOrigin(result?: Point3d): Point3d; - abstract getRotation(result?: Matrix3d): Matrix3d; - // (undocumented) - readonly is3d: boolean; - static isOriginInView(drawOrigin: Point3d, viewport: Viewport, adjustOrigin: boolean): boolean; - // (undocumented) - isValidForView(view: ViewState): boolean; - // (undocumented) - abstract setOrigin(val: XYAndZ | XAndY): void; - // (undocumented) - abstract setRotation(val: Matrix3d): void; - // (undocumented) - toJSON(): AuxCoordSystemProps; - // (undocumented) - type: number; -} - -// @public -interface BasePropertyEditorParams { - // (undocumented) - type: PropertyEditorParamTypes; -} - -// @public -interface BasePropertyValue { - // (undocumented) - valueFormat: PropertyValueFormat; -} - -// @public (undocumented) -enum BeButton { - // (undocumented) - Data = 0, - // (undocumented) - Middle = 2, - // (undocumented) - Reset = 1 -} - -// @public (undocumented) -class BeButtonEvent { - // (undocumented) - button: BeButton; - // (undocumented) - clone(result?: BeButtonEvent): BeButtonEvent; - // (undocumented) - coordsFrom: CoordSource; - // (undocumented) - getDisplayPoint(): Point2d; - // (undocumented) - initEvent(point: Point3d, rawPoint: Point3d, viewPt: Point3d, vp: ScreenViewport, from: CoordSource, keyModifiers?: BeModifierKeys, button?: BeButton, isDown?: boolean, doubleClick?: boolean, isDragging?: boolean, source?: InputSource): void; - // (undocumented) - inputSource: InputSource; - // (undocumented) - invalidate(): void; - // (undocumented) - readonly isAltKey: boolean; - // (undocumented) - readonly isControlKey: boolean; - // (undocumented) - isDoubleClick: boolean; - // (undocumented) - isDown: boolean; - // (undocumented) - isDragging: boolean; - // (undocumented) - readonly isShiftKey: boolean; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - keyModifiers: BeModifierKeys; - // (undocumented) - point: Point3d; - // (undocumented) - rawPoint: Point3d; - // (undocumented) - setFrom(src: BeButtonEvent): void; - // (undocumented) - viewPoint: Point3d; - // (undocumented) - viewport?: ScreenViewport; -} - -// @public (undocumented) -class BeButtonState { - // (undocumented) - downRawPt: Point3d; - // (undocumented) - downTime: number; - // (undocumented) - downUorPt: Point3d; - // (undocumented) - init(downUorPt: Point3d, downRawPt: Point3d, downTime: number, isDown: boolean, isDoubleClick: boolean, isDragging: boolean, source: InputSource): void; - // (undocumented) - inputSource: InputSource; - // (undocumented) - isDoubleClick: boolean; - // (undocumented) - isDown: boolean; - // (undocumented) - isDragging: boolean; -} - -// @public -enum BeModifierKeys { - // (undocumented) - Alt = 4, - // (undocumented) - Control = 1, - // (undocumented) - None = 0, - // (undocumented) - Shift = 2 -} - -// @public -class BeTouchEvent extends BeButtonEvent { - constructor(touchInfo: TouchEvent); - // (undocumented) - clone(result?: BeTouchEvent): BeTouchEvent; - // (undocumented) - static findTouchById(list: TouchList, id: number): Touch | undefined; - // (undocumented) - static getTouchListCentroid(list: TouchList, vp: ScreenViewport): Point2d | undefined; - // (undocumented) - static getTouchPosition(touch: Touch, vp: ScreenViewport): Point2d; - // (undocumented) - readonly isDoubleTap: boolean; - // (undocumented) - readonly isSingleTap: boolean; - // (undocumented) - readonly isSingleTouch: boolean; - // (undocumented) - readonly isTwoFingerTap: boolean; - // (undocumented) - readonly isTwoFingerTouch: boolean; - // (undocumented) - setFrom(src: BeTouchEvent): void; - // (undocumented) - tapCount: number; - // (undocumented) - readonly touchCount: number; - // (undocumented) - touchInfo: TouchEvent; -} - -// @public -class BeWheelEvent extends BeButtonEvent { - constructor(wheelDelta?: number); - // (undocumented) - clone(result?: BeWheelEvent): BeWheelEvent; - // (undocumented) - setFrom(src: BeWheelEvent): void; - // (undocumented) - wheelDelta: number; -} - -// @public -interface ButtonGroupEditorParams extends BasePropertyEditorParams { - // (undocumented) - buttons: IconDefinition[]; - // (undocumented) - type: PropertyEditorParamTypes.ButtonGroupData; -} - -// @public -interface CanvasDecoration { - decorationCursor?: string; - drawDecoration(ctx: CanvasRenderingContext2D): void; - onMouseButton?(ev: BeButtonEvent): boolean; - onMouseEnter?(ev: BeButtonEvent): void; - onMouseLeave?(): void; - onMouseMove?(ev: BeButtonEvent): void; - onWheel?(ev: BeWheelEvent): boolean; - pick?(pt: XAndY): boolean; - position?: XAndY; -} - -// @public -class CategorySelectorState extends ElementState { - constructor(props: CategorySelectorProps, iModel: IModelConnection); - addCategories(arg: Id64Arg): void; - // (undocumented) - categories: Set; - changeCategoryDisplay(arg: Id64Arg, add: boolean): void; - dropCategories(arg: Id64Arg): void; - // (undocumented) - equalState(other: CategorySelectorState): boolean; - has(id: Id64String): boolean; - isCategoryViewed(categoryId: Id64String): boolean; - readonly name: string; - // (undocumented) - toJSON(): CategorySelectorProps; -} - -// @public -interface CheckBoxIconsEditorParams extends BasePropertyEditorParams { - // (undocumented) - offIconDefinition?: IconDefinition; - // (undocumented) - onIconDefinition?: IconDefinition; - // (undocumented) - type: PropertyEditorParamTypes.CheckBoxIcons; -} - -// @public -enum ClippingType { - Mask = 1, - None = 0, - Planes = 2 -} - -// @public -enum ClipResult { - NewElements = 1, - NotSupported = 0, - OriginalElements = 2 -} - -// @public -class Clips { - // (undocumented) - clear(): void; - // (undocumented) - readonly count: number; - // (undocumented) - readonly isValid: boolean; - // WARNING: The type "TextureHandle" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - set(numPlanes: number, texture: TextureHandle): void; - // WARNING: The type "TextureHandle" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly texture: TextureHandle | undefined; -} - -// @public -class Cluster { - constructor(markers: T[]); - // (undocumented) - clusterMarker?: Marker; - // (undocumented) - readonly markers: T[]; - // (undocumented) - readonly rect: ViewRect; -} - -// @public (undocumented) -enum CompassMode { - // (undocumented) - Polar = 0, - // (undocumented) - Rectangular = 1 -} - -// @public (undocumented) -enum ContextMode { - // (undocumented) - Locked = 0, - // (undocumented) - None = 15, - // (undocumented) - XAxis = 1, - // (undocumented) - XAxis2 = 4, - // (undocumented) - YAxis = 2, - // (undocumented) - ZAxis = 3 -} - -// @public (undocumented) -class ContextRealityModelState implements TileTreeModelState { - constructor(props: ContextRealityModelProps, iModel: IModelConnection); - // (undocumented) - protected _iModel: IModelConnection; - // (undocumented) - protected _modelId: Id64String; - // (undocumented) - protected _name: string; - // (undocumented) - protected _tilesetUrl: string; - // (undocumented) - protected _tileTreeState: TileTreeState; - static findAvailableRealityModels(projectid: string, modelCartographicRange?: CartographicRange | undefined): Promise; - intersectsProjectExtents(): Promise; - // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly loadStatus: TileTree.LoadStatus; - // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadTileTree(_edgesRequired: boolean, _animationId?: Id64String, _asClassifier?: boolean, _classifierExpansion?: number): TileTree.LoadStatus; - matches(other: ContextRealityModelState): boolean; - // (undocumented) - readonly name: string; - // (undocumented) - readonly tileTree: TileTree | undefined; - // (undocumented) - readonly treeModelId: Id64String; - // (undocumented) - readonly url: string; -} - -// @public -class ConversionData implements UnitConversion { - // (undocumented) - factor: number; - // (undocumented) - offset: number; -} - -// @public (undocumented) -enum CoordinateLockOverrides { - // (undocumented) - ACS = 2, - // (undocumented) - All = 65535, - // (undocumented) - Grid = 4, - // (undocumented) - None = 0 -} - -// @public -enum CoordSource { - ElemSnap = 3, - Precision = 1, - TentativePoint = 2, - User = 0 -} - -// @public -enum CoordSystem { - Npc = 1, - View = 0, - World = 2 -} - -// @public (undocumented) -class CurrentInputState { - // (undocumented) - adjustLastDataPoint(ev: BeButtonEvent): void; - // (undocumented) - button: BeButtonState[]; - // (undocumented) - changeButtonToDownPoint(ev: BeButtonEvent): void; - // (undocumented) - clearKeyQualifiers(): void; - // (undocumented) - clearViewport(vp: Viewport): void; - // (undocumented) - fromButton(vp: ScreenViewport, pt: XAndY, source: InputSource, applyLocks: boolean): void; - // (undocumented) - fromPoint(vp: ScreenViewport, pt: XAndY, source: InputSource): void; - // (undocumented) - readonly hasMotionStopped: boolean; - // (undocumented) - inputSource: InputSource; - // (undocumented) - readonly isAltDown: boolean; - // (undocumented) - readonly isControlDown: boolean; - // (undocumented) - isDragging(button: BeButton): boolean; - // (undocumented) - readonly isShiftDown: boolean; - // (undocumented) - isStartDrag(button: BeButton): boolean; - // (undocumented) - lastButton: BeButton; - // (undocumented) - lastMotion: Point2d; - // (undocumented) - lastTouchStart?: BeTouchEvent; - // (undocumented) - lastWheelEvent?: BeWheelEvent; - // (undocumented) - motionTime: number; - // (undocumented) - onButtonDown(button: BeButton): void; - // (undocumented) - onButtonUp(button: BeButton): void; - // (undocumented) - onInstallTool(): void; - // (undocumented) - onMotion(pt2d: XAndY): void; - // (undocumented) - onStartDrag(button: BeButton): void; - // (undocumented) - qualifiers: BeModifierKeys; - // (undocumented) - rawPoint: Point3d; - // (undocumented) - setKeyQualifiers(ev: MouseEvent | KeyboardEvent | TouchEvent): void; - // (undocumented) - toEvent(ev: BeButtonEvent, useSnap: boolean): void; - // (undocumented) - toEventFromLastDataPoint(ev: BeButtonEvent): void; - // (undocumented) - touchTapCount?: number; - // (undocumented) - touchTapTimer?: number; - // (undocumented) - uorPoint: Point3d; - // (undocumented) - updateDownPoint(ev: BeButtonEvent): void; - // (undocumented) - viewPoint: Point3d; - // (undocumented) - viewport?: ScreenViewport; - // (undocumented) - readonly wasMotion: boolean; -} - -// @public (undocumented) -enum CurrentState { - // (undocumented) - Active = 3, - // (undocumented) - Deactivated = 1, - // (undocumented) - Inactive = 2, - // (undocumented) - NotEnabled = 0 -} - -// @public -class DecorateContext extends RenderContext { - constructor(vp: ScreenViewport, _decorations: Decorations); - addCanvasDecoration(decoration: CanvasDecoration, atFront?: boolean): void; - addDecoration(type: GraphicType, decoration: RenderGraphic): void; - addDecorationFromBuilder(builder: GraphicBuilder): void; - addHtmlDecoration(decoration: HTMLElement): void; - createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder; - decorationDiv: HTMLDivElement; - // (undocumented) - static drawGrid(graphic: GraphicBuilder, doIsogrid: boolean, drawDots: boolean, gridOrigin: Point3d, xVec: Vector3d, yVec: Vector3d, gridsPerRef: number, repetitions: Point2d, vp: Viewport): void; - // (undocumented) - drawStandardGrid(gridOrigin: Point3d, rMatrix: Matrix3d, spacing: XAndY, gridsPerRef: number, isoGrid?: boolean, fixedRepetitions?: Point2d): void; - // (undocumented) - static getGridDimension(props: { - nRepetitions: number; - min: number; - }, gridSize: number, org: Point3d, dir: Point3d, points: Point3d[]): boolean; - // (undocumented) - static getGridPlaneViewIntersections(planePoint: Point3d, planeNormal: Vector3d, vp: Viewport, useProjectExtents: boolean): Point3d[]; - readonly screenViewport: ScreenViewport; - setSkyBox(graphic: RenderGraphic): void; - setViewBackground(graphic: RenderGraphic): void; -} - -// @public -class DecorationAnimator implements ViewportAnimator { - constructor(duration: BeDuration); - // (undocumented) - animate(vp: Viewport): RemoveMe; - animateDecorations(_viewport: Viewport, _durationPercent: number): RemoveMe; - // (undocumented) - onInterrupted(vp: Viewport): void; -} - -// @public -class Decorations implements IDisposable { - // (undocumented) - canvasDecorations?: CanvasDecorationList; - // (undocumented) - dispose(): void; - normal: GraphicList | undefined; - // (undocumented) - skyBox: RenderGraphic | undefined; - viewBackground: RenderGraphic | undefined; - viewOverlay: GraphicList | undefined; - world: GraphicList | undefined; - worldOverlay: GraphicList | undefined; -} - -// @public -interface Decorator { - decorate(context: DecorateContext): void; - getDecorationGeometry?(hit: HitDetail): GeometryStreamProps | undefined; - getDecorationToolTip?(hit: HitDetail): Promise; - onDecorationButtonEvent?(hit: HitDetail, ev: BeButtonEvent): Promise; - testDecorationHit?(id: string): boolean; -} - -// @public (undocumented) -class DefaultViewTouchTool extends ViewManip { - constructor(startEv: BeTouchEvent, ev: BeTouchEvent); - // (undocumented) - onDataButtonDown(_ev: BeButtonEvent): Promise; - // (undocumented) - onDataButtonUp(_ev: BeButtonEvent): Promise; - // (undocumented) - onStart(ev: BeTouchEvent): void; - // (undocumented) - onTouchCancel(_ev: BeTouchEvent): Promise; - // (undocumented) - onTouchComplete(_ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMove(ev: BeTouchEvent): Promise; - // (undocumented) - static toolId: string; -} - -// @public -class DepthRangeNpc { - constructor(minimum?: number, maximum?: number); - // (undocumented) - maximum: number; - middle(): number; - // (undocumented) - minimum: number; -} - -// @public -class DisplayStyle2dState extends DisplayStyleState { - constructor(props: DisplayStyleProps, iModel: IModelConnection); - // (undocumented) - readonly settings: DisplayStyleSettings; -} - -// @public -class DisplayStyle3dState extends DisplayStyleState { - constructor(props: DisplayStyleProps, iModel: IModelConnection); - environment: Environment; - // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) - loadSkyBoxParams(system: RenderSystem): SkyBox.CreateParams | undefined; - // (undocumented) - readonly settings: DisplayStyle3dSettings; - // (undocumented) - skyboxMaterial: RenderMaterial | undefined; -} - -// @public -class DisplayStyleState extends ElementState, implements DisplayStyleProps { - constructor(props: DisplayStyleProps, iModel: IModelConnection); - analysisStyle: AnalysisStyle | undefined; - backgroundColor: ColorDef; - // WARNING: The type "BackgroundMapState" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly backgroundMap: BackgroundMapState; - // (undocumented) - readonly backgroundMapPlane: Plane3dByOriginAndUnitNormal | undefined; - // (undocumented) - containsContextRealityModel(contextRealityModel: ContextRealityModelState): boolean; - // (undocumented) - contextRealityModels: ContextRealityModelState[]; - dropSubCategoryOverride(id: Id64String): void; - // (undocumented) - equalState(other: DisplayStyleState): boolean; - // (undocumented) - forEachContextRealityModel(func: (model: TileTreeModelState) => void): void; - // (undocumented) - getAnimationBranches(scheduleTime: number): AnimationBranchStates | undefined; - getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined; - readonly hasSubCategoryOverride: boolean; - // (undocumented) - is3d(): this is DisplayStyle3dState; - monochromeColor: ColorDef; - readonly name: string; - overrideSubCategory(id: Id64String, ovr: SubCategoryOverride): void; - // WARNING: The type "RenderScheduleState.Script" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly scheduleScript: RenderScheduleState.Script | undefined; - // (undocumented) - setBackgroundMap(mapProps: BackgroundMapProps): void; - // (undocumented) - readonly settings: DisplayStyleSettings; - viewFlags: ViewFlags; -} - -// @public -class DrawingModelState extends GeometricModel2dState { -} - -// @public -class DrawingViewState extends ViewState2d { - // (undocumented) - static readonly className: string; - // (undocumented) - static createFromProps(props: ViewStateProps, iModel: IModelConnection): ViewState | undefined; - // (undocumented) - getExtentLimits: { - max: number; - min: number; - } -} - -// @public -class DynamicsContext extends RenderContext { - addGraphic(graphic: RenderGraphic): void; - // (undocumented) - changeDynamics(): void; -} - -// @public -module EditManipulator { - // (undocumented) - enum EventType { - // (undocumented) - Accept = 2, - // (undocumented) - Cancel = 1, - // (undocumented) - Synch = 0 - } - - // (undocumented) - class HandleProvider { - constructor(iModel: IModelConnection); - // (undocumented) - protected _isActive: boolean; - // (undocumented) - protected _removeDecorationListener?: () => void; - // (undocumented) - protected _removeManipulatorToolListener?: () => void; - // (undocumented) - protected _removeSelectionListener?: () => void; - // (undocumented) - protected clearControls(): void; - protected abstract createControls(): Promise; - // (undocumented) - decorate(_context: DecorateContext): void; - // (undocumented) - iModel: IModelConnection; - protected abstract modifyControls(_hit: HitDetail, _ev: BeButtonEvent): boolean; - // (undocumented) - onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise; - // (undocumented) - protected onDoubleClick(_hit: HitDetail, _ev: BeButtonEvent): Promise; - // WARNING: The type "EventType" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - onManipulatorEvent(_eventType: EventType): void; - // (undocumented) - onManipulatorToolEvent(_tool: Tool, event: ManipulatorToolEvent): void; - // (undocumented) - protected onRightClick(_hit: HitDetail, _ev: BeButtonEvent): Promise; - // (undocumented) - onSelectionChanged(iModel: IModelConnection, _eventType: SelectEventType, _ids?: Set): void; - // (undocumented) - protected stop(): void; - // (undocumented) - protected updateControls(): Promise; - // (undocumented) - protected updateDecorationListener(add: boolean): void; - } - - // (undocumented) - class HandleTool extends InputCollector { - // WARNING: The type "HandleProvider" needs to be exported by the package (e.g. added to index.ts) - constructor(manipulator: HandleProvider); - // (undocumented) - protected abstract accept(_ev: BeButtonEvent): boolean; - // (undocumented) - protected cancel(_ev: BeButtonEvent): boolean; - // (undocumented) - static hidden: boolean; - protected init(): void; - // WARNING: The type "HandleProvider" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - manipulator: HandleProvider; - // (undocumented) - onDataButtonDown(ev: BeButtonEvent): Promise; - // (undocumented) - onPostInstall(): void; - // (undocumented) - onResetButtonUp(ev: BeButtonEvent): Promise; - // (undocumented) - onTouchCancel(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchComplete(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMove(ev: BeTouchEvent): Promise; - // (undocumented) - static toolId: string; - } - - // (undocumented) - class HandleUtils { - static getArrowShape(baseStart?: number, baseWidth?: number, tipStart?: number, tipEnd?: number, tipWidth?: number, flangeStart?: number, flangeWidth?: number): Point3d[]; - static getArrowTransform(vp: Viewport, base: Point3d, direction: Vector3d, sizeInches: number): Transform | undefined; - // (undocumented) - static getBoresite(origin: Point3d, vp: Viewport, checkAccuDraw?: boolean, checkACS?: boolean): Ray3d; - // (undocumented) - static projectPointToLineInView(spacePt: Point3d, linePt: Point3d, lineDirection: Vector3d, vp: Viewport, checkAccuDraw?: boolean, checkACS?: boolean): Point3d | undefined; - // (undocumented) - static projectPointToPlaneInView(spacePt: Point3d, planePt: Point3d, planeNormal: Vector3d, vp: Viewport, checkAccuDraw?: boolean, checkACS?: boolean): Point3d | undefined; - } - -} - -// @public -interface EditorPosition { - // (undocumented) - columnPriority: number; - columnSpan?: number; - horizontalAlignment?: TsHorizontalAlignment; - // (undocumented) - rowPriority: number; - rowSpan?: number; - verticalAlignment?: TsVerticalAlignment; -} - -// @public (undocumented) -class ElementAgenda { - constructor(iModel: IModelConnection); - add(arg: Id64Arg): boolean; - clear(): void; - // (undocumented) - readonly count: number; - // (undocumented) - readonly elements: string[]; - find(id: Id64String): boolean; - // WARNING: The type "ModifyElementSource.Unknown" needs to be exported by the package (e.g. added to index.ts) - getSource(): ModifyElementSource.Unknown | ModifyElementSource; - // (undocumented) - readonly groupMarks: GroupMark[]; - // (undocumented) - has(id: string): boolean; - hilite(): void; - // (undocumented) - hilitedState: HilitedState; - hiliteOnAdd: boolean; - // (undocumented) - iModel: IModelConnection; - invert(arg: Id64Arg): boolean; - // (undocumented) - readonly isEmpty: boolean; - // (undocumented) - readonly length: number; - popGroup(): void; - // (undocumented) - remove(arg: Id64Arg): boolean; - setSource(val: ModifyElementSource): void; -} - -// @public (undocumented) -class ElementLocateManager { - // (undocumented) - readonly apertureInches: number; - // (undocumented) - clear(): void; - // (undocumented) - currHit?: HitDetail; - // (undocumented) - doLocate(response: LocateResponse, newSearch: boolean, testPoint: Point3d, view: ScreenViewport | undefined, source: InputSource, filterHits?: boolean): Promise; - // (undocumented) - filterHit(hit: HitDetail, _action: LocateAction, out: LocateResponse): Promise; - static getFailureMessageKey(key: string): string; - // (undocumented) - getNextHit(): HitDetail | undefined; - getPreLocatedHit(): HitDetail | undefined; - // (undocumented) - hitList?: HitList; - // (undocumented) - initLocateOptions(): void; - // (undocumented) - initToolLocate(): void; - // (undocumented) - onInitialized(): void; - // (undocumented) - readonly options: LocateOptions; - // (undocumented) - readonly picker: ElementPicker; - // (undocumented) - setCurrHit(hit?: HitDetail): void; - // (undocumented) - setHitList(list?: HitList): void; - // (undocumented) - readonly touchApertureInches: number; -} - -// @public (undocumented) -class ElementPicker { - doPick(vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): number; - // (undocumented) - empty(): void; - getHit(i: number): HitDetail | undefined; - getHitList(takeOwnership: boolean): HitList; - // (undocumented) - getNextHit(): HitDetail | undefined; - // (undocumented) - hitList?: HitList; - // (undocumented) - readonly pickPointWorld: Point3d; - // (undocumented) - resetCurrentHit(): void; - // (undocumented) - testHit(hit: HitDetail, vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): boolean; - // (undocumented) - viewport?: Viewport; -} - -// @public -class ElementState extends EntityState, implements ElementProps { - constructor(props: ElementProps, iModel: IModelConnection); - // (undocumented) - readonly code: Code; - // (undocumented) - readonly federationGuid?: GuidString; - // (undocumented) - readonly model: Id64String; - // (undocumented) - readonly parent?: RelatedElement; - // (undocumented) - toJSON(): ElementProps; - // (undocumented) - readonly userLabel?: string; -} - -// @public -enum ElemMethod { - Add = 0, - Invert = 1 -} - -// @public -enum ElemSource { - Fence = 1, - Pick = 0, - SelectionSet = 2 -} - -// @public -class EmphasizeElements implements FeatureOverrideProvider { - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - addFeatureOverrides(overrides: FeatureSymbology.Overrides, vp: Viewport): void; - static clear(vp: Viewport, inactiveOnly?: boolean): void; - clearAlwaysDrawnElements(vp: Viewport): boolean; - clearEmphasizedElements(vp: Viewport): boolean; - clearHiddenElements(vp: Viewport): boolean; - clearIsolatedElements(vp: Viewport): boolean; - clearNeverDrawnElements(vp: Viewport): boolean; - clearOverriddenElements(vp: Viewport, key?: number): boolean; - // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected createAppearanceFromKey(key: number): FeatureSymbology.Appearance; - // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) - createDefaultAppearance(): FeatureSymbology.Appearance; - // (undocumented) - protected createOverrideKey(color: ColorDef, override: FeatureOverrideType): number | undefined; - // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) - readonly defaultAppearance: FeatureSymbology.Appearance | undefined; - // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) - emphasizeElements(ids: Id64Arg, vp: Viewport, defaultAppearance?: FeatureSymbology.Appearance, replace?: boolean): boolean; - // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) - emphasizeSelectedElements(vp: Viewport, defaultAppearance?: FeatureSymbology.Appearance, replace?: boolean, clearSelection?: boolean): boolean; - // (undocumented) - fromJSON(props: EmphasizeElementsProps, vp: Viewport): boolean; - static get(vp: Viewport): EmphasizeElements | undefined; - getAlwaysDrawnElements(vp: Viewport): Id64Set | undefined; - getEmphasizedElements(vp: Viewport): Id64Set | undefined; - getHiddenElements(vp: Viewport): Id64Set | undefined; - getIsolatedElements(vp: Viewport): Id64Set | undefined; - getNeverDrawnElements(vp: Viewport): Id64Set | undefined; - static getOrCreate(vp: Viewport): EmphasizeElements; - getOverriddenElements(): Map | undefined; - getOverriddenElementsByKey(key: number): Id64Set | undefined; - getOverrideFromKey(key: number, color: ColorDef): FeatureOverrideType; - hideElements(ids: Id64Arg, vp: Viewport, replace?: boolean): boolean; - hideSelectedElements(vp: Viewport, replace?: boolean, clearSelection?: boolean): boolean; - isActive(vp: Viewport): boolean; - isolateElements(ids: Id64Arg, vp: Viewport, replace?: boolean): boolean; - isolateSelectedElements(vp: Viewport, replace?: boolean, clearSelection?: boolean): boolean; - overrideElements(ids: Id64Arg, vp: Viewport, color: ColorDef, override?: FeatureOverrideType, replace?: boolean): boolean; - overrideSelectedElements(vp: Viewport, color: ColorDef, override?: FeatureOverrideType, replace?: boolean, clearSelection?: boolean): boolean; - setAlwaysDrawnElements(ids: Id64Arg, vp: Viewport, exclusive?: boolean, replace?: boolean): boolean; - setNeverDrawnElements(ids: Id64Arg, vp: Viewport, replace?: boolean): boolean; - // (undocumented) - toJSON(vp: Viewport): EmphasizeElementsProps; -} - -// @public (undocumented) -interface EmphasizeElementsProps { - // (undocumented) - alwaysDrawn?: Id64Set; - // (undocumented) - appearanceOverride?: AppearanceOverrideProps[]; - // (undocumented) - defaultAppearance?: FeatureSymbology.AppearanceProps; - // (undocumented) - isAlwaysDrawnExclusive?: boolean; - // (undocumented) - neverDrawn?: Id64Set; -} - -// @public -class EntityState implements EntityProps { - constructor(props: EntityProps, iModel: IModelConnection, _state?: EntityState); - // (undocumented) - readonly classFullName: string; - static readonly className: string; - clone(iModel?: IModelConnection): this; - // (undocumented) - equals(other: this): boolean; - static getClassFullName(): string; - // (undocumented) - readonly id: Id64String; - // (undocumented) - readonly iModel: IModelConnection; - // (undocumented) - readonly jsonProperties: { - [key: string]: any; - } - // (undocumented) - static schemaName: string; - // (undocumented) - static readonly sqlName: string; - // (undocumented) - toJSON(): EntityProps; -} - -// @public -interface EnumerationChoice { - // (undocumented) - label: string; - // (undocumented) - value: string | number; -} - -// @public -interface EnumerationChoicesInfo { - // (undocumented) - choices: EnumerationChoice[]; - // (undocumented) - isStrict?: boolean; - // (undocumented) - maxDisplayedRows?: number; -} - -// @public -class Environment implements EnvironmentProps { - constructor(json?: EnvironmentProps); - // (undocumented) - readonly ground: GroundPlane; - // (undocumented) - readonly sky: SkyBox; - // (undocumented) - toJSON(): EnvironmentProps; -} - -// @public -enum ErrorNums { - NoFence = 0, - NoFenceElems = 1, - NoFenceElemsOutside = 2, - NoSSElems = 3, - NotSupportedElmType = 4 -} - -// @public -class EventController { - constructor(vp: ScreenViewport); - // (undocumented) - destroy(): void; - // (undocumented) - vp: ScreenViewport; -} - -// @public (undocumented) -enum EventHandled { - // (undocumented) - No = 0, - // (undocumented) - Yes = 1 -} - -// @public -export function extractImageSourceDimensions(source: ImageSource): Promise; - -// @public -interface FeatureOverrideProvider { - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addFeatureOverrides(overrides: FeatureSymbology.Overrides, viewport: Viewport): void; -} - -// @public -enum FeatureOverrideType { - // (undocumented) - AlphaOnly = 1, - // (undocumented) - ColorAndAlpha = 2, - // (undocumented) - ColorOnly = 0 -} - -// @public -module FeatureSymbology { - class Appearance implements AppearanceProps { - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - static readonly defaults: Appearance; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - equals(other: Appearance): boolean; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - extendAppearance(base: Appearance): Appearance; - // WARNING: The type "AppearanceProps" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static fromJSON(props?: AppearanceProps): Appearance; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - static fromRgb(color: ColorDef): Appearance; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - static fromRgba(color: ColorDef): Appearance; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - static fromSubCategoryOverride(ovr: SubCategoryOverride): Appearance; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - static fromTransparency(transparencyValue: number): Appearance; - readonly ignoresMaterial?: true | undefined; - // (undocumented) - readonly isFullyTransparent: boolean; - readonly linePixels?: LinePixels; - readonly nonLocatable?: true | undefined; - // (undocumented) - readonly overridesLinePixels: boolean; - // (undocumented) - readonly overridesRgb: boolean; - // (undocumented) - readonly overridesSymbology: boolean; - // (undocumented) - readonly overridesTransparency: boolean; - // (undocumented) - readonly overridesWeight: boolean; - readonly rgb?: RgbColor; - // WARNING: The type "AppearanceProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - toJSON(): AppearanceProps; - readonly transparency?: number; - readonly weight?: number; - } - - interface AppearanceProps { - ignoresMaterial?: true | undefined; - linePixels?: LinePixels; - nonLocatable?: true | undefined; - rgb?: RgbColor; - transparency?: number; - weight?: number; - } - - class Overrides { - constructor(view?: ViewState); - protected readonly _alwaysDrawn: Id64.Uint32Set; - protected _constructions: boolean; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - protected _defaultOverrides: Appearance; - protected _dimensions: boolean; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - protected readonly _elementOverrides: Id64.Uint32Map; - protected _lineWeights: boolean; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - protected readonly _modelOverrides: Id64.Uint32Map; - protected readonly _neverDrawn: Id64.Uint32Set; - protected _patterns: boolean; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - protected readonly _subCategoryOverrides: Id64.Uint32Map; - protected readonly _visibleSubCategories: Id64.Uint32Set; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - readonly animationNodeOverrides: Map; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - readonly defaultOverrides: Appearance; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - protected getClassifierAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, modelLo: number, modelHi: number): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected getElementOverrides(idLo: number, idHi: number, animationNodeId: number): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - getElementOverridesById(id: Id64String): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - getFeatureAppearance(feature: Feature, modelId: Id64String, type?: BatchType): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected getModelOverrides(idLo: number, idHi: number): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - getModelOverridesById(id: Id64String): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected getSubCategoryOverrides(idLo: number, idHi: number): Appearance | undefined; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - getSubCategoryOverridesById(id: Id64String): Appearance | undefined; - initFromView(view: ViewState): void; - // (undocumented) - protected isAlwaysDrawn(idLo: number, idHi: number): boolean; - isAlwaysDrawnExclusive: boolean; - // (undocumented) - isClassVisible(geomClass: GeometryClass): boolean; - isFeatureVisible(feature: Feature): boolean; - // (undocumented) - protected isNeverDrawn(elemIdLo: number, elemIdHi: number, animationNodeId: number): boolean; - isSubCategoryIdVisible(id: Id64String): boolean; - protected isSubCategoryVisible(idLo: number, idHi: number): boolean; - readonly lineWeights: boolean; - readonly neverDrawnAnimationNodes: Set; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - overrideAnimationNode(id: number, app: Appearance): void; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - overrideElement(id: Id64String, app: Appearance, replaceExisting?: boolean): void; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - overrideModel(id: Id64String, app: Appearance, replaceExisting?: boolean): void; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - overrideSubCategory(id: Id64String, app: Appearance, replaceExisting?: boolean): void; - setAlwaysDrawn(id: Id64String): void; - setAlwaysDrawnSet(ids: Id64Set, exclusive: boolean): void; - setAnimationNodeNeverDrawn(id: number): void; - // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) - setDefaultOverrides(appearance: Appearance, replaceExisting?: boolean): void; - setNeverDrawn(id: Id64String): void; - setNeverDrawnSet(ids: Id64Set): void; - setVisibleSubCategory(id: Id64String): void; - } - -} - -// @public -enum FenceClipMode { - Copy = 3, - None = 0, - Original = 1 -} - -// @public -class FenceParams { - // (undocumented) - clip?: ClipVector; - // (undocumented) - clipMode: FenceClipMode; - // (undocumented) - readonly fenceRangeNPC: Range3d; - // (undocumented) - hasOverlaps: boolean; - // (undocumented) - onTolerance: number; - // (undocumented) - overlapMode: boolean; - // (undocumented) - viewport?: Viewport; -} - -// @public -class FitViewTool extends ViewTool { - constructor(viewport: ScreenViewport, oneShot: boolean, doAnimate?: boolean); - // (undocumented) - doAnimate: boolean; - // (undocumented) - doFit(viewport: ScreenViewport, oneShot: boolean, doAnimate?: boolean): boolean; - // (undocumented) - onDataButtonDown(_ev: BeButtonEvent): Promise; - // (undocumented) - oneShot: boolean; - // (undocumented) - onPostInstall(): void; - // (undocumented) - static toolId: string; -} - -// @public (undocumented) -class Flags { - // (undocumented) - animateRotation: boolean; - // (undocumented) - auxRotationPlane: RotationMode; - // (undocumented) - baseMode: number; - // (undocumented) - baseRotation: RotationMode; - // (undocumented) - bearingFixToPlane2D: boolean; - // (undocumented) - contextRotMode: number; - // (undocumented) - dialogNeedsUpdate: boolean; - // (undocumented) - fixedOrg: boolean; - // (undocumented) - haveValidOrigin: boolean; - // (undocumented) - ignoreDataButton: boolean; - // (undocumented) - inDataPoint: boolean; - // (undocumented) - indexLocked: boolean; - // (undocumented) - lockedRotation: boolean; - // (undocumented) - pointIsOnPlane: boolean; - // (undocumented) - redrawCompass: boolean; - // (undocumented) - rotationNeedsUpdate: boolean; - // (undocumented) - softAngleLock: boolean; -} - -// @public -class FlyViewTool extends ViewManip { - constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// @public (undocumented) -export function fromSumOf(p: Point3d, v: Vector3d, scale: number, out?: Point3d): Point3d; - -// @public -class FrustumUniforms { - constructor(); - // (undocumented) - readonly farPlane: number; - // (undocumented) - readonly frustum: Float32Array; - // (undocumented) - readonly frustumPlanes: Float32Array; - // (undocumented) - readonly is2d: boolean; - // (undocumented) - readonly nearPlane: number; - // (undocumented) - setFrustum(nearPlane: number, farPlane: number, type: FrustumUniformType): void; - // (undocumented) - setPlanes(top: number, bottom: number, left: number, right: number): void; - // (undocumented) - readonly type: FrustumUniformType; -} - -// @public (undocumented) -enum FrustumUniformType { - // (undocumented) - Orthographic = 1, - // (undocumented) - Perspective = 2, - // (undocumented) - TwoDee = 0 -} - -// @public (undocumented) -class FuzzySearch { - onGetMultiWordSearchOptions(): Fuse.FuseOptions; - onGetSingleWordSearchOptions(): Fuse.FuseOptions; - search(searchedObjects: T[], keys: Array, pattern: string): FuzzySearchResults; -} - -// @public -interface FuzzySearchResult { - getBoldMask(): boolean[]; - getMatchedKey(): string; - getMatchedValue(): string; - getResult(): T; -} - -// @public -class FuzzySearchResults implements Iterable { - // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores - // (undocumented) - [Symbol.iterator](): any; - constructor(results: any[] | undefined); - // (undocumented) - getResult(resultIndex: number): FuzzySearchResult | undefined; - // (undocumented) - readonly length: number; - // (undocumented) - results: any[]; -} - -// @public (undocumented) -class GeoConverter { - constructor(iModel: IModelConnection, datum: string); - // (undocumented) - getGeoCoordinatesFromIModelCoordinates(iModelPoints: XYZProps[]): Promise; - // (undocumented) - getIModelCoordinatesFromGeoCoordinates(geoPoints: XYZProps[]): Promise; -} - -// @public -class GeometricModel2dState extends GeometricModelState, implements GeometricModel2dProps { - constructor(props: GeometricModel2dProps, iModel: IModelConnection); - // (undocumented) - readonly asGeometricModel2d: GeometricModel2dState; - // (undocumented) - readonly globalOrigin: Point2d; - readonly is3d: boolean; - // (undocumented) - toJSON(): GeometricModel2dProps; -} - -// @public -class GeometricModel3dState extends GeometricModelState { - // (undocumented) - readonly asGeometricModel3d: GeometricModel3dState; - readonly is3d: boolean; -} - -// @public -class GeometricModelState extends ModelState, implements TileTreeModelState { - // (undocumented) - protected _classifierTileTreeState: TileTreeState; - // (undocumented) - protected _tileTreeState: TileTreeState; - // (undocumented) - readonly asGeometricModel: GeometricModelState; - // (undocumented) - readonly classifierTileTree: TileTree | undefined; - // (undocumented) - getOrLoadTileTree(edgesRequired: boolean): TileTree | undefined; - readonly is2d: boolean; - readonly is3d: boolean; - // (undocumented) - readonly isGeometricModel: boolean; - // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadStatus: TileTree.LoadStatus; - // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadTileTree(edgesRequired: boolean, animationId?: Id64String, asClassifier?: boolean, classifierExpansion?: number): TileTree.LoadStatus; - // (undocumented) - onIModelConnectionClose(): void; - // (undocumented) - readonly tileTree: TileTree | undefined; - // (undocumented) - readonly treeModelId: Id64String; -} - -// @public -class GeoServices { - constructor(iModel: IModelConnection); - // (undocumented) - getConverter(datum?: string): GeoConverter; -} - -// @public -export function getImageSourceFormatForMimeType(mimeType: string): ImageSourceFormat | undefined; - -// @public -export function getImageSourceMimeType(format: ImageSourceFormat): string; - -// @public -class GraphicBranch implements IDisposable, RenderMemory.Consumer { - constructor(ownsEntries?: boolean); - // (undocumented) - add(graphic: RenderGraphic): void; - animationId?: string; - clear(): void; - // WARNING: The type "RenderMemory.Statistics" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - collectStatistics(stats: RenderMemory.Statistics): void; - // (undocumented) - dispose(): void; - readonly entries: RenderGraphic[]; - // (undocumented) - getViewFlags(flags: ViewFlags, out?: ViewFlags): ViewFlags; - // (undocumented) - readonly isEmpty: boolean; - readonly ownsEntries: boolean; - // (undocumented) - setViewFlagOverrides(ovr: ViewFlag.Overrides): void; - // (undocumented) - setViewFlags(flags: ViewFlags): void; - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - symbologyOverrides?: FeatureSymbology.Overrides; -} - -// @public -class GraphicBuilder { - protected constructor(placement: Transform | undefined, type: GraphicType, viewport: Viewport, pickId?: Id64String); - abstract activateGraphicParams(graphicParams: GraphicParams): void; - abstract addArc(arc: Arc3d, isEllipse: boolean, filled: boolean): void; - abstract addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void; - abstract addLineString(points: Point3d[]): void; - abstract addLineString2d(points: Point2d[], zDepth: number): void; - abstract addLoop(loop: Loop): void; - abstract addPath(path: Path): void; - abstract addPointString(points: Point3d[]): void; - abstract addPointString2d(points: Point2d[], zDepth: number): void; - abstract addPolyface(meshData: Polyface, filled: boolean): void; - addRangeBox(range: Range3d): void; - abstract addShape(points: Point3d[]): void; - abstract addShape2d(points: Point2d[], zDepth: number): void; - convertToLineStringParams(...lines: Array<[number, Point3d[]]>): Array<{ - numPoints: number; - points: Point3d[]; - }>; - abstract finish(): RenderGraphic; - // (undocumented) - readonly iModel: IModelConnection; - // (undocumented) - readonly isOverlay: boolean; - // (undocumented) - readonly isSceneGraphic: boolean; - // (undocumented) - readonly isViewBackground: boolean; - // (undocumented) - readonly isViewCoordinates: boolean; - // (undocumented) - readonly isWorldCoordinates: boolean; - // (undocumented) - pickId?: string; - placement: Transform; - setBlankingFill(fillColor: ColorDef): void; - setSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels?: LinePixels): void; - readonly type: GraphicType; - readonly viewport: Viewport; -} - -// @public -enum GraphicType { - Scene = 1, - ViewBackground = 0, - ViewOverlay = 4, - WorldDecoration = 2, - WorldOverlay = 3 -} - -// @public -enum GridOrientationType { - AuxCoord = 4, - View = 0, - // (undocumented) - WorldXY = 1, - // (undocumented) - WorldXZ = 3, - // (undocumented) - WorldYZ = 2 -} - -// @public (undocumented) -interface GroupMark { - // (undocumented) - source: ModifyElementSource; - // (undocumented) - start: number; -} - -// @public -class HilitedSet { - constructor(iModel: IModelConnection); - clearAll(): void; - readonly elements: Set; - has(id: string): boolean; - // (undocumented) - iModel: IModelConnection; - isHilited(id: Id64String): boolean; - setHilite(arg: Id64Arg, onOff: boolean): void; - readonly size: number; -} - -// @public (undocumented) -enum HilitedState { - No = 2, - Unknown = 0, - Yes = 1 -} - -// @public -class HitDetail { - constructor(testPoint: Point3d, viewport: ScreenViewport, hitSource: HitSource, hitPoint: Point3d, sourceId: string, priority: HitPriority, distXY: number, distFraction: number, subCategoryId?: string | undefined, geometryClass?: GeometryClass | undefined); - clone(): HitDetail; - // (undocumented) - readonly distFraction: number; - // (undocumented) - readonly distXY: number; - draw(_context: DecorateContext): void; - // (undocumented) - readonly geometryClass?: GeometryClass | undefined; - getHitType(): HitDetailType; - getPoint(): Point3d; - getToolTip(): Promise; - // (undocumented) - readonly hitPoint: Point3d; - // (undocumented) - readonly hitSource: HitSource; - readonly isElementHit: boolean; - // (undocumented) - readonly isModelHit: boolean; - isSameHit(otherHit?: HitDetail): boolean; - // (undocumented) - readonly priority: HitPriority; - // (undocumented) - readonly sourceId: string; - // (undocumented) - readonly subCategoryId?: string | undefined; - // (undocumented) - readonly testPoint: Point3d; - // (undocumented) - readonly viewport: ScreenViewport; -} - -// @public (undocumented) -enum HitDetailType { - // (undocumented) - Hit = 1, - // (undocumented) - Intersection = 3, - // (undocumented) - Snap = 2 -} - -// @public -enum HitGeomType { - // (undocumented) - Arc = 4, - // (undocumented) - Curve = 3, - // (undocumented) - None = 0, - // (undocumented) - Point = 1, - // (undocumented) - Segment = 2, - // (undocumented) - Surface = 5 -} - -// @public -class HitList { - addHit(newHit: T): number; - compare(hit1: HitDetail | undefined, hit2: HitDetail | undefined): -1 | 1 | 0; - // (undocumented) - currHit: number; - // (undocumented) - dropNulls(): void; - // (undocumented) - empty(): void; - // (undocumented) - getCurrentHit(): T | undefined; - getHit(hitNum: number): T | undefined; - // (undocumented) - getNextHit(): T | undefined; - // (undocumented) - hits: T[]; - insertHit(i: number, hit: T): void; - // (undocumented) - readonly length: number; - removeCurrentHit(): void; - removeHit(hitNum: number): void; - removeHitsFrom(sourceId: string): boolean; - // (undocumented) - resetCurrentHit(): void; - // (undocumented) - setCurrentHit(hit: T): void; - setHit(i: number, p: T | undefined): void; -} - -// @public (undocumented) -interface HitListHolder { - // (undocumented) - setHitList(list: HitList | undefined): void; -} - -// @public -enum HitParentGeomType { - // (undocumented) - Mesh = 4, - // (undocumented) - None = 0, - // (undocumented) - Sheet = 2, - // (undocumented) - Solid = 3, - // (undocumented) - Text = 5, - // (undocumented) - Wire = 1 -} - -// @public (undocumented) -enum HitPriority { - // (undocumented) - NonPlanarEdge = 2, - // (undocumented) - NonPlanarSurface = 5, - // (undocumented) - PlanarEdge = 1, - // (undocumented) - PlanarSurface = 4, - // (undocumented) - SilhouetteEdge = 3, - // (undocumented) - Unknown = 6, - // (undocumented) - WireEdge = 0 -} - -// @public -enum HitSource { - // (undocumented) - AccuSnap = 3, - // (undocumented) - Application = 6, - // (undocumented) - DataPoint = 5, - // (undocumented) - EditAction = 7, - // (undocumented) - EditActionSS = 8, - // (undocumented) - FromUser = 1, - // (undocumented) - MotionLocate = 2, - // (undocumented) - None = 0, - // (undocumented) - TentativeSnap = 4 -} - -// @public -interface IconDefinition { - iconClass: string; - // (undocumented) - isEnabledFunction?: () => boolean; -} - -// @public -interface IconEditorParams extends BasePropertyEditorParams { - // (undocumented) - definition: IconDefinition; - // (undocumented) - type: PropertyEditorParamTypes.Icon; -} - -// @public -class IconSprites { - static emptyAll(): void; - static getSpriteFromUrl(spriteUrl: string): Sprite; -} - -// @public -class IdleTool extends InteractiveTool { - // (undocumented) - exitTool(): void; - // (undocumented) - static hidden: boolean; - // (undocumented) - onMiddleButtonUp(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseStartDrag(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseWheel(ev: BeWheelEvent): Promise; - // (undocumented) - onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; - // (undocumented) - onTouchTap(ev: BeTouchEvent): Promise; - // (undocumented) - run(): boolean; - // (undocumented) - static toolId: string; -} - -// @public -export function imageBufferToBase64EncodedPng(buffer: ImageBuffer): string | undefined; - -// @public -export function imageBufferToPngDataUrl(buffer: ImageBuffer): string | undefined; - -// @public -export function imageElementFromImageSource(source: ImageSource): Promise; - -// @public (undocumented) -export function imageElementFromUrl(url: string): Promise; - -// @public -class IModelApp { - // (undocumented) - protected static _imodelClient?: IModelClient; - // (undocumented) - protected static _initialized: boolean; - static accessToken?: AccessToken; - static accuDraw: AccuDraw; - static accuSnap: AccuSnap; - static applicationId: string; - // (undocumented) - static readonly features: FeatureGates; - // (undocumented) - static readonly hasRenderSystem: boolean; - static i18n: I18N; - // (undocumented) - static iModelClient: IModelClient; - // (undocumented) - static readonly initialized: boolean; - // (undocumented) - static locateManager: ElementLocateManager; - static notifications: NotificationManager; - protected static onStartup(): void; - static quantityFormatter: QuantityFormatter; - static readonly renderSystem: RenderSystem; - static sessionId: GuidString; - static settings: SettingsAdmin; - static shutdown(): void; - static startup(imodelClient?: IModelClient): void; - protected static supplyI18NOptions(): I18NOptions | undefined; - protected static supplyRenderSystem(): RenderSystem; - // (undocumented) - static tentativePoint: TentativePoint; - static tileAdmin: TileAdmin; - static toolAdmin: ToolAdmin; - static readonly tools: ToolRegistry; - static viewManager: ViewManager; -} - -// @public (undocumented) -class IModelConnection { -} - -// @public (undocumented) -class IModelTileLoader extends TileLoader { - constructor(iModel: IModelConnection, batchType: BatchType, edgesRequired?: boolean); - // (undocumented) - protected readonly _batchType: BatchType; - // (undocumented) - protected readonly _loadEdges: boolean; - // (undocumented) - protected static _viewFlagOverrides: ViewFlag.Overrides; - // (undocumented) - getChildrenProps(parent: Tile): Promise; - // (undocumented) - readonly maxDepth: number; - // WARNING: The type "Tile.LoadPriority" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly priority: Tile.LoadPriority; - // WARNING: The type "TileRequest.Response" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - requestTileContent(tile: Tile): Promise; - // WARNING: The type "Tile.Params" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - tileRequiresLoading(params: Tile.Params): boolean; - // (undocumented) - readonly viewFlagOverrides: ViewFlag.Overrides; -} - -// @public -class InputCollector extends InteractiveTool { - // (undocumented) - exitTool(): void; - // (undocumented) - onResetButtonUp(_ev: BeButtonEvent): Promise; - // (undocumented) - run(): boolean; -} - -// @public -enum InputSource { - Mouse = 1, - Touch = 2, - Unknown = 0 -} - -// @public -interface InstancedGraphicParams { - readonly count: number; - readonly featureIds?: Uint8Array; - readonly transforms: Float32Array; -} - -// @public -class InteractiveTool extends Tool { - applyToolSettingPropertyChange(_updatedValue: ToolSettingsPropertySyncItem): boolean; - beginDynamics(): void; - changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void; - decorate(_context: DecorateContext): void; - decorateSuspended(_context: DecorateContext): void; - endDynamics(): void; - // (undocumented) - abstract exitTool(): void; - filterHit(_hit: HitDetail, _out?: LocateResponse): Promise; - getCurrentButtonEvent(ev: BeButtonEvent): void; - getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined; - getToolTip(_hit: HitDetail): Promise; - initLocateElements(enableLocate?: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void; - // (undocumented) - isCompatibleViewport(_vp: Viewport, _isSelectedViewChange: boolean): boolean; - readonly isDynamicsStarted: boolean; - // (undocumented) - isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean; - onCleanup(): void; - onDataButtonDown(_ev: BeButtonEvent): Promise; - onDataButtonUp(_ev: BeButtonEvent): Promise; - onDynamicFrame(_ev: BeButtonEvent, _context: DynamicsContext): void; - onInstall(): boolean; - onKeyTransition(_wentDown: boolean, _keyEvent: KeyboardEvent): Promise; - onMiddleButtonDown(_ev: BeButtonEvent): Promise; - onMiddleButtonUp(_ev: BeButtonEvent): Promise; - onModifierKeyTransition(_wentDown: boolean, _modifier: BeModifierKeys, _event: KeyboardEvent): Promise; - onMouseEndDrag(ev: BeButtonEvent): Promise; - onMouseMotion(_ev: BeButtonEvent): Promise; - onMouseMotionStopped(_ev: BeButtonEvent): Promise; - onMouseNoMotion(_ev: BeButtonEvent): Promise; - onMouseStartDrag(_ev: BeButtonEvent): Promise; - onMouseWheel(_ev: BeWheelEvent): Promise; - onPostInstall(): void; - onReinitialize(): void; - onResetButtonDown(_ev: BeButtonEvent): Promise; - onResetButtonUp(_ev: BeButtonEvent): Promise; - onSelectedViewportChanged(_previous: Viewport | undefined, _current: Viewport | undefined): void; - onSuspend(): void; - onTouchCancel(_ev: BeTouchEvent): Promise; - onTouchComplete(_ev: BeTouchEvent): Promise; - onTouchEnd(_ev: BeTouchEvent): Promise; - onTouchMove(_ev: BeTouchEvent): Promise; - onTouchMoveStart(_ev: BeTouchEvent, _startEv: BeTouchEvent): Promise; - onTouchStart(_ev: BeTouchEvent): Promise; - onTouchTap(_ev: BeTouchEvent): Promise; - onUnsuspend(): void; - receivedDownEvent: boolean; - supplyToolSettingsProperties(): ToolSettingsPropertyRecord[] | undefined; - syncToolSettingsProperties(syncData: ToolSettingsPropertySyncItem[]): void; - testDecorationHit(_id: string): boolean; -} - -// @public (undocumented) -class IntersectDetail extends SnapDetail { - constructor(from: SnapDetail, heat: SnapHeat | undefined, snapPoint: XYZProps, otherPrimitive: CurvePrimitive, otherId: string); - // (undocumented) - draw(context: DecorateContext): void; - // (undocumented) - readonly otherId: string; - // (undocumented) - readonly otherPrimitive: CurvePrimitive; -} - -// @public (undocumented) -enum ItemField { - // (undocumented) - ANGLE_Item = 1, - // (undocumented) - DIST_Item = 0, - // (undocumented) - X_Item = 2, - // (undocumented) - Y_Item = 3, - // (undocumented) - Z_Item = 4 -} - -// @public -interface JsonEditorParams extends BasePropertyEditorParams { - // (undocumented) - json: any; - // (undocumented) - type: PropertyEditorParamTypes.JSON; -} - -// @public (undocumented) -enum KeyinStatus { - // (undocumented) - DontUpdate = 2, - // (undocumented) - Dynamic = 0, - // (undocumented) - Partial = 1 -} - -// @public (undocumented) -export function linePlaneIntersect(outP: Point3d, linePt: Point3d, lineNormal: Vector3d | undefined, planePt: Point3d, planeNormal: Vector3d, perpendicular: boolean): void; - -// @public -enum LocateAction { - // (undocumented) - AutoLocate = 1, - // (undocumented) - Identify = 0 -} - -// @public -enum LocateFilterStatus { - // (undocumented) - Accept = 0, - // (undocumented) - Reject = 1 -} - -// @public -class LocateOptions { - allowDecorations: boolean; - allowNonLocatable: boolean; - clone(): LocateOptions; - hitSource: HitSource; - // (undocumented) - init(): void; - maxHits: number; -} - -// @public (undocumented) -class LocateResponse { - // (undocumented) - explanation: string; - // (undocumented) - reason?: string; - // (undocumented) - snapStatus: SnapStatus; -} - -// @public (undocumented) -enum LockedStates { - // (undocumented) - ANGLE_BM = 7, - // (undocumented) - DIST_BM = 8, - // (undocumented) - NONE_LOCKED = 0, - // (undocumented) - VEC_BM = 4, - // (undocumented) - X_BM = 1, - // (undocumented) - XY_BM = 3, - // (undocumented) - Y_BM = 2 -} - -// @public -class LookViewTool extends ViewManip { - constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// @public (undocumented) -enum ManipulatorToolEvent { - // (undocumented) - Start = 1, - // (undocumented) - Stop = 2, - // (undocumented) - Suspend = 3, - // (undocumented) - Unsuspend = 4 -} - -// @public -class MarginPercent { - constructor(left: number, top: number, right: number, bottom: number); - // (undocumented) - bottom: number; - // (undocumented) - left: number; - // (undocumented) - right: number; - // (undocumented) - top: number; -} - -// @public -class Marker implements CanvasDecoration { - constructor(worldLocation: XYAndZ, size: XAndY); - protected _hiliteColor?: ColorDef; - protected _isHilited: boolean; - // (undocumented) - protected _scaleFactor?: Point2d; - // (undocumented) - protected _scaleFactorRange?: Range1d; - addDecoration(context: DecorateContext): void; - addMarker(context: DecorateContext): void; - drawDecoration(ctx: CanvasRenderingContext2D): void; - drawFunc?(ctx: CanvasRenderingContext2D): void; - protected drawHilited(ctx: CanvasRenderingContext2D): boolean; - image?: MarkerImage; - imageOffset?: XAndY; - imageSize?: XAndY; - label?: string; - labelAlign?: MarkerTextAlign; - labelBaseline?: MarkerTextBaseline; - labelColor?: MarkerFillStyle; - labelFont?: string; - labelOffset?: XAndY; - static makeFrom(other: Marker, ...args: any[]): T; - onMouseButton?(_ev: BeButtonEvent): boolean; - onMouseEnter(ev: BeButtonEvent): void; - onMouseLeave(): void; - onMouseMove(ev: BeButtonEvent): void; - pick(pt: XAndY): boolean; - position: Point3d; - readonly rect: ViewRect; - setImage(image: MarkerImage | Promise): void; - setImageUrl(url: string): void; - setPosition(vp: Viewport): boolean; - setScaleFactor(range: Range1dProps): void; - size: Point2d; - title?: string; - tooltipOptions?: ToolTipOptions; - visible: boolean; - readonly wantImage: boolean; - worldLocation: Point3d; -} - -// @public -class MarkerSet { - // (undocumented) - protected _entries: Array>; - // (undocumented) - protected readonly _worldToViewMap: Matrix4d; - addDecoration(context: DecorateContext): void; - protected abstract getClusterMarker(cluster: Cluster): Marker; - readonly markers: Set; - minimumClusterSize: number; -} - -// @public (undocumented) -class MeasureDistanceTool extends PrimitiveTool { - // WARNING: The type "MeasureMarker" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected readonly _acceptedSegments: { - distance: number; - slope: number; - start: Point3d; - end: Point3d; - delta: Vector3d; - refAxes: Matrix3d; - marker: MeasureMarker; - }[]; - // (undocumented) - protected readonly _locationData: { - point: Point3d; - refAxes: Matrix3d; - }[]; - // (undocumented) - protected _snapGeomId?: string; - // (undocumented) - protected _totalDistance: number; - // WARNING: The type "MeasureLabel" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected _totalDistanceMarker?: MeasureLabel; - // (undocumented) - protected acceptNewSegments(): Promise; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - decorateSuspended(context: DecorateContext): void; - // (undocumented) - protected displayDelta(context: DecorateContext, seg: any): void; - // (undocumented) - protected displayDynamicDistance(context: DecorateContext, points: Point3d[]): void; - // (undocumented) - getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined; - // (undocumented) - protected getMarkerToolTip(distance: number, slope: number, start: Point3d, end: Point3d, delta?: Vector3d): Promise; - // (undocumented) - protected getReferenceAxes(vp?: Viewport): Matrix3d; - // (undocumented) - protected getSnapPoints(): Point3d[] | undefined; - // (undocumented) - isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean; - // (undocumented) - onDataButtonDown(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseMotion(ev: BeButtonEvent): Promise; - // (undocumented) - onPostInstall(): void; - // (undocumented) - onResetButtonUp(ev: BeButtonEvent): Promise; - // (undocumented) - onRestartTool(): void; - // (undocumented) - onUndoPreviousStep(): Promise; - // (undocumented) - onUnsuspend(): void; - // (undocumented) - protected reportMeasurements(): void; - // (undocumented) - requireWriteableTarget(): boolean; - // (undocumented) - protected setupAndPromptForNextAction(): void; - // (undocumented) - protected showPrompt(): void; - // (undocumented) - testDecorationHit(id: string): boolean; - // (undocumented) - static toolId: string; - // (undocumented) - protected updateSelectedMarkerToolTip(seg: any): Promise; - // (undocumented) - protected updateTotals(): Promise; -} - -// @public (undocumented) -class MeasureLocationTool extends PrimitiveTool { - // WARNING: The type "MeasureMarker" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected readonly _acceptedLocations: MeasureMarker[]; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - decorateSuspended(context: DecorateContext): void; - // (undocumented) - protected getMarkerToolTip(point: Point3d): Promise; - // (undocumented) - isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean; - // (undocumented) - onDataButtonDown(ev: BeButtonEvent): Promise; - // (undocumented) - onPostInstall(): void; - // (undocumented) - onResetButtonUp(_ev: BeButtonEvent): Promise; - // (undocumented) - onRestartTool(): void; - // (undocumented) - onUndoPreviousStep(): Promise; - // (undocumented) - onUnsuspend(): void; - // (undocumented) - protected reportMeasurements(): void; - // (undocumented) - requireWriteableTarget(): boolean; - // (undocumented) - protected setupAndPromptForNextAction(): void; - // (undocumented) - protected showPrompt(): void; - // (undocumented) - static toolId: string; -} - -// @public -enum MessageBoxIconType { - // (undocumented) - Critical = 4, - // (undocumented) - Information = 1, - // (undocumented) - NoSymbol = 0, - // (undocumented) - Question = 2, - // (undocumented) - Warning = 3 -} - -// @public -enum MessageBoxType { - // (undocumented) - LargeOk = 2, - // (undocumented) - MediumAlert = 3, - // (undocumented) - Ok = 1, - // (undocumented) - OkCancel = 0, - // (undocumented) - YesNo = 5, - // (undocumented) - YesNoCancel = 4 -} - -// @public -enum MessageBoxValue { - // (undocumented) - Apply = 1, - // (undocumented) - Cancel = 4, - // (undocumented) - Default = 5, - // (undocumented) - Help = 10, - // (undocumented) - No = 7, - // (undocumented) - NoToAll = 12, - // (undocumented) - Ok = 3, - // (undocumented) - Reset = 2, - // (undocumented) - Retry = 8, - // (undocumented) - Stop = 9, - // (undocumented) - Yes = 6, - // (undocumented) - YesToAll = 11 -} - -// WARNING: Unsupported export: SystemFactory -// @public -module MockRender { - class App extends IModelApp { - // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected static createDefaultRenderSystem(): System; - // (undocumented) - static shutdown(): void; - // (undocumented) - protected static supplyRenderSystem(): RenderSystem; - // WARNING: The type "SystemFactory" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - static systemFactory: SystemFactory; - } - - // (undocumented) - class Batch extends Graphic { - constructor(graphic: RenderGraphic, featureTable: PackedFeatureTable, range: ElementAlignedBox3d); - // (undocumented) - dispose(): void; - // (undocumented) - readonly featureTable: PackedFeatureTable; - // (undocumented) - readonly graphic: RenderGraphic; - // (undocumented) - readonly range: ElementAlignedBox3d; - } - - // (undocumented) - class Branch extends Graphic { - constructor(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume | undefined); - // (undocumented) - readonly branch: GraphicBranch; - // (undocumented) - readonly clips?: RenderClipVolume | undefined; - // (undocumented) - dispose(): void; - // (undocumented) - readonly transform: Transform; - } - - // (undocumented) - class Builder extends PrimitiveBuilder { - // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) - constructor(system: System, placement: Transform | undefined, type: GraphicType, viewport: Viewport, pickId?: Id64String); - } - - // (undocumented) - class Graphic extends RenderGraphic { - constructor(); - // WARNING: The type "RenderMemory.Statistics" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - collectStatistics(_stats: RenderMemory.Statistics): void; - // (undocumented) - dispose(): void; - } - - // (undocumented) - class List extends Graphic { - constructor(graphics: RenderGraphic[]); - // (undocumented) - dispose(): void; - // (undocumented) - readonly graphics: RenderGraphic[]; - } - - // (undocumented) - class OffScreenTarget extends Target { - // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) - constructor(system: System, _viewRect: ViewRect); - // (undocumented) - setViewRect(rect: ViewRect, _temp: boolean): void; - // (undocumented) - readonly viewRect: ViewRect; - } - - // (undocumented) - class OnScreenTarget extends Target { - // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) - constructor(system: System, _canvas: HTMLCanvasElement); - // (undocumented) - setViewRect(_rect: ViewRect, _temp: boolean): void; - // (undocumented) - readonly viewRect: ViewRect; - } - - // (undocumented) - class System extends RenderSystem { - // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d): Batch; - // WARNING: The type "Branch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createBranch(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume): Branch; - // WARNING: The type "Builder" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createGraphicBuilder(placement: Transform, type: GraphicType, viewport: Viewport, pickableId?: Id64String): Builder; - // WARNING: The type "List" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createGraphicList(primitives: RenderGraphic[]): List; - // WARNING: The type "MeshParams" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createMesh(_params: MeshParams): Graphic; - // (undocumented) - createOffscreenTarget(rect: ViewRect): RenderTarget; - // WARNING: The type "PointCloudArgs" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection): Graphic; - // WARNING: The type "PointStringParams" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createPointString(_params: PointStringParams): Graphic; - // WARNING: The type "PolylineParams" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createPolyline(_params: PolylineParams): Graphic; - // WARNING: The type "OnScreenTarget" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createTarget(canvas: HTMLCanvasElement): OnScreenTarget; - // (undocumented) - dispose(): void; - // (undocumented) - readonly isValid: boolean; - // (undocumented) - readonly maxTextureSize: number; - } - - // (undocumented) - class Target extends RenderTarget { - // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) - protected constructor(_system: System); - // (undocumented) - animationFraction: number; - // (undocumented) - readonly cameraFrustumNearScaleLimit: number; - // (undocumented) - changeDecorations(_decs: Decorations): void; - // (undocumented) - changeDynamics(_dynamics?: GraphicList): void; - // (undocumented) - changeRenderPlan(_plan: RenderPlan): void; - // (undocumented) - changeScene(_scene: GraphicList): void; - // (undocumented) - changeTerrain(_terrain: GraphicList): void; - // (undocumented) - drawFrame(_sceneTime?: number): void; - // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readPixels(_rect: ViewRect, _selector: Pixel.Selector, receiver: Pixel.Receiver, _excludeNonLocatable: boolean): void; - // (undocumented) - readonly renderSystem: RenderSystem; - // (undocumented) - updateViewRect(): boolean; - // (undocumented) - readonly wantInvertBlackBackground: boolean; - } - -} - -// @public -class ModelSelectorState extends ElementState { - constructor(props: ModelSelectorProps, iModel: IModelConnection); - addModels(arg: Id64Arg): void; - containsModel(modelId: Id64String): boolean; - dropModels(arg: Id64Arg): void; - // (undocumented) - equalState(other: ModelSelectorState): boolean; - has(id: string): boolean; - load(): Promise; - readonly models: Set; - readonly name: string; - // (undocumented) - toJSON(): ModelSelectorProps; -} - -// @public -class ModelState extends EntityState, implements ModelProps { - constructor(props: ModelProps, iModel: IModelConnection); - // (undocumented) - readonly asGeometricModel: GeometricModelState | undefined; - // (undocumented) - readonly asGeometricModel2d: GeometricModel2dState | undefined; - // (undocumented) - readonly asGeometricModel3d: GeometricModel3dState | undefined; - // (undocumented) - getExtents(): AxisAlignedBox3d; - readonly isGeometricModel: boolean; - // (undocumented) - readonly isPrivate: boolean; - // (undocumented) - readonly isTemplate: boolean; - // (undocumented) - readonly modeledElement: RelatedElement; - // (undocumented) - readonly name: string; - onIModelConnectionClose(): void; - // (undocumented) - parentModel: Id64String; - toJSON(): ModelProps; -} - -// @public (undocumented) -enum ModifyElementSource { - DragSelect = 5, - Fence = 3, - Group = 4, - Selected = 1, - SelectionSet = 2, - Unknown = 0 -} - -// @public -interface MultilineTextEditorParams extends BasePropertyEditorParams { - // (undocumented) - heightInRows: number; - // (undocumented) - type: PropertyEditorParamTypes.MultilineText; -} - -// @public -class NoRenderApp extends IModelApp { - // (undocumented) - protected static supplyRenderSystem(): RenderSystem; -} - -// @public -class NotificationManager { - protected _showToolTip(_htmlElement: HTMLElement, _message: HTMLElement | string, _location?: XAndY, _options?: ToolTipOptions): void; - clearToolTip(): void; - closePointerMessage(): void; - endActivityMessage(_reason: ActivityMessageEndReason): boolean; - readonly isToolTipOpen: boolean; - readonly isToolTipSupported: boolean; - openMessageBox(_mbType: MessageBoxType, _message: string, _icon: MessageBoxIconType): Promise; - openToolTip(_htmlElement: HTMLElement, message: HTMLElement | string, location?: XAndY, options?: ToolTipOptions): void; - outputActivityMessage(_messageText: string, _percentComplete: number): boolean; - outputMessage(_message: NotifyMessageDetails): void; - outputPrompt(_prompt: string): void; - outputPromptByKey(key: string): void; - setupActivityMessage(_details: ActivityMessageDetails): boolean; - // (undocumented) - readonly toolTipLocation: Point2d; -} - -// @public -class NotifyMessageDetails { - constructor(priority: OutputMessagePriority, briefMessage: string, detailedMessage?: string | undefined, msgType?: OutputMessageType, openAlert?: OutputMessageAlert); - // (undocumented) - briefMessage: string; - // (undocumented) - detailedMessage?: string | undefined; - // (undocumented) - displayPoint?: Point2d; - // (undocumented) - displayTime: BeDuration; - // (undocumented) - msgType: OutputMessageType; - // (undocumented) - openAlert: OutputMessageAlert; - // (undocumented) - priority: OutputMessagePriority; - // (undocumented) - relativePosition: RelativePosition; - setPointerTypeDetails(viewport: HTMLElement, displayPoint: XAndY, relativePosition?: RelativePosition): void; - // (undocumented) - viewport?: HTMLElement; -} - -// @public -class NullRenderSystem extends RenderSystem { - constructor(); - // (undocumented) - createBatch(): any; - // (undocumented) - createBranch(): any; - // (undocumented) - createGraphicBuilder(): any; - // (undocumented) - createGraphicList(): any; - // (undocumented) - createOffscreenTarget(): NullTarget; - // (undocumented) - createTarget(): NullTarget; - // (undocumented) - dispose(): void; - // (undocumented) - readonly isValid: boolean; -} - -// @public -class NullTarget extends RenderTarget { - // (undocumented) - animationBranches: AnimationBranchStates | undefined; - // (undocumented) - animationFraction: number; - // (undocumented) - readonly cameraFrustumNearScaleLimit: number; - // (undocumented) - changeDecorations(): void; - // (undocumented) - changeDynamics(): void; - // (undocumented) - changeRenderPlan(): void; - // (undocumented) - changeScene(): void; - // (undocumented) - changeTerrain(): void; - // (undocumented) - dispose(): void; - // (undocumented) - drawFrame(_sceneMilSecElapsed?: number): void; - // (undocumented) - onDestroy(): void; - // (undocumented) - onResized(): void; - // (undocumented) - overrideFeatureSymbology(): void; - // (undocumented) - readImage(): undefined; - // (undocumented) - readPixels(): void; - // (undocumented) - readonly renderSystem: any; - // (undocumented) - reset(): void; - // (undocumented) - setFlashed(): void; - // (undocumented) - setHiliteSet(): void; - // (undocumented) - setViewRect(): void; - // (undocumented) - updateViewRect(): boolean; - // (undocumented) - readonly viewRect: ViewRect; - // (undocumented) - readonly wantInvertBlackBackground: boolean; -} - -// @public (undocumented) -class OffScreenTarget extends Target { - constructor(rect: ViewRect); - // (undocumented) - protected _assignDC(): boolean; - // (undocumented) - protected _beginPaint(): void; - // (undocumented) - protected _endPaint(): void; - // (undocumented) - animationFraction: number; - // (undocumented) - onResized(): void; - // (undocumented) - setViewRect(rect: ViewRect, temporary: boolean): void; - // (undocumented) - updateViewRect(): boolean; - // (undocumented) - readonly viewRect: ViewRect; -} - -// @public (undocumented) -class OffScreenViewport extends Viewport { - // (undocumented) - static create(view: ViewState, viewRect?: ViewRect): OffScreenViewport; - // (undocumented) - setRect(rect: ViewRect, temporary?: boolean): void; - // (undocumented) - readonly viewRect: ViewRect; -} - -// @public -class OidcBrowserClient extends OidcClient, implements IOidcFrontendClient { - constructor(_configuration: OidcFrontendClientConfiguration); - dispose(): void; - getAccessToken(_actx: ActivityLoggingContext): Promise; - initialize(actx: ActivityLoggingContext): Promise; - readonly onUserStateChanged: BeEvent<(token: AccessToken | undefined) => void>; - signIn(_actx: ActivityLoggingContext): void; - signOut(_actx: ActivityLoggingContext): void; -} - -// @public (undocumented) -class OidcClientWrapper { - // (undocumented) - static initialize(actx: ActivityLoggingContext, config: OidcFrontendClientConfiguration): Promise; - // (undocumented) - static readonly oidcClient: IOidcFrontendClient; -} - -// @public -class OnScreenTarget extends Target { - constructor(canvas: HTMLCanvasElement); - // (undocumented) - protected _assignDC(): boolean; - // (undocumented) - protected _beginPaint(): void; - // (undocumented) - protected _endPaint(): void; - // (undocumented) - animationFraction: number; - // (undocumented) - protected debugPaint(): void; - // (undocumented) - dispose(): void; - // (undocumented) - protected drawOverlayDecorations(): void; - // (undocumented) - onResized(): void; - // (undocumented) - pickOverlayDecoration(pt: XAndY): CanvasDecoration | undefined; - // (undocumented) - setViewRect(_rect: ViewRect, _temporary: boolean): void; - // (undocumented) - updateViewRect(): boolean; - // (undocumented) - readonly viewRect: ViewRect; -} - -// @public -class OrthographicViewState extends SpatialViewState { - constructor(props: SpatialViewDefinitionProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle3dState, modelSelector: ModelSelectorState); - // (undocumented) - static readonly className: string; - // (undocumented) - supportsCamera(): boolean; -} - -// @public -enum OutputMessageAlert { - // (undocumented) - Balloon = 2, - // (undocumented) - Dialog = 1, - // (undocumented) - None = 0 -} - -// @public -enum OutputMessagePriority { - // (undocumented) - Debug = 13, - // (undocumented) - Error = 10, - // (undocumented) - Fatal = 17, - // (undocumented) - Info = 12, - // (undocumented) - None = 0, - // (undocumented) - Warning = 11 -} - -// @public -enum OutputMessageType { - Alert = 4, - // (undocumented) - InputField = 3, - // (undocumented) - Pointer = 1, - // (undocumented) - Sticky = 2, - Toast = 0 -} - -// @public (undocumented) -interface PackedFeature { - // (undocumented) - animationNodeId: number; - // (undocumented) - elementId: Id64.Uint32Pair; - // (undocumented) - geometryClass: GeometryClass; - // (undocumented) - subCategoryId: Id64.Uint32Pair; -} - -// @public -class PackedFeatureTable { - constructor(data: Uint32Array, modelId: Id64String, numFeatures: number, maxFeatures: number, type: BatchType, animationNodeIds?: Uint8Array | Uint16Array | Uint32Array); - // (undocumented) - readonly anyDefined: boolean; - // (undocumented) - readonly byteLength: number; - findElementId(featureIndex: number): Id64String | undefined; - findFeature(featureIndex: number): Feature | undefined; - // (undocumented) - getAnimationNodeId(featureIndex: number): number; - // (undocumented) - getElementIdPair(featureIndex: number): Id64.Uint32Pair; - getFeature(featureIndex: number): Feature; - // (undocumented) - getPackedFeature(featureIndex: number): PackedFeature; - // (undocumented) - readonly isClassifier: boolean; - readonly isUniform: boolean; - // (undocumented) - readonly maxFeatures: number; - // (undocumented) - readonly modelId: Id64String; - // (undocumented) - readonly numFeatures: number; - static pack(featureTable: FeatureTable): PackedFeatureTable; - // (undocumented) - readonly type: BatchType; - readonly uniform: Feature | undefined; - unpack(): FeatureTable; -} - -// @public -class PanViewTool extends ViewManip { - constructor(vp: ScreenViewport | undefined, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// @public (undocumented) -class PerformanceMetrics { - constructor(gatherGlFinish?: boolean, gatherCurPerformanceMetrics?: boolean); - // (undocumented) - curSpfTimeIndex: number; - // (undocumented) - endFrame(operationName?: string): void; - // (undocumented) - fpsTimer: StopWatch; - // (undocumented) - fpsTimerStart: number; - // (undocumented) - frameTimings: Map; - // (undocumented) - gatherCurPerformanceMetrics: boolean; - // (undocumented) - gatherGlFinish: boolean; - // (undocumented) - loadTileSum: number; - // (undocumented) - loadTileTimes: number[]; - // (undocumented) - recordTime(operationName: string): void; - // (undocumented) - renderSpfSum: number; - // (undocumented) - renderSpfTimes: number[]; - // (undocumented) - spfSum: number; - // (undocumented) - spfTimes: number[]; - // (undocumented) - startNewFrame(sceneTime?: number): void; -} - -// WARNING: Unsupported export: Receiver -// @public -module Pixel { - interface Buffer { - // WARNING: The type "Data" needs to be exported by the package (e.g. added to index.ts) - getPixel(x: number, y: number): Data; - } - - class Data { - // WARNING: The type "GeometryType" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Planarity" needs to be exported by the package (e.g. added to index.ts) - constructor(feature?: Feature | undefined, distanceFraction?: number, type?: GeometryType, planarity?: Planarity, featureTable?: PackedFeatureTable | undefined); - // (undocumented) - readonly distanceFraction: number; - // (undocumented) - readonly elementId: Id64String | undefined; - // (undocumented) - readonly feature?: Feature | undefined; - // (undocumented) - readonly featureTable?: PackedFeatureTable | undefined; - // (undocumented) - readonly geometryClass: GeometryClass | undefined; - // WARNING: The type "Planarity" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly planarity: Planarity; - // (undocumented) - readonly subCategoryId: Id64String | undefined; - // WARNING: The type "GeometryType" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly type: GeometryType; - } - - enum GeometryType { - Edge = 4, - Linear = 3, - None = 1, - Silhouette = 5, - Surface = 2, - Unknown = 0 - } - - enum Planarity { - None = 1, - NonPlanar = 3, - Planar = 2, - Unknown = 0 - } - - enum Selector { - All = 5, - Feature = 1, - GeometryAndDistance = 4, - // (undocumented) - None = 0 - } - -} - -// @public -class Plugin { - constructor(name: string, versionsRequired: string); - // (undocumented) - name: string; - onExecute(_args: string[]): void; - onLoad(_args: string[]): void; - // (undocumented) - versionsRequired: string; -} - -// @public -class PluginAdmin { - static loadPlugin(packageName: string, args?: string[]): Promise; - static register(plugin: Plugin): string[] | undefined; -} - -// WARNING: Unsupported export: Text -// WARNING: Unsupported export: String -// WARNING: Unsupported export: ShortDate -// WARNING: Unsupported export: Boolean -// WARNING: Unsupported export: Float -// WARNING: Unsupported export: Int -// WARNING: Unsupported export: Hexadecimal -// WARNING: Unsupported export: Enum -// WARNING: Unsupported export: Numeric -// WARNING: Unsupported export: Point2d -// WARNING: Unsupported export: Point3d -// WARNING: Unsupported export: Point -// WARNING: Unsupported export: Value -// @public -module Primitives { -} - -// @public -class PrimitiveTool extends InteractiveTool { - autoLockTarget(): void; - // (undocumented) - exitTool(): void; - getPrompt(): string; - readonly iModel: IModelConnection; - isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean; - isValidLocation(ev: BeButtonEvent, isButtonEvent: boolean): boolean; - onRedoPreviousStep(): Promise; - onReinitialize(): void; - abstract onRestartTool(): void; - onSelectedViewportChanged(_previous: Viewport | undefined, current: Viewport | undefined): void; - onUndoPreviousStep(): Promise; - // (undocumented) - redoPreviousStep(): Promise; - requireWriteableTarget(): boolean; - run(): boolean; - saveChanges(): Promise; - // (undocumented) - targetIsLocked: boolean; - // (undocumented) - targetModelId?: string; - // (undocumented) - targetView?: Viewport; - // (undocumented) - undoPreviousStep(): Promise; -} - -// @public -interface PrimitiveValue extends BasePropertyValue { - // (undocumented) - displayValue?: string; - // (undocumented) - value?: Primitives.Value; - // (undocumented) - valueFormat: PropertyValueFormat.Primitive; -} - -// @public -interface PropertyDescription { - dataController?: string; - // (undocumented) - displayLabel: string; - // (undocumented) - editor?: PropertyEditorInfo; - // (undocumented) - enum?: EnumerationChoicesInfo; - // (undocumented) - name: string; - quantityType?: QuantityType | string; - // (undocumented) - typename: string; -} - -// @public -interface PropertyEditorInfo { - // (undocumented) - name?: string; - // (undocumented) - params?: PropertyEditorParams[]; -} - -// @public -enum PropertyEditorParamTypes { - // (undocumented) - ButtonGroupData = 8, - // (undocumented) - CheckBoxIcons = 5, - // (undocumented) - Icon = 4, - // (undocumented) - JSON = 0, - // (undocumented) - MultilineText = 3, - // (undocumented) - Range = 1, - // (undocumented) - Slider = 2, - // (undocumented) - SuppressEditorLabel = 7, - // (undocumented) - SuppressUnitLabel = 6 -} - -// @public -class PropertyRecord { - constructor(value: PropertyValue, property: PropertyDescription); - copyWithNewValue(newValue: PropertyValue): PropertyRecord; - // (undocumented) - description?: string; - // (undocumented) - isMerged?: boolean; - // (undocumented) - isReadonly?: boolean; - // (undocumented) - readonly property: PropertyDescription; - // (undocumented) - readonly value: PropertyValue; -} - -// @public -enum PropertyValueFormat { - // (undocumented) - Array = 1, - // (undocumented) - Primitive = 0, - // (undocumented) - Struct = 2 -} - -// @public -class QuantityFormatter implements UnitsProvider { - // (undocumented) - protected _activeSystemIsImperial: boolean; - // (undocumented) - protected _formatSpecsByKoq: Map; - // (undocumented) - protected _imperialFormatsByType: Map; - // (undocumented) - protected _imperialFormatSpecsByType: Map; - // (undocumented) - protected _metricFormatsByType: Map; - // (undocumented) - protected _metricFormatSpecsByType: Map; - findFormatterSpecByQuantityType(type: QuantityType, imperial?: boolean): FormatterSpec | undefined; - protected findKoqFormatterSpec(koq: string, useImperial: boolean): FormatterSpec | undefined; - findUnit(unitLabel: string, unitFamily?: string): Promise; - findUnitByName(unitName: string): Promise; - // WARNING: The type "UnitDefinition" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected findUnitDefinition(name: string): UnitDefinition | undefined; - formatQuantity(magnitude: number, formatSpec: FormatterSpec): string; - getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise; - // (undocumented) - protected getFormatByQuantityType(type: QuantityType, imperial: boolean): Promise; - getFormatterSpecByQuantityType(type: QuantityType, imperial?: boolean): Promise; - protected getKoqFormatterSpec(koq: string, useImperial: boolean): Promise; - protected getKoqFormatterSpecsAsync(koq: string, useImperial: boolean): Promise; - protected getUnitByQuantityType(type: QuantityType): Promise; - protected loadFormatSpecsForQuantityTypes(useImperial: boolean): Promise; - protected loadKoqFormatSpecs(koq: string): Promise; - // (undocumented) - protected loadStdFormat(type: QuantityType, imperial: boolean): Promise; - useImperialFormats: boolean; -} - -// @public -enum QuantityType { - // (undocumented) - Angle = 2, - // (undocumented) - Area = 3, - // (undocumented) - Coordinate = 6, - // (undocumented) - LatLong = 5, - // (undocumented) - Length = 1, - // (undocumented) - Volume = 4 -} - -// @public -interface RangeEditorParams extends BasePropertyEditorParams { - maximum?: number; - minimum?: number; - // (undocumented) - type: PropertyEditorParamTypes.Range; -} - -// @public -enum RelativePosition { - // (undocumented) - Bottom = 3, - // (undocumented) - BottomLeft = 6, - // (undocumented) - BottomRight = 7, - // (undocumented) - Left = 0, - // (undocumented) - Right = 2, - // (undocumented) - Top = 1, - // (undocumented) - TopLeft = 4, - // (undocumented) - TopRight = 5 -} - -// @public -enum RemoveMe { - // (undocumented) - No = 0, - // (undocumented) - Yes = 1 -} - -// @public -class RenderClipVolume implements IDisposable { - // (undocumented) - abstract dispose(): void; - readonly type: ClippingType; -} - -// @public -class RenderContext { - constructor(vp: Viewport); - // (undocumented) - protected _createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder; - createBranch(branch: GraphicBranch, location: Transform, clip?: RenderClipVolume): RenderGraphic; - createSceneGraphicBuilder(transform?: Transform): GraphicBuilder; - readonly frustum: Frustum; - readonly frustumPlanes: FrustumPlanes; - getPixelSizeAtPoint(inPoint?: Point3d): number; - // (undocumented) - readonly target: RenderTarget; - readonly viewFlags: ViewFlags; - readonly viewport: Viewport; -} - -// @public (undocumented) -enum RenderDiagnostics { - All = 6, - DebugOutput = 2, - None = 0, - WebGL = 4 -} - -// @public -class RenderGraphic implements IDisposable, RenderMemory.Consumer { - // WARNING: The type "RenderMemory.Statistics" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - abstract collectStatistics(stats: RenderMemory.Statistics): void; - // (undocumented) - abstract dispose(): void; -} - -// @public -module RenderMemory { - class Buffers extends Consumers { - constructor(); - // WARNING: The type "BufferType" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addBuffer(type: BufferType, numBytes: number): void; - // (undocumented) - clear(): void; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly consumers: Consumers[]; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly instances: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly pointClouds: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly pointStrings: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly polylineEdges: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly polylines: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly silhouetteEdges: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly surfaces: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly visibleEdges: Consumers; - } - - // (undocumented) - enum BufferType { - // (undocumented) - COUNT = 8, - // (undocumented) - Instances = 7, - // (undocumented) - PointClouds = 6, - // (undocumented) - PointStrings = 5, - // (undocumented) - PolylineEdges = 3, - // (undocumented) - Polylines = 4, - // (undocumented) - SilhouetteEdges = 2, - // (undocumented) - Surfaces = 0, - // (undocumented) - VisibleEdges = 1 - } - - // (undocumented) - interface Consumer { - // WARNING: The type "Statistics" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - collectStatistics(stats: Statistics): void; - } - - class Consumers { - // (undocumented) - addConsumer(numBytes: number): void; - // (undocumented) - clear(): void; - // (undocumented) - count: number; - // (undocumented) - maxBytes: number; - // (undocumented) - totalBytes: number; - } - - // (undocumented) - enum ConsumerType { - // (undocumented) - ClipVolumes = 4, - // (undocumented) - COUNT = 5, - // (undocumented) - FeatureOverrides = 3, - // (undocumented) - FeatureTables = 2, - // (undocumented) - Textures = 0, - // (undocumented) - VertexTables = 1 - } - - // (undocumented) - class Statistics { - constructor(); - // WARNING: The type "BufferType" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addBuffer(type: BufferType, numBytes: number): void; - // (undocumented) - addClipVolume(numBytes: number): void; - // WARNING: The type "ConsumerType" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addConsumer(type: ConsumerType, numBytes: number): void; - // (undocumented) - addFeatureOverrides(numBytes: number): void; - // (undocumented) - addFeatureTable(numBytes: number): void; - // (undocumented) - addInstances(numBytes: number): void; - // (undocumented) - addPointCloud(numBytes: number): void; - // (undocumented) - addPointString(numBytes: number): void; - // (undocumented) - addPolyline(numBytes: number): void; - // (undocumented) - addPolylineEdges(numBytes: number): void; - // (undocumented) - addSilhouetteEdges(numBytes: number): void; - // (undocumented) - addSurface(numBytes: number): void; - // (undocumented) - addTexture(numBytes: number): void; - // (undocumented) - addVertexTable(numBytes: number): void; - // (undocumented) - addVisibleEdges(numBytes: number): void; - // WARNING: The type "Buffers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly buffers: Buffers; - // (undocumented) - clear(): void; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly clipVolumes: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly consumers: Consumers[]; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly featureOverrides: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly featureTables: Consumers; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly textures: Consumers; - // (undocumented) - readonly totalBytes: number; - // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly vertexTables: Consumers; - } - -} - -// @public (undocumented) -class RenderPlan { - // (undocumented) - readonly aaLines: AntiAliasPref; - // (undocumented) - readonly aaText: AntiAliasPref; - // (undocumented) - readonly activeVolume?: RenderClipVolume; - // (undocumented) - readonly analysisStyle?: AnalysisStyle; - // (undocumented) - analysisTexture?: RenderTexture; - // (undocumented) - readonly ao?: AmbientOcclusion.Settings; - // (undocumented) - readonly bgColor: ColorDef; - // (undocumented) - static createFromViewport(vp: Viewport): RenderPlan; - // (undocumented) - readonly fraction: number; - // (undocumented) - readonly frustum: Frustum; - // (undocumented) - readonly hiliteSettings: Hilite.Settings; - // (undocumented) - readonly hline?: HiddenLine.Settings; - // (undocumented) - readonly is3d: boolean; - // (undocumented) - readonly isFadeOutActive: boolean; - // (undocumented) - readonly lights?: SceneLights; - // (undocumented) - readonly monoColor: ColorDef; - // (undocumented) - selectTerrainFrustum(): void; - // (undocumented) - selectViewFrustum(): void; - // (undocumented) - readonly terrainFrustum: ViewFrustum | undefined; - // (undocumented) - readonly viewFlags: ViewFlags; - // (undocumented) - readonly viewFrustum: ViewFrustum; -} - -// @public -class RenderSystem implements IDisposable { - abstract createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d): RenderGraphic; - abstract createBranch(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume): RenderGraphic; - abstract createGraphicBuilder(placement: Transform, type: GraphicType, viewport: Viewport, pickableId?: Id64String): GraphicBuilder; - abstract createGraphicList(primitives: RenderGraphic[]): RenderGraphic; - // WARNING: The type "PolylineArgs" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createIndexedPolylines(args: PolylineArgs, instances?: InstancedGraphicParams): RenderGraphic | undefined; - createMaterial(_params: RenderMaterial.Params, _imodel: IModelConnection): RenderMaterial | undefined; - // WARNING: The type "MeshParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createMesh(_params: MeshParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined; - // (undocumented) - abstract createOffscreenTarget(rect: ViewRect): RenderTarget; - // WARNING: The type "PointCloudArgs" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection): RenderGraphic | undefined; - // WARNING: The type "PointStringParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createPointString(_params: PointStringParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined; - // WARNING: The type "PolylineParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createPolyline(_params: PolylineParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined; - // (undocumented) - createSheetTile(_tile: RenderTexture, _polyfaces: IndexedPolyface[], _tileColor: ColorDef): GraphicList; - // (undocumented) - createSheetTilePolyfaces(_corners: Point3d[], _clip?: ClipVector): IndexedPolyface[]; - // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) - createSkyBox(_params: SkyBox.CreateParams): RenderGraphic | undefined; - // (undocumented) - abstract createTarget(canvas: HTMLCanvasElement): RenderTarget; - createTextureFromCubeImages(_posX: HTMLImageElement, _negX: HTMLImageElement, _posY: HTMLImageElement, _negY: HTMLImageElement, _posZ: HTMLImageElement, _negZ: HTMLImageElement, _imodel: IModelConnection, _params: RenderTexture.Params): RenderTexture | undefined; - createTextureFromImage(_image: HTMLImageElement, _hasAlpha: boolean, _imodel: IModelConnection | undefined, _params: RenderTexture.Params): RenderTexture | undefined; - createTextureFromImageBuffer(_image: ImageBuffer, _imodel: IModelConnection, _params: RenderTexture.Params): RenderTexture | undefined; - createTextureFromImageSource(source: ImageSource, imodel: IModelConnection | undefined, params: RenderTexture.Params): Promise; - // (undocumented) - createTile(tileTexture: RenderTexture, corners: Point3d[]): RenderGraphic | undefined; - // WARNING: The type "MeshArgs" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createTriMesh(args: MeshArgs, instances?: InstancedGraphicParams): RenderGraphic | undefined; - // (undocumented) - abstract dispose(): void; - // (undocumented) - enableDiagnostics(_enable: RenderDiagnostics): void; - findMaterial(_key: string, _imodel: IModelConnection): RenderMaterial | undefined; - findTexture(_key: string, _imodel: IModelConnection): RenderTexture | undefined; - // (undocumented) - getClipVolume(_clipVector: ClipVector, _imodel: IModelConnection): RenderClipVolume | undefined; - getGradientTexture(_symb: Gradient.Symb, _imodel: IModelConnection): RenderTexture | undefined; - // (undocumented) - readonly isValid: boolean; - loadTexture(id: Id64String, iModel: IModelConnection): Promise; - loadTextureImage(id: Id64String, iModel: IModelConnection): Promise; - // (undocumented) - readonly maxTextureSize: number; - // (undocumented) - onInitialized(): void; -} - -// @public -class RenderTarget implements IDisposable { - // (undocumented) - animationBranches: AnimationBranchStates | undefined; - // (undocumented) - animationFraction: number; - // (undocumented) - readonly cameraFrustumNearScaleLimit: number; - // (undocumented) - abstract changeDecorations(decorations: Decorations): void; - // (undocumented) - abstract changeDynamics(dynamics?: GraphicList): void; - // (undocumented) - abstract changeRenderPlan(plan: RenderPlan): void; - // (undocumented) - abstract changeScene(scene: GraphicList): void; - // (undocumented) - abstract changeTerrain(_scene: GraphicList): void; - // (undocumented) - createGraphicBuilder(type: GraphicType, viewport: Viewport, placement?: Transform, pickableId?: Id64String): GraphicBuilder; - static depthFromDisplayPriority(priority: number): number; - // (undocumented) - dispose(): void; - // (undocumented) - abstract drawFrame(sceneMilSecElapsed?: number): void; - // (undocumented) - static readonly frustumDepth2d: number; - // (undocumented) - static readonly maxDisplayPriority: number; - // (undocumented) - static readonly minDisplayPriority: number; - // (undocumented) - onResized(): void; - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - overrideFeatureSymbology(_ovr: FeatureSymbology.Overrides): void; - // (undocumented) - pickOverlayDecoration(_pt: XAndY): CanvasDecoration | undefined; - // (undocumented) - readImage(_rect: ViewRect, _targetSize: Point2d, _flipVertically: boolean): ImageBuffer | undefined; - // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - abstract readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void; - // (undocumented) - readonly renderSystem: RenderSystem; - // (undocumented) - reset(): void; - // (undocumented) - setFlashed(_elementId: Id64String, _intensity: number): void; - // (undocumented) - setHiliteSet(_hilited: Set): void; - // (undocumented) - abstract setViewRect(_rect: ViewRect, _temporary: boolean): void; - // (undocumented) - abstract updateViewRect(): boolean; - // (undocumented) - readonly viewRect: ViewRect; - // (undocumented) - readonly wantInvertBlackBackground: boolean; -} - -// @public -class RotateViewTool extends ViewManip { - constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// @public (undocumented) -enum RotationMode { - // (undocumented) - ACS = 5, - // (undocumented) - Context = 6, - // (undocumented) - Front = 2, - // (undocumented) - Side = 3, - // (undocumented) - Top = 1, - // (undocumented) - View = 4 -} - -// @public (undocumented) -class RoundOff { - // (undocumented) - active: boolean; - // (undocumented) - units: Set; -} - -// @public (undocumented) -class SavedState { - // (undocumented) - auxRotationPlane: number; - // (undocumented) - readonly axes: ThreeAxes; - // (undocumented) - contextRotMode: number; - // (undocumented) - fixedOrg: boolean; - // (undocumented) - ignoreDataButton: boolean; - // (undocumented) - ignoreFlags: AccuDrawFlags; - // (undocumented) - mode: CompassMode; - // (undocumented) - readonly origin: Point3d; - // (undocumented) - rotationMode: RotationMode; - // (undocumented) - state: CurrentState; -} - -// @public (undocumented) -class SceneContext extends RenderContext { - constructor(vp: Viewport); - // (undocumented) - readonly backgroundGraphics: RenderGraphic[]; - // WARNING: The type "BackgroundMapState" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - backgroundMap?: BackgroundMapState; - // (undocumented) - readonly graphics: RenderGraphic[]; - // (undocumented) - hasMissingTiles: boolean; - // (undocumented) - insertMissingTile(tile: Tile): void; - // (undocumented) - readonly missingTiles: Set; - // (undocumented) - outputGraphic(graphic: RenderGraphic): void; - // (undocumented) - requestMissingTiles(): void; -} - -// @public -class ScreenViewport extends Viewport { - constructor(canvas: HTMLCanvasElement, parentDiv: HTMLDivElement, target: RenderTarget); - addChildDiv(element: HTMLElement, zIndex: number): void; - // (undocumented) - addDecorations(decorations: Decorations): void; - // (undocumented) - addNewDiv(className: string, overflowHidden: boolean, z: number): HTMLDivElement; - readonly canvas: HTMLCanvasElement; - changeView(view: ViewState): void; - clearViewUndo(): void; - static create(parentDiv: HTMLDivElement, view: ViewState): ScreenViewport; - readonly decorationDiv: HTMLDivElement; - doRedo(animationTime?: BeDuration): void; - doUndo(animationTime?: BeDuration): void; - // (undocumented) - drawLocateCursor(context: DecorateContext, pt: Point3d, aperture: number, isLocateCircleOn: boolean, hit?: HitDetail): void; - getClientRect(): ClientRect; - readonly isRedoPossible: boolean; - readonly isUndoPossible: boolean; - maxUndoSteps: number; - openToolTip(message: HTMLElement | string, location?: XAndY, options?: ToolTipOptions): void; - readonly parentDiv: HTMLDivElement; - // (undocumented) - pickCanvasDecoration(pt: XAndY): import("./render/System").CanvasDecoration | undefined; - pickNearestVisibleGeometry(pickPoint: Point3d, radius: number, allowNonLocatable?: boolean, out?: Point3d): Point3d | undefined; - static removeAllChildren(el: HTMLDivElement): void; - resetUndo(): void; - saveViewUndo(): void; - setCursor(cursor?: string): void; - setEventController(controller: EventController | undefined): void; - // (undocumented) - synchWithView(saveInUndo: boolean): void; - readonly toolTipDiv: HTMLDivElement; - // (undocumented) - viewCmdTargetCenter: Point3d | undefined; - readonly viewRect: ViewRect; -} - -// @public -class ScrollViewTool extends ViewManip { - constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// @public -class SectionDrawingModelState extends DrawingModelState { -} - -// @public -interface SelectedViewportChangedArgs { - // (undocumented) - current?: ScreenViewport; - // (undocumented) - previous?: ScreenViewport; -} - -// @public -enum SelectEventType { - // (undocumented) - Add = 0, - // (undocumented) - Clear = 3, - // (undocumented) - Remove = 1, - // (undocumented) - Replace = 2 -} - -// @public -enum SelectionMethod { - Box = 2, - Line = 1, - Pick = 0 -} - -// @public -enum SelectionMode { - Add = 1, - Remove = 2, - Replace = 0 -} - -// @public -enum SelectionProcessing { - AddElementToSelection = 0, - InvertElementInSelection = 2, - RemoveElementFromSelection = 1, - ReplaceSelectionWithElement = 3 -} - -// @public (undocumented) -enum SelectionScope { - Assembly = 1, - Element = 0 -} - -// @public -class SelectionSet { - constructor(iModel: IModelConnection); - add(elem: Id64Arg, sendEvent?: boolean): boolean; - addAndRemove(adds: Id64Arg, removes: Id64Arg): boolean; - readonly elements: Set; - emptyAll(): void; - has(elemId?: string): boolean; - // (undocumented) - iModel: IModelConnection; - invert(elem: Id64Arg): boolean; - readonly isActive: boolean; - isSelected(elemId?: Id64String): boolean; - readonly onChanged: BeEvent<(iModel: IModelConnection, evType: SelectEventType, ids?: Set | undefined) => void>; - remove(elem: Id64Arg, sendEvent?: boolean): boolean; - replace(elem: Id64Arg): void; - readonly size: number; -} - -// @public -class SelectionTool extends PrimitiveTool { - // (undocumented) - protected _selectionScopeValue: ToolSettingsValue; - applyToolSettingPropertyChange(updatedValue: ToolSettingsPropertySyncItem): boolean; - // (undocumented) - autoLockTarget(): void; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - filterHit(hit: HitDetail, _out?: LocateResponse): Promise; - // (undocumented) - protected getSelectionMethod(): SelectionMethod; - // (undocumented) - protected getSelectionMode(): SelectionMode; - // (undocumented) - static hidden: boolean; - // (undocumented) - protected initSelectTool(): void; - // (undocumented) - isSelectByPoints: boolean; - // (undocumented) - isSuspended: boolean; - // (undocumented) - onCleanup(): void; - // (undocumented) - onDataButtonUp(ev: BeButtonEvent): Promise; - // (undocumented) - onModifierKeyTransition(_wentDown: boolean, modifier: BeModifierKeys, _event: KeyboardEvent): Promise; - // (undocumented) - onMouseEndDrag(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseMotion(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseStartDrag(ev: BeButtonEvent): Promise; - // (undocumented) - onPostInstall(): void; - // (undocumented) - onResetButtonUp(ev: BeButtonEvent): Promise; - // (undocumented) - onRestartTool(): void; - // (undocumented) - onSuspend(): void; - // (undocumented) - onTouchCancel(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchComplete(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMove(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; - // (undocumented) - onUnsuspend(): void; - // (undocumented) - readonly points: Point3d[]; - // (undocumented) - processSelection(elementId: Id64Arg, process: SelectionProcessing): Promise; - // (undocumented) - requireWriteableTarget(): boolean; - // (undocumented) - protected selectByPointsEnd(ev: BeButtonEvent): boolean; - // (undocumented) - protected selectByPointsProcess(origin: Point3d, corner: Point3d, ev: BeButtonEvent, method: SelectionMethod, overlap: boolean): void; - // (undocumented) - protected selectByPointsStart(ev: BeButtonEvent): boolean; - // (undocumented) - selectDecoration(ev: BeButtonEvent, currHit?: HitDetail): Promise; - // (undocumented) - selectionOption: SelectOptions; - // (undocumented) - selectionScope: SelectionScope; - // (undocumented) - protected setSelectionMethod(method: SelectionMethod): void; - // (undocumented) - protected setSelectionMode(mode: SelectionMode): void; - // (undocumented) - protected showPrompt(mode: SelectionMode, method: SelectionMethod): void; - // (undocumented) - static startTool(): boolean; - supplyToolSettingsProperties(): ToolSettingsPropertyRecord[] | undefined; - // (undocumented) - static toolId: string; - // (undocumented) - updateSelection(elementId: Id64Arg, process: SelectionProcessing): boolean; - // (undocumented) - protected useOverlapSelection(ev: BeButtonEvent): boolean; - // (undocumented) - protected wantEditManipulators(): boolean; - // (undocumented) - protected wantPickableDecorations(): boolean; - // (undocumented) - protected wantSelectionClearOnMiss(_ev: BeButtonEvent): boolean; - // (undocumented) - protected wantSelectionScopeInToolSettings(): boolean; - // (undocumented) - protected wantToolSettings(): boolean; -} - -// @public -enum SelectOptions { - // (undocumented) - BoxAndReplace = 2, - // (undocumented) - LineAndReplace = 1, - // (undocumented) - PickAndAdd = 3, - // (undocumented) - PickAndRemove = 4, - // (undocumented) - PickAndReplace = 0 -} - -// @public -class SheetBorder { - addToBuilder(builder: GraphicBuilder): void; - static create(width: number, height: number, context?: DecorateContext): SheetBorder; - // (undocumented) - getRange(): Range2d; -} - -// @public -class SheetModelState extends GeometricModel2dState { -} - -// @public -class SheetViewState extends ViewState2d { - constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, sheetProps: SheetProps, attachments: Id64Array); - // (undocumented) - static readonly className: string; - // (undocumented) - computeFitRange(): Range3d; - // (undocumented) - static createFromProps(viewStateData: ViewStateProps, iModel: IModelConnection): ViewState | undefined; - createScene(context: SceneContext): void; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - getExtentLimits: { - max: number; - min: number; - } - load(): Promise; - markAttachment3dSceneIncomplete(): void; - onRenderFrame(_viewport: Viewport): void; - // (undocumented) - readonly sheetSize: Point2d; -} - -// @public -class SkyBox { -} - -// @public -class SkyCube extends SkyBox, implements SkyCubeProps { - // (undocumented) - readonly back: Id64String; - // (undocumented) - readonly bottom: Id64String; - // (undocumented) - static create(front: Id64String, back: Id64String, top: Id64String, bottom: Id64String, right: Id64String, left: Id64String, display?: boolean): SkyCube | undefined; - // (undocumented) - static fromJSON(skyboxJson: SkyBoxProps): SkyCube | undefined; - // (undocumented) - readonly front: Id64String; - // (undocumented) - readonly left: Id64String; - // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadParams(system: RenderSystem, iModel: IModelConnection): Promise; - // (undocumented) - readonly right: Id64String; - // (undocumented) - toJSON(): SkyBoxProps; - // (undocumented) - readonly top: Id64String; -} - -// @public -class SkyGradient extends SkyBox { - constructor(sky?: SkyBoxProps); - // (undocumented) - readonly groundColor: ColorDef; - // (undocumented) - readonly groundExponent: number; - // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadParams(_system: RenderSystem, iModel: IModelConnection): Promise; - // (undocumented) - readonly nadirColor: ColorDef; - // (undocumented) - readonly skyColor: ColorDef; - // (undocumented) - readonly skyExponent: number; - // (undocumented) - toJSON(): SkyBoxProps; - // (undocumented) - readonly twoColor: boolean; - // (undocumented) - readonly zenithColor: ColorDef; -} - -// @public -class SkySphere extends SkyBox { - // (undocumented) - static fromJSON(json: SkyBoxProps): SkySphere | undefined; - // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadParams(system: RenderSystem, iModel: IModelConnection): Promise; - textureId: Id64String; - // (undocumented) - toJSON(): SkyBoxProps; -} - -// @public -interface SliderEditorParams extends BasePropertyEditorParams { - intervals?: boolean; - maximum: number; - minimum: number; - numButtons?: number; - // (undocumented) - type: PropertyEditorParamTypes.Slider; - valueFactor?: number; - vertical?: boolean; -} - -// @public -class SnapDetail extends HitDetail { - constructor(from: HitDetail, snapMode?: SnapMode, heat?: SnapHeat, snapPoint?: XYZProps); - readonly adjustedPoint: Point3d; - clone(): SnapDetail; - // (undocumented) - draw(context: DecorateContext): void; - geomType?: HitGeomType; - // (undocumented) - getCurvePrimitive(singleSegment?: boolean): CurvePrimitive | undefined; - getHitType(): HitDetailType; - getPoint(): Point3d; - // (undocumented) - heat: SnapHeat; - readonly isHot: boolean; - readonly isPointAdjusted: boolean; - normal?: Vector3d; - parentGeomType?: HitParentGeomType; - primitive?: CurvePrimitive; - setCurvePrimitive(primitive?: CurvePrimitive, localToWorld?: Transform, geomType?: HitGeomType): void; - setSnapPoint(point: Point3d, heat: SnapHeat): void; - // (undocumented) - snapMode: SnapMode; - readonly snapPoint: Point3d; - sprite?: Sprite; -} - -// @public (undocumented) -enum SnapHeat { - // (undocumented) - InRange = 2, - // (undocumented) - None = 0, - // (undocumented) - NotInRange = 1 -} - -// @public (undocumented) -enum SnapMode { - // (undocumented) - Bisector = 32, - // (undocumented) - Center = 8, - // (undocumented) - Intersection = 64, - // (undocumented) - MidPoint = 4, - // (undocumented) - Nearest = 1, - // (undocumented) - NearestKeypoint = 2, - // (undocumented) - Origin = 16 -} - -// @public (undocumented) -enum SnapStatus { - // (undocumented) - Aborted = 1, - // (undocumented) - Disabled = 100, - // (undocumented) - FilteredByApp = 600, - // (undocumented) - FilteredByAppQuietly = 700, - // (undocumented) - NoElements = 2, - // (undocumented) - NoSnapPossible = 200, - // (undocumented) - NotSnappable = 300, - // (undocumented) - Success = 0 -} - -// @public -class SpatialModelState extends GeometricModel3dState { -} - -// @public -class SpatialViewState extends ViewState3d { - constructor(props: SpatialViewDefinitionProps, iModel: IModelConnection, arg3: CategorySelectorState, displayStyle: DisplayStyle3dState, modelSelector: ModelSelectorState); - // (undocumented) - addViewedModel(id: Id64String): void; - // (undocumented) - static readonly className: string; - // (undocumented) - clearViewedModels(): void; - // (undocumented) - computeFitRange(): AxisAlignedBox3d; - // (undocumented) - createAuxCoordSystem(acsName: string): AuxCoordSystemState; - // (undocumented) - static createFromProps(props: ViewStateProps, iModel: IModelConnection): ViewState | undefined; - // (undocumented) - equals(other: this): boolean; - // (undocumented) - equalState(other: SpatialViewState): boolean; - // (undocumented) - forEachModel(func: (model: GeometricModelState) => void): void; - // (undocumented) - forEachTileTreeModel(func: (model: TileTreeModelState) => void): void; - // (undocumented) - getExtentLimits: { - max: number; - min: number; - } - // (undocumented) - getViewedExtents(): AxisAlignedBox3d; - // (undocumented) - load(): Promise; - // (undocumented) - modelSelector: ModelSelectorState; - // (undocumented) - removeViewedModel(id: Id64String): void; - // (undocumented) - toJSON(): SpatialViewDefinitionProps; - // (undocumented) - viewsModel(modelId: Id64String): boolean; -} - -// @public -class Sprite { - fromImageSource(src: ImageSource): void; - fromUrl(url: string): void; - image?: HTMLImageElement; - readonly isLoaded: boolean; - readonly offset: Point2d; - readonly size: Point2d; -} - -// @public -class SpriteLocation implements CanvasDecoration { - activate(sprite: Sprite, viewport: ScreenViewport, locationWorld: XYAndZ, alpha?: number): void; - deactivate(): void; - decorate(context: DecorateContext): void; - drawDecoration(ctx: CanvasRenderingContext2D): void; - // (undocumented) - readonly isActive: boolean; - readonly position: Point3d; -} - -// @public -class StandardView { - static adjustToStandardRotation(matrix: Matrix3d): void; - // (undocumented) - static readonly back: Matrix3d; - // (undocumented) - static readonly bottom: Matrix3d; - // (undocumented) - static readonly front: Matrix3d; - static getStandardRotation(id: StandardViewId): Matrix3d; - // (undocumented) - static readonly iso: Matrix3d; - // (undocumented) - static readonly left: Matrix3d; - // (undocumented) - static readonly right: Matrix3d; - // (undocumented) - static readonly rightIso: Matrix3d; - // (undocumented) - static readonly top: Matrix3d; -} - -// @public -enum StandardViewId { - // (undocumented) - Back = 5, - // (undocumented) - Bottom = 1, - // (undocumented) - Front = 4, - // (undocumented) - Iso = 6, - // (undocumented) - Left = 2, - NotStandard = -1, - // (undocumented) - Right = 3, - // (undocumented) - RightIso = 7, - // (undocumented) - Top = 0 -} - -// @public -class StandardViewTool extends ViewTool { - constructor(viewport: ScreenViewport, _standardViewId: StandardViewId); - // (undocumented) - onPostInstall(): void; - // (undocumented) - static toolId: string; -} - -// @public (undocumented) -enum StartOrResume { - // (undocumented) - Resume = 2, - // (undocumented) - Start = 1 -} - -// @public -interface StructValue extends BasePropertyValue { - // (undocumented) - members: { - [name: string]: PropertyRecord; - } - // (undocumented) - valueFormat: PropertyValueFormat.Struct; -} - -// @public -class SubCategoriesRequest { - constructor(subcategories: ViewSubCategories, categoryIds: Set, imodel: IModelConnection); - // (undocumented) - cancel(): void; - // (undocumented) - dispatch(): Promise; -} - -// @public -interface SuppressLabelEditorParams extends BasePropertyEditorParams { - // (undocumented) - type: PropertyEditorParamTypes.SuppressEditorLabel; -} - -// @public -interface SuppressUnitLabelEditorParams extends BasePropertyEditorParams { - // (undocumented) - type: PropertyEditorParamTypes.SuppressUnitLabel; -} - -// @public (undocumented) -class SuspendedToolState { - constructor(); - // (undocumented) - stop(): void; -} - -// @public -class SyncFlags { - // (undocumented) - initFrom(other: SyncFlags): void; - // (undocumented) - invalidateAnimationFraction(): void; - // (undocumented) - invalidateController(): void; - // (undocumented) - invalidateDecorations(): void; - // (undocumented) - invalidateRedrawPending(): void; - // (undocumented) - invalidateRenderPlan(): void; - // (undocumented) - invalidateRotatePoint(): void; - // (undocumented) - invalidateScene(): void; - // (undocumented) - readonly isRedrawPending: boolean; - // (undocumented) - readonly isValidAnimationFraction: boolean; - // (undocumented) - readonly isValidController: boolean; - // (undocumented) - readonly isValidDecorations: boolean; - // (undocumented) - readonly isValidRenderPlan: boolean; - // (undocumented) - readonly isValidRotatePoint: boolean; - // (undocumented) - readonly isValidScene: boolean; - // (undocumented) - setRedrawPending(): void; - // (undocumented) - setValidAnimationFraction(): void; - // (undocumented) - setValidController(): void; - // (undocumented) - setValidDecorations(): void; - // (undocumented) - setValidRenderPlan(): void; - // (undocumented) - setValidRotatePoint(): void; - // (undocumented) - setValidScene(): void; -} - -// @public (undocumented) -class Target extends RenderTarget { - protected constructor(rect?: ViewRect); - // (undocumented) - protected abstract _assignDC(): boolean; - // (undocumented) - protected abstract _beginPaint(): void; - // (undocumented) - protected _dcAssigned: boolean; - // (undocumented) - protected _decorations?: Decorations; - // (undocumented) - protected abstract _endPaint(): void; - // WARNING: The type "FrameBuffer" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected _fbo?: FrameBuffer; - // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - addBatch(batch: Batch): void; - // (undocumented) - readonly ambientLight: Float32Array; - // (undocumented) - ambientOcclusionSettings: AmbientOcclusion.Settings; - // (undocumented) - analysisStyle?: AnalysisStyle; - // (undocumented) - analysisTexture?: RenderTexture; - // (undocumented) - animationBranches: AnimationBranchStates | undefined; - // WARNING: The type "BatchState" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly batchState: BatchState; - // (undocumented) - readonly bgColor: ColorDef; - // (undocumented) - readonly cameraFrustumNearScaleLimit: number; - // (undocumented) - changeDecorations(decs: Decorations): void; - // (undocumented) - changeDynamics(dynamics?: GraphicList): void; - // (undocumented) - changeFrustum(plan: RenderPlan): void; - // (undocumented) - changeRenderPlan(plan: RenderPlan): void; - // (undocumented) - changeScene(scene: GraphicList): void; - // (undocumented) - changeTerrain(terrain: GraphicList): void; - // WARNING: The type "ClipDef" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly clipDef: ClipDef; - // WARNING: The type "TextureHandle" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - clipMask: TextureHandle | undefined; - // (undocumented) - readonly clips: Clips; - // WARNING: The type "SceneCompositor" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly compositor: SceneCompositor; - // (undocumented) - readonly currentBatchId: number; - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly currentFeatureSymbologyOverrides: FeatureSymbology.Overrides; - // WARNING: The type "FeatureOverrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - currentOverrides: FeatureOverrides | undefined; - // WARNING: The type "ShaderFlags" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly currentShaderFlags: ShaderFlags; - // (undocumented) - readonly currentTransform: Transform; - // (undocumented) - readonly currentViewFlags: ViewFlags; - // (undocumented) - protected debugPaint(): void; - // WARNING: The type "BranchState" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly decorationState: BranchState; - // (undocumented) - dispose(): void; - // (undocumented) - drawFrame(sceneMilSecElapsed?: number): void; - // (undocumented) - readonly drawNonLocatable: boolean; - // (undocumented) - protected drawOverlayDecorations(): void; - // (undocumented) - readonly dynamics: GraphicList | undefined; - // WARNING: The type "ColorInfo" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly edgeColor: ColorInfo; - // (undocumented) - readonly flashedElemId: Id64String; - // (undocumented) - readonly flashedUpdateTime: BeTimePoint; - // (undocumented) - readonly flashIntensity: number; - // (undocumented) - readonly frustumUniforms: FrustumUniforms; - // (undocumented) - readonly fStop: number; - // WARNING: The type "ShaderProgramParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getEdgeLineCode(params: ShaderProgramParams, baseCode: number): number; - // WARNING: The type "RenderPass" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "EdgeOverrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getEdgeOverrides(pass: RenderPass): EdgeOverrides | undefined; - // WARNING: The type "ShaderProgramParams" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getEdgeWeight(params: ShaderProgramParams, baseWeight: number): number; - // WARNING: The type "Branch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getWorldDecorations(decs: GraphicList): Branch; - // (undocumented) - readonly hasClipMask: boolean; - // (undocumented) - readonly hasClipVolume: boolean; - // WARNING: The type "EdgeOverrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly hiddenEdgeOverrides: EdgeOverrides | undefined; - // (undocumented) - readonly hilite: Id64.Uint32Set; - // (undocumented) - hiliteSettings: Hilite.Settings; - // (undocumented) - readonly hiliteUpdateTime: BeTimePoint; - // (undocumented) - readonly is2d: boolean; - // (undocumented) - readonly is3d: boolean; - // (undocumented) - readonly isEdgeColorOverridden: boolean; - // (undocumented) - readonly isEdgeWeightOverridden: boolean; - // (undocumented) - isFadeOutActive: boolean; - // (undocumented) - readonly isReadPixelsInProgress: boolean; - // (undocumented) - readonly monoColor: ColorDef; - // (undocumented) - readonly nearPlaneCenter: Point3d; - // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - onBatchDisposed(batch: Batch): void; - // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - overrideFeatureSymbology(ovr: FeatureSymbology.Overrides): void; - // (undocumented) - readonly overridesUpdateTime: BeTimePoint; - // (undocumented) - performanceMetrics?: PerformanceMetrics; - // (undocumented) - plan?: RenderPlan; - // (undocumented) - readonly planFraction: number; - // (undocumented) - readonly planFrustum: Frustum; - // (undocumented) - popActiveVolume(): void; - // (undocumented) - popBatch(): void; - // (undocumented) - popBranch(): void; - // (undocumented) - readonly projectionMatrix: Matrix4d; - // (undocumented) - pushActiveVolume(): void; - // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - pushBatch(batch: Batch): void; - // WARNING: The type "ShaderProgramExecutor" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Branch" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - pushBranch(exec: ShaderProgramExecutor, branch: Branch): void; - // WARNING: The type "BranchState" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - pushState(state: BranchState): void; - // (undocumented) - readImage(wantRectIn: ViewRect, targetSizeIn: Point2d, flipVertically: boolean): ImageBuffer | undefined; - // (undocumented) - protected readImagePixels(out: Uint8Array, x: number, y: number, w: number, h: number): boolean; - // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void; - // (undocumented) - recordPerformanceMetric(operation: string): void; - // (undocumented) - readonly renderRect: ViewRect; - // (undocumented) - readonly renderSystem: RenderSystem; - // (undocumented) - reset(): void; - // (undocumented) - readonly scene: GraphicList; - // (undocumented) - setFlashed(id: Id64String, intensity: number): void; - // (undocumented) - setHiliteSet(hilite: Set): void; - // WARNING: The type "ShaderLights" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly shaderLights: ShaderLights | undefined; - // WARNING: The type "Techniques" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly techniques: Techniques; - // (undocumented) - readonly transparencyThreshold: number; - // (undocumented) - readonly viewMatrix: Transform; - // WARNING: The type "EdgeOverrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly visibleEdgeOverrides: EdgeOverrides | undefined; - // (undocumented) - readonly wantAmbientOcclusion: boolean; - // (undocumented) - readonly wantInvertBlackBackground: boolean; -} - -// @public (undocumented) -class TentativeOrAccuSnap { - // (undocumented) - static getCurrentPoint(): Point3d; - // (undocumented) - static getCurrentSnap(checkIsHot?: boolean): SnapDetail | undefined; - // (undocumented) - static getCurrentView(): ScreenViewport | undefined; - // (undocumented) - static readonly isHot: boolean; -} - -// @public (undocumented) -class TentativePoint { - // (undocumented) - clear(doErase: boolean): void; - // (undocumented) - currSnap?: SnapDetail; - // (undocumented) - decorate(context: DecorateContext): void; - getCurrSnap(): SnapDetail | undefined; - // (undocumented) - getHitAndList(holder: HitListHolder): SnapDetail | undefined; - // (undocumented) - getPoint(): Point3d; - // (undocumented) - isActive: boolean; - readonly isSnapped: boolean; - // (undocumented) - onButtonEvent(ev: BeButtonEvent): void; - // (undocumented) - onInitialized(): void; - // (undocumented) - process(ev: BeButtonEvent): Promise; - // (undocumented) - removeTentative(): void; - // (undocumented) - setCurrSnap(newSnap?: SnapDetail): void; - // (undocumented) - setHitList(list?: HitList): void; - // (undocumented) - setPoint(point: Point3d): void; - // (undocumented) - showTentative(): void; - // (undocumented) - tpHits?: HitList; - // (undocumented) - viewport?: ScreenViewport; -} - -// @public -interface TextureImage { - format: ImageSourceFormat | undefined; - image: HTMLImageElement | undefined; -} - -// @public (undocumented) -class ThreeAxes { - // (undocumented) - clone(): ThreeAxes; - // (undocumented) - static createFromMatrix3d(rMatrix: Matrix3d, result?: ThreeAxes): ThreeAxes; - // (undocumented) - equals(other: ThreeAxes): boolean; - // (undocumented) - fromMatrix3d(rMatrix: Matrix3d): void; - // (undocumented) - setFrom(other: ThreeAxes): void; - // (undocumented) - toMatrix3d(out?: Matrix3d): Matrix3d; - // (undocumented) - readonly x: Vector3d; - // (undocumented) - readonly y: Vector3d; - // (undocumented) - readonly z: Vector3d; -} - -// @public (undocumented) -class Tile { -} - -// @public (undocumented) -class TileAdmin { -} - -// @public (undocumented) -class TileLoader { - // (undocumented) - protected readonly _batchType: BatchType; - // (undocumented) - protected readonly _loadEdges: boolean; - compareTilePriorities(lhs: Tile, rhs: Tile): number; - // (undocumented) - abstract getChildrenProps(parent: Tile): Promise; - // WARNING: The type "TileRequest.ResponseData" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "TileRequest.Graphic" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadTileGraphic(tile: Tile, data: TileRequest.ResponseData, isCanceled?: () => boolean): Promise; - // WARNING: The type "TileIO.StreamBuffer" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "TileRequest.Graphic" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadTileGraphicFromStream(tile: Tile, streamBuffer: TileIO.StreamBuffer, isCanceled?: () => boolean): Promise; - // (undocumented) - readonly maxDepth: number; - // (undocumented) - readonly parentsAndChildrenExclusive: boolean; - // WARNING: The type "Tile.LoadPriority" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - readonly priority: Tile.LoadPriority; - // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - processSelectedTiles(selected: Tile[], _args: Tile.DrawArgs): Tile[]; - // WARNING: The type "TileRequest.Response" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - abstract requestTileContent(tile: Tile): Promise; - // WARNING: The type "Tile.Params" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - abstract tileRequiresLoading(params: Tile.Params): boolean; - // (undocumented) - readonly viewFlagOverrides: ViewFlag.Overrides; -} - -// @public (undocumented) -class TileTree { -} - -// @public (undocumented) -interface TileTreeModelState { - // (undocumented) - readonly loadStatus: TileTree.LoadStatus; - // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadTileTree(edgesRequired: boolean, animationId?: Id64String, asClassifier?: boolean, classifierExpansion?: number): TileTree.LoadStatus; - // (undocumented) - readonly tileTree: TileTree | undefined; - // (undocumented) - readonly treeModelId: Id64String; -} - -// @public (undocumented) -class TileTreeState { - constructor(_iModel: IModelConnection, _is3d: boolean, _modelId: Id64String); - // (undocumented) - clearTileTree(): void; - // (undocumented) - edgesOmitted: boolean; - // (undocumented) - readonly iModel: IModelConnection; - // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - loadStatus: TileTree.LoadStatus; - // (undocumented) - setTileTree(props: TileTreeProps, loader: TileLoader): void; - // (undocumented) - tileTree?: TileTree; -} - -// @public -class Tool { - constructor(..._args: any[]); - static readonly description: string; - static readonly flyover: string; - static hidden: boolean; - static readonly keyin: string; - static namespace: I18NNamespace; - static register(namespace?: I18NNamespace): void; - run(..._arg: any[]): boolean; - static toolId: string; -} - -// @public -class ToolAdmin { - acsContextLock: boolean; - acsPlaneSnapLock: boolean; - readonly activeTool: InteractiveTool | undefined; - readonly activeToolChanged: BeEvent<(tool: Tool, start: StartOrResume) => void>; - addEvent(ev: Event, vp?: ScreenViewport): void; - // (undocumented) - adjustPoint(pointActive: Point3d, vp: ScreenViewport, projectToACS?: boolean, applyLocks?: boolean): void; - // (undocumented) - adjustPointToACS(pointActive: Point3d, vp: Viewport, perpendicular: boolean): void; - // (undocumented) - adjustPointToGrid(pointActive: Point3d, vp: Viewport): void; - // (undocumented) - adjustSnapPoint(perpendicular?: boolean): void; - assemblyLock: boolean; - // (undocumented) - beginDynamics(): void; - // (undocumented) - callOnCleanup(): void; - convertTouchEndToButtonUp(ev: BeTouchEvent, button?: BeButton): Promise; - convertTouchMoveStartToButtonDownAndMotion(startEv: BeTouchEvent, ev: BeTouchEvent, button?: BeButton): Promise; - convertTouchMoveToMotion(ev: BeTouchEvent): Promise; - convertTouchStartToButtonDown(ev: BeTouchEvent, button?: BeButton): Promise; - convertTouchTapToButtonDownAndUp(ev: BeTouchEvent, button?: BeButton): Promise; - // (undocumented) - readonly currentInputState: CurrentInputState; - readonly currentTool: InteractiveTool; - readonly cursorView: ScreenViewport | undefined; - // (undocumented) - decorate(context: DecorateContext): void; - defaultToolArgs: any[] | undefined; - defaultToolId: string; - doRedoOperation(): Promise; - doUndoOperation(): Promise; - // (undocumented) - endDynamics(): void; - // (undocumented) - exitInputCollector(): void; - // (undocumented) - exitViewTool(): void; - // (undocumented) - fillEventFromCursorLocation(ev: BeButtonEvent): void; - // (undocumented) - fillEventFromLastDataButton(ev: BeButtonEvent): void; - protected filterViewport(vp: Viewport): boolean; - // (undocumented) - getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined; - getToolTip(hit: HitDetail): Promise; - gridLock: boolean; - readonly idleTool: IdleTool; - // (undocumented) - readonly isLocateCircleOn: boolean; - readonly manipulatorToolEvent: BeEvent<(tool: Tool, event: ManipulatorToolEvent) => void>; - // (undocumented) - markupView?: ScreenViewport; - // (undocumented) - onInitialized(): void; - // (undocumented) - onInstallTool(tool: InteractiveTool): boolean; - // (undocumented) - onMouseLeave(vp: ScreenViewport): Promise; - // (undocumented) - onPostInstallTool(tool: InteractiveTool): void; - // (undocumented) - onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void; - // (undocumented) - onShutDown(): void; - // (undocumented) - readonly primitiveTool: PrimitiveTool | undefined; - processWheelEvent(ev: BeWheelEvent, doUpdate: boolean): Promise; - // (undocumented) - sendButtonEvent(ev: BeButtonEvent): Promise; - // (undocumented) - sendEndDragEvent(ev: BeButtonEvent): Promise; - // (undocumented) - setAdjustedDataPoint(ev: BeButtonEvent): void; - // (undocumented) - setCursor(cursor: string | undefined): void; - // (undocumented) - setIncompatibleViewportCursor(restore: boolean): void; - // (undocumented) - setInputCollector(newTool?: InputCollector): void; - // (undocumented) - setLocateCircleOn(locateOn: boolean): void; - // (undocumented) - setLocateCursor(enableLocate: boolean): void; - // (undocumented) - setPrimitiveTool(newTool?: PrimitiveTool): void; - // (undocumented) - setViewTool(newTool?: ViewTool): void; - startDefaultTool(): void; - // (undocumented) - startEventLoop(): void; - // (undocumented) - startInputCollector(newTool: InputCollector): void; - // (undocumented) - startPrimitiveTool(newTool?: PrimitiveTool): void; - // (undocumented) - startViewTool(newTool: ViewTool): void; - syncToolSettingsProperties(toolId: string, syncProperties: ToolSettingsPropertySyncItem[]): void; - // (undocumented) - testDecorationHit(id: string): boolean; - // (undocumented) - toolSettingsChangeHandler: ((toolId: string, syncProperties: ToolSettingsPropertySyncItem[]) => void) | undefined; - // (undocumented) - readonly toolState: ToolState; - // (undocumented) - updateDynamics(ev?: BeButtonEvent, useLastData?: boolean, adjustPoint?: boolean): void; - // (undocumented) - readonly viewTool: ViewTool | undefined; -} - -// @public -class ToolRegistry { - create(toolId: string, ...args: any[]): Tool | undefined; - executeExactMatch(keyin: string, ...args: any[]): boolean; - find(toolId: string): ToolType | undefined; - findExactMatch(keyin: string): ToolType | undefined; - findPartialMatches(keyin: string): FuzzySearchResults; - getToolList(): ToolList; - register(toolClass: ToolType, namespace?: I18NNamespace): void; - registerModule(moduleObj: any, namespace?: I18NNamespace): void; - run(toolId: string, ...args: any[]): boolean; - // (undocumented) - readonly tools: Map; - unRegister(toolId: string): void; -} - -// @public -class ToolSettings { - static animationTime: BeDuration; - static doubleClickTimeout: BeDuration; - static doubleClickToleranceInches: number; - static doubleTapTimeout: BeDuration; - static noMotionTimeout: BeDuration; - static preserveWorldUp: boolean; - static startDragDelay: BeDuration; - static startDragDistanceInches: number; - static touchMoveDelay: BeDuration; - static touchMoveDistanceInches: number; - static viewToolPickRadiusInches: number; - static walkCameraAngle: Angle; - static walkEnforceZUp: boolean; - static walkVelocity: number; - static wheelLineFactor: number; - static wheelPageFactor: number; - static wheelZoomBumpDistance: number; - static wheelZoomRatio: number; -} - -// @public -class ToolSettingsPropertyRecord extends PropertyRecord { - constructor(value: PropertyValue, property: PropertyDescription, editorPosition: EditorPosition); - // (undocumented) - editorPosition: EditorPosition; -} - -// @public -class ToolSettingsPropertySyncItem { - constructor(value: ToolSettingsValue, propertyName: string); - // (undocumented) - propertyName: string; - // (undocumented) - value: ToolSettingsValue; -} - -// WARNING: valueFormat has incomplete type information -// @public -class ToolSettingsValue implements PrimitiveValue { - constructor(value?: number | string | boolean | Date, displayValue?: string); - // (undocumented) - clone(): ToolSettingsValue; - // (undocumented) - displayValue?: string; - // (undocumented) - readonly hasDisplayValue: boolean; - // (undocumented) - readonly isNullValue: boolean; - // (undocumented) - update(newValue: ToolSettingsValue): boolean; - // (undocumented) - value?: number | string | boolean | Date; -} - -// @public (undocumented) -class ToolState { - // (undocumented) - clone(): ToolState; - // (undocumented) - coordLockOvr: CoordinateLockOverrides; - // (undocumented) - locateCircleOn: boolean; - // (undocumented) - setFrom(other: ToolState): void; -} - -// @public -interface ToolTipOptions { - // (undocumented) - duration?: BeDuration; - // (undocumented) - placement?: string; -} - -// @public -class TouchCursor implements CanvasDecoration { - protected constructor(vp: ScreenViewport); - // (undocumented) - protected _fillColor: string; - // (undocumented) - protected _inTouchTap: boolean; - // (undocumented) - protected _isDragging: boolean; - // (undocumented) - protected _offsetPosition: Point3d; - // (undocumented) - protected _outlineColor: string; - // (undocumented) - protected _size: number; - // (undocumented) - protected _yOffset: number; - // (undocumented) - static createFromTouchTap(ev: BeTouchEvent): TouchCursor | undefined; - // (undocumented) - doTouchEnd(ev: BeTouchEvent): void; - // (undocumented) - doTouchMove(ev: BeTouchEvent): boolean; - // (undocumented) - doTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean; - // (undocumented) - doTouchStart(ev: BeTouchEvent): void; - // (undocumented) - doTouchTap(ev: BeTouchEvent): Promise; - // (undocumented) - drawDecoration(ctx: CanvasRenderingContext2D): void; - // (undocumented) - protected getFillColor(isSelected: boolean): string; - // (undocumented) - isButtonHandled(ev: BeButtonEvent): boolean; - // (undocumented) - protected isSelected(pt: XAndY): boolean; - // (undocumented) - position: Point3d; - // (undocumented) - protected setPosition(vp: Viewport, worldLocation: Point3d): boolean; -} - -// @public -enum TsHorizontalAlignment { - // (undocumented) - Center = 2, - // (undocumented) - Justify = 4, - // (undocumented) - Left = 1, - // (undocumented) - Right = 3 -} - -// @public -enum TsVerticalAlignment { - // (undocumented) - Bottom = 3, - // (undocumented) - Middle = 2, - // (undocumented) - Top = 1 -} - -// @public -class TwoWayViewportSync { - connect(view1: Viewport, view2: Viewport): void; - disconnect(): void; -} - -// @public -class Unit implements UnitProps { - constructor(name: string, label: string, unitFamily: string); - // (undocumented) - isValid: boolean; - // (undocumented) - label: string; - // (undocumented) - name: string; - // (undocumented) - unitFamily: string; -} - -// @public -enum UsesDragSelect { - Box = 0, - Line = 1, - None = 2 -} - -// @public -enum UsesFence { - Check = 0, - None = 2, - Required = 1 -} - -// @public -enum UsesSelection { - Check = 0, - None = 2, - Required = 1 -} - -// @public -interface ViewChangeOptions { - animateFrustumChange?: boolean; - animationTime?: BeDuration; - marginPercent?: MarginPercent; - saveInUndo?: boolean; -} - -// @public -class ViewFrustum { - protected adjustAspectRatio(origin: Point3d, delta: Vector3d): void; - // (undocumented) - static createFromViewport(vp: Viewport, view?: ViewState): ViewFrustum | undefined; - // (undocumented) - static createFromViewportAndPlane(vp: Viewport, plane: Plane3dByOriginAndUnitNormal): ViewFrustum | undefined; - // (undocumented) - fromView(from: XYZ, to?: XYZ): void; - // (undocumented) - frustFraction: number; - getFrustum(sys?: CoordSystem, adjustedBox?: boolean, box?: Frustum): Frustum; - // (undocumented) - getPixelSizeAtPoint(inPoint?: Point3d): number; - // (undocumented) - getViewCorners(): Range3d; - // (undocumented) - readonly invalidFrustum: boolean; - static nearScale24: number; - npcToView(pt: Point3d, out?: Point3d): Point3d; - npcToViewArray(pts: Point3d[]): void; - npcToWorld(pt: XYAndZ, out?: Point3d): Point3d; - npcToWorldArray(pts: Point3d[]): void; - readonly rotation: Matrix3d; - // (undocumented) - toView(from: XYZ, to?: XYZ): void; - view: ViewState; - view4dToWorld(input: Point4d, out?: Point3d): Point3d; - view4dToWorldArray(viewPts: Point4d[], worldPts: Point3d[]): void; - readonly viewDelta: Vector3d; - readonly viewDeltaUnexpanded: Vector3d; - readonly viewOrigin: Point3d; - readonly viewOriginUnexpanded: Point3d; - viewToNpc(pt: Point3d, out?: Point3d): Point3d; - viewToNpcArray(pts: Point3d[]): void; - viewToWorld(input: XYAndZ, out?: Point3d): Point3d; - viewToWorldArray(pts: Point3d[]): void; - worldToNpc(pt: XYAndZ, out?: Point3d): Point3d; - worldToNpcArray(pts: Point3d[]): void; - // (undocumented) - readonly worldToNpcMap: Map4d; - worldToView(input: XYAndZ, out?: Point3d): Point3d; - worldToView4d(input: XYAndZ, out?: Point4d): Point4d; - worldToView4dArray(worldPts: Point3d[], viewPts: Point4d[]): void; - worldToViewArray(pts: Point3d[]): void; - // (undocumented) - readonly worldToViewMap: Map4d; - // (undocumented) - readonly zClipAdjusted: boolean; -} - -// @public (undocumented) -class ViewHandleArray { - constructor(viewTool: ViewManip); - // (undocumented) - add(handle: ViewingToolHandle): void; - // (undocumented) - readonly count: number; - // (undocumented) - drawHandles(context: DecorateContext): void; - // (undocumented) - empty(): void; - // (undocumented) - focus: number; - // (undocumented) - focusDrag: boolean; - // (undocumented) - readonly focusHandle: ViewingToolHandle | undefined; - // (undocumented) - focusHitHandle(): void; - // (undocumented) - getByIndex(index: number): ViewingToolHandle | undefined; - // (undocumented) - handles: ViewingToolHandle[]; - hasHandle(handleType: ViewHandleType): boolean; - // (undocumented) - readonly hitHandle: ViewingToolHandle | undefined; - // (undocumented) - hitHandleIndex: number; - // (undocumented) - motion(ev: BeButtonEvent): void; - // (undocumented) - onReinitialize(): void; - // (undocumented) - setFocus(index: number): void; - // (undocumented) - testHit(ptScreen: Point3d, forced?: ViewHandleType): boolean; - // (undocumented) - viewport?: Viewport; - // (undocumented) - viewTool: ViewManip; -} - -// @public (undocumented) -enum ViewHandleType { - // (undocumented) - Fly = 64, - // (undocumented) - Look = 128, - // (undocumented) - None = 0, - // (undocumented) - Pan = 4, - // (undocumented) - Rotate = 1, - // (undocumented) - Scroll = 8, - // (undocumented) - TargetCenter = 2, - // (undocumented) - Walk = 32, - // (undocumented) - Zoom = 16 -} - -// @public (undocumented) -enum ViewHandleWeight { - // (undocumented) - Bold = 3, - // (undocumented) - FatDot = 8, - // (undocumented) - Normal = 2, - // (undocumented) - Thin = 1, - // (undocumented) - VeryBold = 4 -} - -// @public (undocumented) -class ViewingToolHandle { - constructor(viewTool: ViewManip); - // (undocumented) - checkOneShot(): boolean; - // (undocumented) - abstract doManipulation(ev: BeButtonEvent, inDynamics: boolean): boolean; - // (undocumented) - drawHandle(_context: DecorateContext, _hasFocus: boolean): void; - // (undocumented) - abstract firstPoint(ev: BeButtonEvent): boolean; - // (undocumented) - focusIn(): void; - // (undocumented) - focusOut(): void; - // (undocumented) - getHandleCursor(): string; - // (undocumented) - readonly handleType: ViewHandleType; - // (undocumented) - motion(_ev: BeButtonEvent): boolean; - // (undocumented) - noMotion(_ev: BeButtonEvent): boolean; - // (undocumented) - onReinitialize(): void; - // (undocumented) - abstract testHandleForHit(ptScreen: Point3d, out: { - distance: number; - priority: ViewManipPriority; - }): boolean; - // (undocumented) - viewTool: ViewManip; -} - -// @public -class ViewManager { - addDecorator(decorator: Decorator): () => void; - addViewport(newVp: ScreenViewport): BentleyStatus; - // (undocumented) - beginDynamicsMode(): void; - clearSelectedView(): void; - // (undocumented) - readonly crossHairCursor: string; - // (undocumented) - cursor: string; - // (undocumented) - readonly decorators: Decorator[]; - // (undocumented) - readonly doesHostHaveFocus: boolean; - dropDecorator(decorator: Decorator): void; - dropViewport(vp: ScreenViewport, disposeOfViewport?: boolean): BentleyStatus; - // (undocumented) - readonly dynamicsCursor: string; - // (undocumented) - endDynamicsMode(): void; - forEachViewport(func: (vp: ScreenViewport) => void): void; - getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined; - getDecorationToolTip(hit: HitDetail): Promise; - getFirstOpenView(): ScreenViewport | undefined; - // (undocumented) - readonly grabbingCursor: string; - // (undocumented) - readonly grabCursor: string; - // (undocumented) - inDynamicsMode: boolean; - invalidateDecorationsAllViews(): void; - // (undocumented) - invalidateScenes(): void; - // (undocumented) - invalidateViewportScenes(): void; - // (undocumented) - notifySelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void; - readonly onBeginRender: BeEvent<() => void>; - onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise; - readonly onFinishRender: BeEvent<() => void>; - // (undocumented) - onInitialized(): void; - // (undocumented) - onNewTilesReady(): void; - readonly onSelectedViewportChanged: BeUiEvent; - // (undocumented) - onSelectionSetChanged(_iModel: IModelConnection): void; - // (undocumented) - onShutDown(): void; - readonly onViewClose: BeUiEvent; - readonly onViewOpen: BeUiEvent; - readonly onViewResume: BeUiEvent; - readonly onViewSuspend: BeUiEvent; - renderLoop(): void; - // (undocumented) - readonly sceneInvalidated: boolean; - readonly selectedView: ScreenViewport | undefined; - setSelectedView(vp: ScreenViewport | undefined): BentleyStatus; - setViewCursor(cursor?: string): void; - // (undocumented) - validateViewportScenes(): void; -} - -// @public -class ViewManip extends ViewTool { - constructor(viewport: ScreenViewport | undefined, handleMask: number, oneShot: boolean, isDraggingRequired?: boolean); - // (undocumented) - protected _forcedHandle: ViewHandleType; - // (undocumented) - protected static _useViewAlignedVolume: boolean; - // (undocumented) - changeViewport(vp?: ScreenViewport): void; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - enforceZUp(pivotPoint: Point3d): boolean; - // (undocumented) - static fitView(viewport: ScreenViewport, doAnimate: boolean, marginPercent?: MarginPercent): void; - // (undocumented) - frustumValid: boolean; - // (undocumented) - static getFocusPlaneNpc(vp: Viewport): number; - // (undocumented) - handleMask: number; - // (undocumented) - inHandleModify: boolean; - // (undocumented) - isDragging: boolean; - // (undocumented) - isDraggingRequired: boolean; - isPointVisible(testPt: Point3d): boolean; - // (undocumented) - readonly isZUp: boolean; - // (undocumented) - lensAngleMatches(angle: Angle, tolerance: number): boolean; - // (undocumented) - nPts: number; - // (undocumented) - onCleanup(): void; - // (undocumented) - onDataButtonDown(ev: BeButtonEvent): Promise; - // (undocumented) - onDataButtonUp(_ev: BeButtonEvent): Promise; - // (undocumented) - oneShot: boolean; - // (undocumented) - onMouseEndDrag(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseMotion(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseMotionStopped(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseNoMotion(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseStartDrag(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseWheel(inputEv: BeWheelEvent): Promise; - // (undocumented) - onPostInstall(): void; - // (undocumented) - onReinitialize(): void; - // (undocumented) - onTouchCancel(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchComplete(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMove(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; - // (undocumented) - onTouchTap(ev: BeTouchEvent): Promise; - // (undocumented) - processFirstPoint(ev: BeButtonEvent): boolean; - // (undocumented) - processPoint(ev: BeButtonEvent, inDynamics: boolean): boolean; - // (undocumented) - setCameraLensAngle(lensAngle: Angle, retainEyePoint: boolean): ViewStatus; - setTargetCenterWorld(pt: Point3d, lockTarget: boolean, saveTarget: boolean): void; - // (undocumented) - startHandleDrag(ev: BeButtonEvent, forcedHandle?: ViewHandleType): Promise; - // (undocumented) - stoppedOverHandle: boolean; - // (undocumented) - targetCenterLocked: boolean; - // (undocumented) - targetCenterValid: boolean; - // (undocumented) - readonly targetCenterWorld: Point3d; - // (undocumented) - updateTargetCenter(): void; - // (undocumented) - viewHandles: ViewHandleArray; -} - -// @public (undocumented) -enum ViewManipPriority { - // (undocumented) - High = 1000, - // (undocumented) - Low = 1, - // (undocumented) - Medium = 100, - // (undocumented) - Normal = 10 -} - -// @public -class Viewport implements IDisposable { - protected constructor(target: RenderTarget); - // (undocumented) - protected readonly _viewRange: ViewRect; - // (undocumented) - addDecorations(_decorations: Decorations): void; - readonly alwaysDrawn: Id64Set | undefined; - // (undocumented) - readonly analysisStyle: AnalysisStyle | undefined; - // (undocumented) - animate(): void; - // (undocumented) - animateFrustumChange(start: Frustum, end: Frustum, animationTime?: BeDuration): void; - // (undocumented) - animationFraction: number; - // (undocumented) - applyViewState(val: ViewState, animationTime?: BeDuration): void; - // (undocumented) - readonly auxCoordSystem: AuxCoordSystemState; - // (undocumented) - readonly backgroundMapPlane: Plane3dByOriginAndUnitNormal | undefined; - // (undocumented) - changeDynamics(dynamics: GraphicList | undefined): void; - changeView(view: ViewState): void; - clearAlwaysDrawn(): void; - clearNeverDrawn(): void; - // (undocumented) - computeViewRange(): Range3d; - // (undocumented) - continuousRendering: boolean; - // (undocumented) - createSceneContext(): SceneContext; - // WARNING: The type "Tile.DebugBoundingBoxes" needs to be exported by the package (e.g. added to index.ts) - debugBoundingBoxes: Tile.DebugBoundingBoxes; - determineVisibleDepthRange(rect?: ViewRect, result?: DepthRangeNpc): DepthRangeNpc | undefined; - // (undocumented) - dispose(): void; - featureOverrideProvider: FeatureOverrideProvider | undefined; - flashDuration: number; - flashIntensity: number; - flashUpdateTime?: BeTimePoint; - freezeScene: boolean; - // (undocumented) - fromView(from: XYZ, to?: XYZ): void; - // (undocumented) - readonly frustFraction: number; - // (undocumented) - getAuxCoordOrigin(result?: Point3d): Point3d; - // (undocumented) - getAuxCoordRotation(result?: Matrix3d): Matrix3d; - getContrastToBackgroundColor(): ColorDef; - getFrustum(sys?: CoordSystem, adjustedBox?: boolean, box?: Frustum): Frustum; - // WARNING: The type "Pixel.Buffer" needs to be exported by the package (e.g. added to index.ts) - getPixelDataNpcPoint(pixels: Pixel.Buffer, x: number, y: number, out?: Point3d): Point3d | undefined; - // WARNING: The type "Pixel.Buffer" needs to be exported by the package (e.g. added to index.ts) - getPixelDataWorldPoint(pixels: Pixel.Buffer, x: number, y: number, out?: Point3d): Point3d | undefined; - getPixelSizeAtPoint(point?: Point3d): number; - getWorldFrustum(box?: Frustum): Frustum; - hilite: Hilite.Settings; - readonly iModel: IModelConnection; - // (undocumented) - invalidateDecorations(): void; - // (undocumented) - invalidateRenderPlan(): void; - // (undocumented) - invalidateScene(): void; - readonly isAlwaysDrawnExclusive: boolean; - // (undocumented) - readonly isAspectRatioLocked: boolean; - readonly isCameraOn: boolean; - // (undocumented) - readonly isContextRotationRequired: boolean; - isFadeOutActive: boolean; - readonly isGridOn: boolean; - // (undocumented) - readonly isPointAdjustmentRequired: boolean; - // (undocumented) - readonly isSnapAdjustmentRequired: boolean; - lastFlashedElem?: string; - static nearScale24: number; - readonly neverDrawn: Id64Set | undefined; - npcToView(pt: Point3d, out?: Point3d): Point3d; - npcToViewArray(pts: Point3d[]): void; - npcToWorld(pt: XYAndZ, out?: Point3d): Point3d; - npcToWorldArray(pts: Point3d[]): void; - numReadyTiles: number; - readonly numRequestedTiles: number; - numSelectedTiles: number; - readonly onAlwaysDrawnChanged: BeEvent<(vp: Viewport) => void>; - readonly onNeverDrawnChanged: BeEvent<(vp: Viewport) => void>; - readonly onRender: BeEvent<(vp: Viewport) => void>; - readonly onViewChanged: BeEvent<(vp: Viewport) => void>; - pixelsFromInches(inches: number): number; - // (undocumented) - readonly pixelsPerInch: number; - // (undocumented) - pointToGrid(point: Point3d): void; - readImage(rect?: ViewRect, targetSize?: Point2d, flipVertically?: boolean): ImageBuffer | undefined; - // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) - // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) - readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable?: boolean): void; - // (undocumented) - removeAnimator(): void; - // (undocumented) - renderFrame(): boolean; - readonly rotation: Matrix3d; - scroll(screenDist: Point2d, options?: ViewChangeOptions): void; - setAlwaysDrawn(ids: Id64Set, exclusive?: boolean): void; - setFlashed(id: string | undefined, duration: number): void; - setNeverDrawn(ids: Id64Set): void; - setStandardRotation(id: StandardViewId): void; - setupFromView(): ViewStatus; - setupViewFromFrustum(inFrustum: Frustum): boolean; - // (undocumented) - readonly sync: SyncFlags; - synchWithView(_saveInUndo: boolean): void; - // (undocumented) - readonly target: RenderTarget; - // (undocumented) - toView(from: XYZ, to?: XYZ): void; - turnCameraOn(lensAngle?: Angle): ViewStatus; - static undoDelay: BeDuration; - readonly view: ViewState; - view4dToWorld(input: Point4d, out?: Point3d): Point3d; - view4dToWorldArray(viewPts: Point4d[], worldPts: Point3d[]): void; - readonly viewDelta: Vector3d; - readonly viewFlags: ViewFlags; - // (undocumented) - readonly viewFrustum: ViewFrustum; - readonly viewportId: number; - readonly viewRect: ViewRect; - viewToNpc(pt: Point3d, out?: Point3d): Point3d; - viewToNpcArray(pts: Point3d[]): void; - viewToWorld(input: XYAndZ, out?: Point3d): Point3d; - viewToWorldArray(pts: Point3d[]): void; - // (undocumented) - readonly wantAntiAliasLines: AntiAliasPref; - // (undocumented) - readonly wantAntiAliasText: AntiAliasPref; - worldToNpc(pt: XYAndZ, out?: Point3d): Point3d; - worldToNpcArray(pts: Point3d[]): void; - worldToView(input: XYAndZ, out?: Point3d): Point3d; - worldToView4d(input: XYAndZ, out?: Point4d): Point4d; - worldToView4dArray(worldPts: Point3d[], viewPts: Point4d[]): void; - worldToViewArray(pts: Point3d[]): void; - readonly worldToViewMap: Map4d; - zoom(newCenter: Point3d | undefined, factor: number, options?: ViewChangeOptions): void; - zoomToElementProps(elementProps: ElementProps[], options?: ViewChangeOptions & ZoomToOptions): void; - zoomToElements(ids: Id64Arg, options?: ViewChangeOptions & ZoomToOptions): Promise; - zoomToPlacementProps(placementProps: PlacementProps[], options?: ViewChangeOptions & ZoomToOptions): void; - zoomToVolume(volume: LowAndHighXYZ | LowAndHighXY, options?: ViewChangeOptions): void; -} - -// @public -interface ViewportAnimator { - animate(viewport: Viewport): RemoveMe; - onInterrupted(viewport: Viewport): void; -} - -// @public -class ViewRect { - constructor(left?: number, top?: number, right?: number, bottom?: number); - readonly area: number; - readonly aspect: number; - bottom: number; - clone(result?: ViewRect): ViewRect; - computeOverlap(other: ViewRect, out?: ViewRect): ViewRect | undefined; - containsPoint(point: XAndY): boolean; - equals(other: ViewRect): boolean; - // (undocumented) - extend(other: ViewRect): void; - height: number; - init(left: number, top: number, right: number, bottom: number): void; - initFromPoints(topLeft: XAndY, bottomRight: XAndY): void; - initFromRange(input: LowAndHighXY): void; - inset(deltaX: number, deltaY: number): void; - insetByPercent(percent: number): void; - insetUniform(offset: number): void; - isContained(other: ViewRect): boolean; - readonly isNull: boolean; - readonly isValid: boolean; - left: number; - overlaps(other: ViewRect): boolean; - right: number; - scaleAboutCenter(xScale: number, yScale: number): void; - setFrom(other: ViewRect): void; - top: number; - width: number; -} - -// @public -class ViewRedoTool extends ViewTool { - // (undocumented) - onPostInstall(): void; - // (undocumented) - static toolId: string; -} - -// @public -class ViewState extends ElementState { - protected constructor(props: ViewDefinitionProps, iModel: IModelConnection, categorySelector: CategorySelectorState, displayStyle: DisplayStyleState); - // (undocumented) - protected _featureOverridesDirty: boolean; - // (undocumented) - protected _selectionSetDirty: boolean; - // (undocumented) - protected adjustAspectRatio(windowAspect: number): void; - abstract allow3dManipulations(): boolean; - readonly analysisStyle: AnalysisStyle | undefined; - // (undocumented) - readonly areAllTileTreesLoaded: boolean; - readonly areFeatureOverridesDirty: boolean; - readonly auxiliaryCoordinateSystem: AuxCoordSystemState; - readonly backgroundColor: ColorDef; - calculateFrustum(result?: Frustum): Frustum | undefined; - // (undocumented) - categorySelector: CategorySelectorState; - changeCategoryDisplay(categories: Id64Arg, display: boolean, enableAllSubCategories?: boolean): void; - // (undocumented) - static readonly className: string; - abstract computeFitRange(): Range3d; - // (undocumented) - computeWorldToNpc: { - frustFraction: number; - map: Map4d | undefined; - } - // (undocumented) - abstract createAuxCoordSystem(acsName: string): AuxCoordSystemState; - // (undocumented) - createClassification(context: SceneContext): void; - static createFromProps(_props: ViewStateProps, _iModel: IModelConnection): ViewState | undefined; - // (undocumented) - createScene(context: SceneContext): void; - // (undocumented) - createTerrain(context: SceneContext): void; - decorate(context: DecorateContext): void; - // (undocumented) - description?: string; - // (undocumented) - displayStyle: DisplayStyleState; - // (undocumented) - drawGrid(context: DecorateContext): void; - dropSubCategoryOverride(id: Id64String): void; - equals(other: this): boolean; - equalState(other: ViewState): boolean; - abstract forEachModel(func: (model: GeometricModelState) => void): void; - forEachTileTreeModel(func: (model: TileTreeModelState) => void): void; - getAspectRatio(): number; - getAspectRatioSkew(): number; - getAuxiliaryCoordinateSystemId(): Id64String; - getCenter(result?: Point3d): Point3d; - getDetail(name: string): any; - // (undocumented) - getDetails(): any; - getExtentLimits: { - max: number; - min: number; - } - abstract getExtents(): Vector3d; - getGridOrientation(): GridOrientationType; - getGridSettings(vp: Viewport, origin: Point3d, rMatrix: Matrix3d, orientation: GridOrientationType): void; - // (undocumented) - getGridSpacing(): XAndY; - // (undocumented) - getGridsPerRef(): number; - abstract getOrigin(): Point3d; - abstract getRotation(): Matrix3d; - // (undocumented) - static getStandardViewMatrix(id: StandardViewId): Matrix3d; - getSubCategoryAppearance(id: Id64String): SubCategoryAppearance; - getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined; - getTargetPoint(result?: Point3d): Point3d; - getViewClip(): ClipVector | undefined; - abstract getViewedExtents(): AxisAlignedBox3d; - getXVector(result?: Vector3d): Vector3d; - getYVector(result?: Vector3d): Vector3d; - getZVector(result?: Vector3d): Vector3d; - // (undocumented) - is3d(): this is ViewState3d; - // (undocumented) - isPrivate?: boolean; - // (undocumented) - readonly isSelectionSetDirty: boolean; - // (undocumented) - isSpatialView(): this is SpatialViewState; - // (undocumented) - isSubCategoryVisible(id: Id64String): boolean; - load(): Promise; - lookAtViewAlignedVolume(volume: Range3d, aspect?: number, margin?: MarginPercent): void; - lookAtVolume(volume: LowAndHighXYZ | LowAndHighXY, aspect?: number, margin?: MarginPercent): void; - readonly name: string; - abstract onRenderFrame(_viewport: Viewport): void; - overrideSubCategory(id: Id64String, ovr: SubCategoryOverride): void; - peekDetail(name: string): any; - removeDetail(name: string): void; - // WARNING: The type "RenderScheduleState.Script" needs to be exported by the package (e.g. added to index.ts) - readonly scheduleScript: RenderScheduleState.Script | undefined; - // (undocumented) - scheduleTime: number; - setAspectRatioSkew(val: number): void; - setAuxiliaryCoordinateSystem(acs?: AuxCoordSystemState): void; - setCategorySelector(categories: CategorySelectorState): void; - setDetail(name: string, value: any): void; - // (undocumented) - setDisplayStyle(style: DisplayStyleState): void; - abstract setExtents(viewDelta: Vector3d): void; - setFeatureOverridesDirty(dirty?: boolean): void; - setGridSettings(orientation: GridOrientationType, spacing: Point2d, gridsPerRef: number): void; - abstract setOrigin(viewOrg: Point3d): void; - abstract setRotation(viewRot: Matrix3d): void; - setRotationAboutPoint(rotation: Matrix3d, point?: Point3d): void; - // (undocumented) - setSelectionSetDirty(dirty?: boolean): void; - setStandardRotation(id: StandardViewId): void; - setupFromFrustum(inFrustum: Frustum): ViewStatus; - setViewClip(clip?: ClipVector): void; - // (undocumented) - showFrustumErrorMessage(status: ViewStatus): void; - readonly subCategories: ViewSubCategories; - // (undocumented) - toJSON(): ViewDefinitionProps; - undoTime?: BeTimePoint; - // (undocumented) - validateViewDelta(delta: Vector3d, messageNeeded?: boolean): ViewStatus; - viewFlags: ViewFlags; - viewsCategory(id: Id64String): boolean; - abstract viewsModel(modelId: Id64String): boolean; -} - -// @public -class ViewState2d extends ViewState { - constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState); - // (undocumented) - allow3dManipulations(): boolean; - // (undocumented) - readonly angle: Angle; - // (undocumented) - readonly baseModelId: Id64String; - // (undocumented) - static readonly className: string; - // (undocumented) - computeFitRange(): Range3d; - // (undocumented) - createAuxCoordSystem(acsName: string): AuxCoordSystemState; - // (undocumented) - readonly delta: Point2d; - // (undocumented) - equalState(other: ViewState2d): boolean; - // (undocumented) - forEachModel(func: (model: GeometricModelState) => void): void; - // (undocumented) - getExtents(): Vector3d; - // (undocumented) - getOrigin(): Point3d; - // (undocumented) - getRotation(): Matrix3d; - // (undocumented) - getViewedExtents(): AxisAlignedBox3d; - getViewedModel(): GeometricModel2dState | undefined; - // (undocumented) - load(): Promise; - // (undocumented) - onRenderFrame(_viewport: Viewport): void; - // (undocumented) - readonly origin: Point2d; - // (undocumented) - setExtents(delta: Vector3d): void; - // (undocumented) - setOrigin(origin: Point3d): void; - // (undocumented) - setRotation(rot: Matrix3d): void; - // (undocumented) - toJSON(): ViewDefinition2dProps; - // (undocumented) - viewsModel(modelId: Id64String): boolean; -} - -// @public -class ViewState3d extends ViewState { - constructor(props: ViewDefinition3dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle3dState); - protected _cameraOn: boolean; - // (undocumented) - allow3dManipulations(): boolean; - calcLensAngle(): Angle; - // (undocumented) - protected static calculateMaxDepth(delta: Vector3d, zVec: Vector3d): number; - readonly camera: Camera; - centerEyePoint(backDistance?: number): void; - centerFocusDistance(): void; - // (undocumented) - static readonly className: string; - // (undocumented) - createAuxCoordSystem(acsName: string): AuxCoordSystemState; - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - protected drawGroundPlane(context: DecorateContext): void; - // (undocumented) - protected drawSkyBox(context: DecorateContext): void; - // (undocumented) - protected enableCamera(): void; - // (undocumented) - equalState(other: ViewState3d): boolean; - readonly extents: Vector3d; - forceMinFrontDist: number; - getBackDistance(): number; - // (undocumented) - getDisplayStyle3d(): DisplayStyle3dState; - // (undocumented) - getExtents(): Vector3d; - getEyePoint(): Point3d; - getFocusDistance(): number; - getFrontDistance(): number; - getGroundElevation(): number; - getGroundExtents(vp?: Viewport): AxisAlignedBox3d; - getLensAngle(): Angle; - // (undocumented) - getOrigin(): Point3d; - // (undocumented) - getRotation(): Matrix3d; - getTargetPoint(result?: Point3d): Point3d; - // (undocumented) - readonly isCameraOn: boolean; - readonly isCameraValid: boolean; - // (undocumented) - isEyePointAbove(elevation: number): boolean; - lookAt(eyePoint: XYAndZ, targetPoint: XYAndZ, upVector: Vector3d, newExtents?: XAndY, frontDistance?: number, backDistance?: number): ViewStatus; - lookAtUsingLensAngle(eyePoint: Point3d, targetPoint: Point3d, upVector: Vector3d, fov: Angle, frontDistance?: number, backDistance?: number): ViewStatus; - // (undocumented) - minimumFrontDistance(): number; - moveCameraLocal(distance: Vector3d): ViewStatus; - moveCameraWorld(distance: Vector3d): ViewStatus; - // (undocumented) - onRenderFrame(_viewport: Viewport): void; - readonly origin: Point3d; - rotateCameraLocal(angle: Angle, axis: Vector3d, aboutPt?: Point3d): ViewStatus; - rotateCameraWorld(angle: Angle, axis: Vector3d, aboutPt?: Point3d): ViewStatus; - readonly rotation: Matrix3d; - // (undocumented) - setExtents(extents: XYAndZ): void; - setEyePoint(pt: XYAndZ): void; - setFocusDistance(dist: number): void; - setLensAngle(angle: Angle): void; - // (undocumented) - setOrigin(origin: XYAndZ): void; - // (undocumented) - setRotation(rot: Matrix3d): void; - // (undocumented) - setupFromFrustum(frustum: Frustum): ViewStatus; - // (undocumented) - supportsCamera(): boolean; - // (undocumented) - toJSON(): ViewDefinition3dProps; - turnCameraOff(): void; - verifyFocusPlane(): void; -} - -// @public -enum ViewStatus { - // (undocumented) - AlreadyAttached = 2, - // (undocumented) - DrawFailure = 4, - // (undocumented) - InvalidLens = 14, - // (undocumented) - InvalidTargetPoint = 13, - // (undocumented) - InvalidUpVector = 12, - // (undocumented) - InvalidViewport = 15, - // (undocumented) - InvalidWindow = 7, - // (undocumented) - MaxDisplayDepth = 11, - // (undocumented) - MaxWindow = 9, - // (undocumented) - MaxZoom = 10, - // (undocumented) - MinWindow = 8, - // (undocumented) - ModelNotFound = 6, - // (undocumented) - NotAttached = 3, - // (undocumented) - NotResized = 5, - // (undocumented) - Success = 0, - // (undocumented) - ViewNotInitialized = 1 -} - -// @public -class ViewSubCategories { - getSubCategories(categoryId: string): Id64Set | undefined; - getSubCategoryAppearance(subCategoryId: Id64String): SubCategoryAppearance | undefined; - load(categoryIds: Set, iModel: IModelConnection): Promise; - // (undocumented) - loadFromRows(rows: any[]): void; - update(addedCategoryIds: Set, iModel: IModelConnection): Promise; -} - -// @public -class ViewToggleCameraTool extends ViewTool { - // (undocumented) - onInstall(): boolean; - // (undocumented) - onPostInstall(): void; - // (undocumented) - static toolId: string; -} - -// @public -class ViewTool extends InteractiveTool { - constructor(viewport?: ScreenViewport | undefined); - // (undocumented) - beginDynamicUpdate(): void; - // (undocumented) - endDynamicUpdate(): void; - exitTool(): void; - // (undocumented) - inDynamicUpdate: boolean; - // (undocumented) - onResetButtonUp(_ev: BeButtonEvent): Promise; - // (undocumented) - run(): boolean; - // (undocumented) - static showPrompt(prompt: string): void; - // (undocumented) - viewport?: ScreenViewport | undefined; -} - -// @public -class ViewUndoTool extends ViewTool { - // (undocumented) - onPostInstall(): void; - // (undocumented) - static toolId: string; -} - -// @public -class WalkViewTool extends ViewManip { - constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// @public -class WheelEventProcessor { - // (undocumented) - static process(ev: BeWheelEvent, doUpdate: boolean): Promise; -} - -// @public -class WindowAreaTool extends ViewTool { - // (undocumented) - decorate(context: DecorateContext): void; - // (undocumented) - onDataButtonDown(ev: BeButtonEvent): Promise; - // (undocumented) - onMouseMotion(ev: BeButtonEvent): Promise; - // (undocumented) - onPostInstall(): void; - // (undocumented) - onReinitialize(): void; - // (undocumented) - onResetButtonUp(ev: BeButtonEvent): Promise; - // (undocumented) - onTouchCancel(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchComplete(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMove(ev: BeTouchEvent): Promise; - // (undocumented) - onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; - // (undocumented) - onTouchTap(ev: BeTouchEvent): Promise; - // (undocumented) - static toolId: string; -} - -// @public -interface ZoomToOptions { - placementRelativeId?: StandardViewId; - standardViewId?: StandardViewId; - viewRotation?: Matrix3d; -} - -// @public -class ZoomViewTool extends ViewManip { - constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); - // (undocumented) - onReinitialize(): void; - // (undocumented) - static toolId: string; -} - -// WARNING: Unsupported export: ToolType -// WARNING: Unsupported export: ToolList -// WARNING: Unsupported export: MarkerImage -// WARNING: Unsupported export: MarkerFillStyle -// WARNING: Unsupported export: MarkerTextAlign -// WARNING: Unsupported export: MarkerTextBaseline -// WARNING: Unsupported export: GraphicList -// WARNING: Unsupported export: CanvasDecorationList -// WARNING: Unsupported export: AnimationBranchStates -// WARNING: Unsupported export: PropertyEditorParams -// WARNING: Unsupported export: PropertyValue -// (No @packagedocumentation comment for this package) +// @public +class AccuDraw { + // (undocumented) + protected _acsPickId?: string; + // (undocumented) + protected _animationFrames: number; + // (undocumented) + protected _compassSizeInches: number; + // (undocumented) + protected readonly _fillColor: ColorDef; + // (undocumented) + protected readonly _fillColorNoFocus: ColorDef; + // (undocumented) + protected readonly _frameColor: ColorDef; + // (undocumented) + protected readonly _frameColorNoFocus: ColorDef; + // (undocumented) + protected readonly _indexColor: ColorDef; + // (undocumented) + protected _indexToleranceInches: number; + // (undocumented) + protected readonly _xColor: ColorDef; + // (undocumented) + protected readonly _yColor: ColorDef; + // (undocumented) + accountForAuxRotationPlane(rot: ThreeAxes, plane: RotationMode): void; + // (undocumented) + activate(): void; + // (undocumented) + adjustPoint(pointActive: Point3d, vp: ScreenViewport, fromSnap: boolean): boolean; + // (undocumented) + alwaysShowCompass: boolean; + // (undocumented) + angleLock(): void; + // (undocumented) + autoFocusFields: boolean; + // (undocumented) + autoPointPlacement: boolean; + // (undocumented) + readonly axes: ThreeAxes; + // (undocumented) + axisIndexing: boolean; + // (undocumented) + readonly baseAxes: ThreeAxes; + // (undocumented) + changeBaseRotationMode(mode: RotationMode): void; + // (undocumented) + changeCompassMode(animate?: boolean): void; + // (undocumented) + clearTentative(): boolean; + // (undocumented) + compassMode: CompassMode; + // (undocumented) + contextSensitive: boolean; + // (undocumented) + currentState: CurrentState; + // (undocumented) + currentView?: ScreenViewport; + // (undocumented) + deactivate(): void; + // (undocumented) + decorate(context: DecorateContext): void; + // (undocumented) + readonly delta: Vector3d; + // (undocumented) + disableForSession(): void; + // (undocumented) + distanceIndexing: boolean; + // (undocumented) + distanceLock(synchText: boolean, saveInHistory: boolean): void; + // (undocumented) + doAutoPoint(index: ItemField, mode: CompassMode): void; + // (undocumented) + doLockAngle(isSnapped: boolean): void; + // (undocumented) + dontMoveFocus: boolean; + // (undocumented) + downgradeInactiveState(): boolean; + // (undocumented) + enableForSession(): void; + // (undocumented) + fixPointPolar(vp: Viewport): void; + // (undocumented) + fixPointRectangular(vp: Viewport): void; + // (undocumented) + readonly flags: Flags; + // (undocumented) + floatingOrigin: boolean; + // (undocumented) + static getCurrentOrientation(vp: Viewport, checkAccuDraw: boolean, checkACS: boolean, rMatrix?: Matrix3d): Matrix3d | undefined; + // (undocumented) + getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined; + // (undocumented) + getFieldLock(index: ItemField): boolean; + // (undocumented) + getKeyinStatus(index: ItemField): KeyinStatus; + // (undocumented) + getRotation(rMatrix?: Matrix3d): Matrix3d; + // (undocumented) + static getSnapRotation(snap: SnapDetail, currentVp: Viewport | undefined, out?: Matrix3d): Matrix3d | undefined; + // (undocumented) + static getStandardRotation(nStandard: StandardViewId, vp: Viewport | undefined, useACS: boolean, out?: Matrix3d): Matrix3d; + // (undocumented) + getValueByIndex(index: ItemField): number; + grabInputFocus(): void; + hardConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean; + // (undocumented) + readonly hasInputFocus: boolean; + // (undocumented) + indexed: LockedStates; + // (undocumented) + readonly isActive: boolean; + // (undocumented) + readonly isDeactivated: boolean; + // (undocumented) + readonly isEnabled: boolean; + // (undocumented) + readonly isInactive: boolean; + // (undocumented) + isZLocked(vp: Viewport): boolean; + // (undocumented) + readonly lastAxes: ThreeAxes; + // (undocumented) + locked: LockedStates; + // (undocumented) + newFocus: ItemField; + // (undocumented) + onBeginDynamics(): boolean; + // (undocumented) + onCompassModeChange(): void; + // (undocumented) + onEndDynamics(): boolean; + // (undocumented) + onFieldLockChange(_index: ItemField): void; + // (undocumented) + onFieldValueChange(_index: ItemField): void; + // (undocumented) + onInitialized(): void; + // (undocumented) + onInputCollectorExit(): boolean; + // (undocumented) + onInputCollectorInstall(): boolean; + onMotion(_ev: BeButtonEvent): void; + // (undocumented) + onPostButtonEvent(ev: BeButtonEvent): boolean; + // (undocumented) + onPreButtonEvent(ev: BeButtonEvent): boolean; + // (undocumented) + onPrimitiveToolInstall(): boolean; + // (undocumented) + onRotationModeChange(): void; + // (undocumented) + onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void; + // (undocumented) + onSnap(snap: SnapDetail): boolean; + // (undocumented) + onTentative(): boolean; + // (undocumented) + onViewToolExit(): boolean; + // (undocumented) + onViewToolInstall(): boolean; + // (undocumented) + readonly origin: Point3d; + // (undocumented) + readonly planePt: Point3d; + // (undocumented) + readonly point: Point3d; + // (undocumented) + processFieldInput(index: ItemField, input: string, synchText: boolean): void; + // (undocumented) + processHints(): void; + // (undocumented) + readonly published: AccudrawData; + // (undocumented) + refreshDecorationsAndDynamics(): void; + // (undocumented) + restoreState(stateBuffer: SavedState): void; + // (undocumented) + rotationMode: RotationMode; + // (undocumented) + saveCoordinate(index: ItemField, value: number): void; + // (undocumented) + readonly savedStateInputCollector: SavedState; + // (undocumented) + readonly savedStateViewTool: SavedState; + // (undocumented) + saveState(stateBuffer: SavedState): void; + // (undocumented) + sendDataPoint(pt: Point3d, vp: ScreenViewport): void; + // (undocumented) + setCompassMode(mode: CompassMode): void; + // (undocumented) + setContext(flags: AccuDrawFlags, originP?: Point3d, orientationP?: Matrix3d | Vector3d, deltaP?: Vector3d, distanceP?: number, angleP?: number, transP?: Transform): BentleyStatus; + // (undocumented) + setContextRotation(rMatrix: Matrix3d, locked: boolean, animate: boolean): void; + // (undocumented) + setFieldLock(index: ItemField, locked: boolean): void; + // (undocumented) + setFocusItem(_index: ItemField): void; + // (undocumented) + setKeyinStatus(index: ItemField, status: KeyinStatus): void; + // (undocumented) + setLastPoint(pt: Point3d): void; + // (undocumented) + protected setNewFocus(index: ItemField): void; + // (undocumented) + setRotationMode(mode: RotationMode): void; + // (undocumented) + setValueByIndex(index: ItemField, value: number): void; + // (undocumented) + smartKeyin: boolean; + // (undocumented) + softConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean; + // (undocumented) + stickyZLock: boolean; + // (undocumented) + testDecorationHit(id: string): boolean; + // (undocumented) + unlockAllFields(): void; + // (undocumented) + static updateAuxCoordinateSystem(acs: AuxCoordSystemState, vp: Viewport, allViews?: boolean): void; + // (undocumented) + updateFieldLock(index: ItemField, locked: boolean): void; + // (undocumented) + updateRotation(animate?: boolean, newRotationIn?: Matrix3d): void; + // (undocumented) + upgradeToActiveState(): boolean; + // (undocumented) + readonly vector: Vector3d; +} + +// @public (undocumented) +class AccudrawData { + // (undocumented) + angle: number; + // (undocumented) + readonly delta: Point3d; + // (undocumented) + distance: number; + // (undocumented) + flags: number; + // (undocumented) + readonly origin: Point3d; + // (undocumented) + readonly rMatrix: Matrix3d; + // (undocumented) + readonly vector: Vector3d; + // (undocumented) + zero(): void; +} + +// @public (undocumented) +enum AccuDrawFlags { + // (undocumented) + AlwaysSetOrigin = 2097156, + // (undocumented) + Disable = 4096, + // (undocumented) + FixedOrigin = 8, + // (undocumented) + Lock_X = 512, + // (undocumented) + Lock_Y = 1024, + // (undocumented) + Lock_Z = 2048, + // (undocumented) + LockAngle = 524288, + // (undocumented) + LockDistance = 256, + // (undocumented) + OrientACS = 131072, + // (undocumented) + OrientDefault = 16384, + // (undocumented) + RedrawCompass = 4194304, + // (undocumented) + SetDistance = 128, + // (undocumented) + SetFocus = 32768, + // (undocumented) + SetModePolar = 1, + // (undocumented) + SetModeRect = 2, + // (undocumented) + SetNormal = 64, + // (undocumented) + SetOrigin = 4, + // (undocumented) + SetRMatrix = 16, + // (undocumented) + SetXAxis = 32, + // (undocumented) + SetXAxis2 = 262144, + // (undocumented) + SmartRotation = 16777216, + // (undocumented) + UpdateRotation = 8388608 +} + +// @public +class AccuDrawHintBuilder { + // (undocumented) + enableSmartRotation: boolean; + sendHints(activate?: boolean): boolean; + // (undocumented) + setAngle(angle: number): void; + // (undocumented) + setDistance(distance: number): void; + // (undocumented) + setLockAngle: boolean; + // (undocumented) + setLockDistance: boolean; + // (undocumented) + setLockX: boolean; + // (undocumented) + setLockY: boolean; + // (undocumented) + setLockZ: boolean; + // (undocumented) + setModePolar(): void; + // (undocumented) + setModeRectangular(): void; + // (undocumented) + setNormal(normal: Vector3d): void; + // (undocumented) + setOrigin(origin: Point3d): void; + // (undocumented) + setOriginAlways: boolean; + // (undocumented) + setOriginFixed: boolean; + // (undocumented) + setRotation(rMatrix: Matrix3d): void; + // (undocumented) + setXAxis(xAxis: Vector3d): void; + // (undocumented) + setXAxis2(xAxis: Vector3d): void; +} + +// @public +class AccuDrawShortcuts { + // (undocumented) + static alignView(): void; + // (undocumented) + static changeCompassMode(): void; + // (undocumented) + static defineACSByElement(): void; + // (undocumented) + static defineACSByPoints(): void; + // (undocumented) + static getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): BentleyStatus; + // (undocumented) + static itemFieldAcceptInput(index: ItemField, str: string): void; + // (undocumented) + static itemFieldLockToggle(index: ItemField): void; + // (undocumented) + static itemFieldNavigate(index: ItemField, str: string, forward: boolean): void; + // (undocumented) + static itemFieldNewInput(index: ItemField): void; + // (undocumented) + static itemFieldUnlockAll(): void; + // (undocumented) + static itemRotationModeChange(rotation: RotationMode): void; + // (undocumented) + static lockAngle(): void; + // (undocumented) + static lockDistance(): void; + // (undocumented) + lockIndex(): void; + // (undocumented) + static lockSmart(): void; + // (undocumented) + static lockX(): void; + // (undocumented) + static lockY(): void; + // (undocumented) + static lockZ(): void; + // (undocumented) + static processPendingHints(): void; + // (undocumented) + static requestInputFocus(): void; + // (undocumented) + static rotate90(axis: number): void; + // (undocumented) + static rotateAxes(aboutCurrentZ: boolean): void; + // (undocumented) + static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean; + // (undocumented) + static rotateCycle(updateCurrentACS: boolean): void; + // (undocumented) + static rotateToACS(): void; + // (undocumented) + static rotateToBase(): void; + // (undocumented) + static rotateToElement(updateCurrentACS: boolean): void; + // (undocumented) + static setOrigin(explicitOrigin?: Point3d): void; + // (undocumented) + static setStandardRotation(rotation: RotationMode): void; + // (undocumented) + static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean; + // (undocumented) + static writeACS(_acsName: string): BentleyStatus; +} + +// @public (undocumented) +class AccuDrawTool { + // (undocumented) + activateAccuDrawOnStart(): boolean; + // (undocumented) + abstract doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): Promise; + // (undocumented) + doManipulationStart(): void; + // (undocumented) + doManipulationStop(cancel: boolean): void; + // (undocumented) + static installTool(shortcut: AccuDrawTool): boolean; + // (undocumented) + onDecorate(_context: DecorateContext): void; + // (undocumented) + onManipulationComplete(): AccuDrawFlags; + // (undocumented) + static outputPrompt(messageKey: string): void; +} + +// @public (undocumented) +class AccuSnap { +} + +// @public (undocumented) +enum ACSDisplayOptions { + // (undocumented) + Active = 1, + // (undocumented) + CheckVisible = 8, + // (undocumented) + Deemphasized = 2, + // (undocumented) + Dynamics = 16, + // (undocumented) + Hilite = 4, + // (undocumented) + None = 0 +} + +// @public (undocumented) +enum ACSType { + // (undocumented) + Cylindrical = 2, + // (undocumented) + None = 0, + // (undocumented) + Rectangular = 1, + // (undocumented) + Spherical = 3 +} + +// @public +class ActivityMessageDetails { + constructor(showProgressBar: boolean, showPercentInMessage: boolean, supportsCancellation: boolean, showDialogInitially?: boolean); + onActivityCancelled(): void; + onActivityCompleted(): void; + // (undocumented) + showDialogInitially: boolean; + // (undocumented) + showPercentInMessage: boolean; + // (undocumented) + showProgressBar: boolean; + // (undocumented) + supportsCancellation: boolean; + // (undocumented) + wasCancelled: boolean; +} + +// @public +enum ActivityMessageEndReason { + // (undocumented) + Cancelled = 1, + // (undocumented) + Completed = 0 +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class AnimationBranchState { + // WARNING: The type "ClipPlanesVolume" needs to be exported by the package (e.g. added to index.ts) + constructor(transform?: Transform, clip?: ClipPlanesVolume, omit?: boolean); + // WARNING: The type "ClipPlanesVolume" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly clip?: ClipPlanesVolume; + // (undocumented) + readonly omit?: boolean; + // (undocumented) + readonly transform?: Transform; +} + +// @public (undocumented) +interface AppearanceOverrideProps { + // (undocumented) + color?: ColorDefProps; + // (undocumented) + ids?: Id64Set; + // (undocumented) + overrideType?: FeatureOverrideType; +} + +// @public +interface ArrayValue extends BasePropertyValue { + // (undocumented) + items: PropertyRecord[]; + // (undocumented) + itemsTypeName: string; + // (undocumented) + valueFormat: PropertyValueFormat.Array; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +module Attachments { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Attachment { + protected constructor(props: ViewAttachmentProps, view: ViewState); + // WARNING: The type "Tree" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected _tree?: Tree; + clearClipping(): void; + // (undocumented) + clip: ClipVector; + static readonly DEBUG_BOUNDING_BOX_COLOR: ColorDef; + debugDrawBorder(context: SceneContext): void; + // (undocumented) + displayPriority: number; + getOrCreateClip(transform?: Transform): ClipVector; + // (undocumented) + id: Id64String; + readonly is2d: boolean; + readonly isReady: boolean; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + abstract load(sheetView: SheetViewState, sceneContext: SceneContext): State; + // (undocumented) + placement: Placement2d; + // (undocumented) + scale: number; + // WARNING: The type "Tree" needs to be exported by the package (e.g. added to index.ts) + tree: Tree | undefined; + // (undocumented) + readonly view: ViewState; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Attachment2d extends Attachment { + constructor(props: ViewAttachmentProps, view: ViewState2d); + // (undocumented) + readonly is2d: boolean; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + load(_sheetView: SheetViewState, _sceneContext: SceneContext): State; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Attachment3d extends Attachment { + constructor(props: ViewAttachmentProps, view: ViewState3d); + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + getState(depth: number): State; + // (undocumented) + readonly is2d: boolean; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + load(sheetView: SheetViewState, sceneContext: SceneContext): State; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + setState(depth: number, state: State): void; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class AttachmentList { + constructor(); + // WARNING: The type "Attachment" needs to be exported by the package (e.g. added to index.ts) + add(attachment: Attachment): void; + readonly allReady: boolean; + clear(): void; + // WARNING: The type "Attachment" needs to be exported by the package (e.g. added to index.ts) + drop(attachment: Attachment): void; + readonly length: number; + // WARNING: The type "Attachment" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly list: Attachment[]; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + load(idx: number, sheetView: SheetViewState, sceneContext: SceneContext): State; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class AttachmentTileLoader extends TileLoader { + // (undocumented) + getChildrenProps(_parent: Tile): Promise; + // (undocumented) + readonly is3dAttachment: boolean; + // WARNING: The type "Tile.LoadPriority" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly priority: Tile.LoadPriority; + // WARNING: The type "TileRequest.Response" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + requestTileContent(_tile: Tile): Promise; + // WARNING: The type "Tile.Params" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + tileRequiresLoading(_params: Tile.Params): boolean; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class AttachmentViewport extends OffScreenViewport { + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createScene(currentState: State): State; + // (undocumented) + readonly isAspectRatioLocked: boolean; + // (undocumented) + renderImage(): ImageBuffer | undefined; + // (undocumented) + rendering: boolean; + // (undocumented) + renderTexture(): void; + // WARNING: The type "Tree3d" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + setSceneDepth(depth: number, tree: Tree3d): void; + // (undocumented) + readonly texture: RenderTexture | undefined; + // (undocumented) + toParent: Transform; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + enum State { + // (undocumented) + Empty = 1, + // (undocumented) + Loading = 2, + // (undocumented) + NotLoaded = 0, + // (undocumented) + Ready = 3 + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Tile2d extends Tile { + // WARNING: The type "Tree2d" needs to be exported by the package (e.g. added to index.ts) + constructor(root: Tree2d, range: ElementAlignedBox2d); + // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + drawGraphics(args: Tile.DrawArgs): void; + // (undocumented) + readonly hasChildren: boolean; + // (undocumented) + readonly hasGraphics: boolean; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Tile3d extends Tile { + // WARNING: The type "Tree3d" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tile3d" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tile3dPlacement" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tile3d" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static create(root: Tree3d, parent: Tile3d | undefined, placement: Tile3dPlacement): Tile3d; + // (undocumented) + createGraphics(context: SceneContext): void; + // (undocumented) + createPolyfaces(context: SceneContext): void; + // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + drawGraphics(args: Tile.DrawArgs): void; + // (undocumented) + readonly hasChildren: boolean; + // (undocumented) + readonly hasGraphics: boolean; + // (undocumented) + prepareChildren(): Tile[] | undefined; + // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tile.SelectParent" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + selectTiles(selected: Tile[], args: Tile.DrawArgs, _numSkipped?: number): Tile.SelectParent; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + enum Tile3dPlacement { + // (undocumented) + LowerLeft = 2, + // (undocumented) + LowerRight = 3, + // (undocumented) + Root = 4, + // (undocumented) + UpperLeft = 0, + // (undocumented) + UpperRight = 1 + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Tree extends TileTree { + // WARNING: The type "AttachmentTileLoader" needs to be exported by the package (e.g. added to index.ts) + constructor(loader: AttachmentTileLoader, iModel: IModelConnection, modelId: Id64String); + // (undocumented) + graphicsClip?: ClipVector; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Tree2d extends Tree { + // WARNING: The type "Attachment2d" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + static create(attachment: Attachment2d): State; + // (undocumented) + readonly drawingToAttachment: Transform; + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly symbologyOverrides: FeatureSymbology.Overrides; + // (undocumented) + readonly view: ViewState2d; + // (undocumented) + readonly viewRoot: TileTree; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Tree3d extends Tree { + // WARNING: The type "Attachment3d" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly attachment: Attachment3d; + // (undocumented) + readonly biasDistance: number; + // WARNING: The type "Attachment3d" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tree3d" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static create(sheetView: SheetViewState, attachment: Attachment3d, sceneContext: SceneContext): Tree3d; + // (undocumented) + readonly featureTable: PackedFeatureTable; + getRootRange(result?: Range3d): Range3d; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + getState(depth: number): State; + // WARNING: The type "State" needs to be exported by the package (e.g. added to index.ts) + setState(depth: number, state: State): void; + // (undocumented) + readonly sheetView: SheetViewState; + // (undocumented) + readonly tileColor: ColorDef; + // WARNING: The type "AttachmentViewport" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly viewport: AttachmentViewport; + } + +} + +// @public +class AuxCoordSystem2dState extends AuxCoordSystemState, implements AuxCoordSystem2dProps { + constructor(props: AuxCoordSystem2dProps, iModel: IModelConnection); + // (undocumented) + angle: number; + // (undocumented) + getOrigin(result?: Point3d): Point3d; + // (undocumented) + getRotation(result?: Matrix3d): Matrix3d; + // (undocumented) + readonly origin: Point2d; + // (undocumented) + setOrigin(val: XYAndZ | XAndY): void; + // (undocumented) + setRotation(val: Matrix3d): void; + // (undocumented) + toJSON(): AuxCoordSystem2dProps; +} + +// @public +class AuxCoordSystem3dState extends AuxCoordSystemState, implements AuxCoordSystem3dProps { + constructor(props: AuxCoordSystem3dProps, iModel: IModelConnection); + // (undocumented) + getOrigin(result?: Point3d): Point3d; + // (undocumented) + getRotation(result?: Matrix3d): Matrix3d; + // (undocumented) + readonly origin: Point3d; + // (undocumented) + pitch: number; + // (undocumented) + roll: number; + // (undocumented) + setOrigin(val: XYAndZ | XAndY): void; + // (undocumented) + setRotation(rMatrix: Matrix3d): void; + // (undocumented) + toJSON(): AuxCoordSystem3dProps; + // (undocumented) + yaw: number; +} + +// @public +class AuxCoordSystemSpatialState extends AuxCoordSystem3dState { +} + +// @public +class AuxCoordSystemState extends ElementState, implements AuxCoordSystemProps { + constructor(props: AuxCoordSystemProps, iModel: IModelConnection); + static createNew(acsName: string, iModel: IModelConnection): AuxCoordSystemState; + // (undocumented) + description?: string; + // (undocumented) + display(context: DecorateContext, options: ACSDisplayOptions): void; + // (undocumented) + drawGrid(context: DecorateContext): void; + // (undocumented) + static fromProps(props: AuxCoordSystemProps, iModel: IModelConnection): AuxCoordSystemState; + // (undocumented) + abstract getOrigin(result?: Point3d): Point3d; + abstract getRotation(result?: Matrix3d): Matrix3d; + // (undocumented) + readonly is3d: boolean; + static isOriginInView(drawOrigin: Point3d, viewport: Viewport, adjustOrigin: boolean): boolean; + // (undocumented) + isValidForView(view: ViewState): boolean; + // (undocumented) + abstract setOrigin(val: XYAndZ | XAndY): void; + // (undocumented) + abstract setRotation(val: Matrix3d): void; + // (undocumented) + toJSON(): AuxCoordSystemProps; + // (undocumented) + type: number; +} + +// @public +interface BasePropertyEditorParams { + // (undocumented) + type: PropertyEditorParamTypes; +} + +// @public +interface BasePropertyValue { + // (undocumented) + valueFormat: PropertyValueFormat; +} + +// @public (undocumented) +enum BeButton { + // (undocumented) + Data = 0, + // (undocumented) + Middle = 2, + // (undocumented) + Reset = 1 +} + +// @public (undocumented) +class BeButtonEvent { + // (undocumented) + button: BeButton; + // (undocumented) + clone(result?: BeButtonEvent): BeButtonEvent; + // (undocumented) + coordsFrom: CoordSource; + // (undocumented) + getDisplayPoint(): Point2d; + // (undocumented) + initEvent(point: Point3d, rawPoint: Point3d, viewPt: Point3d, vp: ScreenViewport, from: CoordSource, keyModifiers?: BeModifierKeys, button?: BeButton, isDown?: boolean, doubleClick?: boolean, isDragging?: boolean, source?: InputSource): void; + // (undocumented) + inputSource: InputSource; + // (undocumented) + invalidate(): void; + // (undocumented) + readonly isAltKey: boolean; + // (undocumented) + readonly isControlKey: boolean; + // (undocumented) + isDoubleClick: boolean; + // (undocumented) + isDown: boolean; + // (undocumented) + isDragging: boolean; + // (undocumented) + readonly isShiftKey: boolean; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + keyModifiers: BeModifierKeys; + // (undocumented) + point: Point3d; + // (undocumented) + rawPoint: Point3d; + // (undocumented) + setFrom(src: BeButtonEvent): void; + // (undocumented) + viewPoint: Point3d; + // (undocumented) + viewport?: ScreenViewport; +} + +// @public (undocumented) +class BeButtonState { + // (undocumented) + downRawPt: Point3d; + // (undocumented) + downTime: number; + // (undocumented) + downUorPt: Point3d; + // (undocumented) + init(downUorPt: Point3d, downRawPt: Point3d, downTime: number, isDown: boolean, isDoubleClick: boolean, isDragging: boolean, source: InputSource): void; + // (undocumented) + inputSource: InputSource; + // (undocumented) + isDoubleClick: boolean; + // (undocumented) + isDown: boolean; + // (undocumented) + isDragging: boolean; +} + +// @public +enum BeModifierKeys { + // (undocumented) + Alt = 4, + // (undocumented) + Control = 1, + // (undocumented) + None = 0, + // (undocumented) + Shift = 2 +} + +// @public +class BeTouchEvent extends BeButtonEvent { + constructor(touchInfo: TouchEvent); + // (undocumented) + clone(result?: BeTouchEvent): BeTouchEvent; + // (undocumented) + static findTouchById(list: TouchList, id: number): Touch | undefined; + // (undocumented) + static getTouchListCentroid(list: TouchList, vp: ScreenViewport): Point2d | undefined; + // (undocumented) + static getTouchPosition(touch: Touch, vp: ScreenViewport): Point2d; + // (undocumented) + readonly isDoubleTap: boolean; + // (undocumented) + readonly isSingleTap: boolean; + // (undocumented) + readonly isSingleTouch: boolean; + // (undocumented) + readonly isTwoFingerTap: boolean; + // (undocumented) + readonly isTwoFingerTouch: boolean; + // (undocumented) + setFrom(src: BeTouchEvent): void; + // (undocumented) + tapCount: number; + // (undocumented) + readonly touchCount: number; + // (undocumented) + touchInfo: TouchEvent; +} + +// @public +class BeWheelEvent extends BeButtonEvent { + constructor(wheelDelta?: number); + // (undocumented) + clone(result?: BeWheelEvent): BeWheelEvent; + // (undocumented) + setFrom(src: BeWheelEvent): void; + // (undocumented) + wheelDelta: number; +} + +// @public +interface ButtonGroupEditorParams extends BasePropertyEditorParams { + // (undocumented) + buttons: IconDefinition[]; + // (undocumented) + type: PropertyEditorParamTypes.ButtonGroupData; +} + +// @public +interface CanvasDecoration { + decorationCursor?: string; + drawDecoration(ctx: CanvasRenderingContext2D): void; + onMouseButton?(ev: BeButtonEvent): boolean; + onMouseEnter?(ev: BeButtonEvent): void; + onMouseLeave?(): void; + onMouseMove?(ev: BeButtonEvent): void; + onWheel?(ev: BeWheelEvent): boolean; + pick?(pt: XAndY): boolean; + position?: XAndY; +} + +// @public +class CategorySelectorState extends ElementState { + constructor(props: CategorySelectorProps, iModel: IModelConnection); + addCategories(arg: Id64Arg): void; + // (undocumented) + categories: Set; + changeCategoryDisplay(arg: Id64Arg, add: boolean): void; + dropCategories(arg: Id64Arg): void; + equalState(other: CategorySelectorState): boolean; + has(id: Id64String): boolean; + isCategoryViewed(categoryId: Id64String): boolean; + readonly name: string; + // (undocumented) + toJSON(): CategorySelectorProps; +} + +// @public +interface CheckBoxIconsEditorParams extends BasePropertyEditorParams { + // (undocumented) + offIconDefinition?: IconDefinition; + // (undocumented) + onIconDefinition?: IconDefinition; + // (undocumented) + type: PropertyEditorParamTypes.CheckBoxIcons; +} + +// @public +enum ClippingType { + Mask = 1, + None = 0, + Planes = 2 +} + +// @public +enum ClipResult { + NewElements = 1, + NotSupported = 0, + OriginalElements = 2 +} + +// @public +class Clips { + // (undocumented) + clear(): void; + // (undocumented) + readonly count: number; + // (undocumented) + readonly isValid: boolean; + // WARNING: The type "TextureHandle" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + set(numPlanes: number, texture: TextureHandle): void; + // WARNING: The type "TextureHandle" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly texture: TextureHandle | undefined; +} + +// @public +class Cluster { + constructor(markers: T[]); + // (undocumented) + clusterMarker?: Marker; + // (undocumented) + readonly markers: T[]; + // (undocumented) + readonly rect: ViewRect; +} + +// @public +interface ColorEditorParams extends BasePropertyEditorParams { + colorValues: number[]; + numColumns?: number; + // (undocumented) + type: PropertyEditorParamTypes.ColorData; +} + +// @public (undocumented) +enum CompassMode { + // (undocumented) + Polar = 0, + // (undocumented) + Rectangular = 1 +} + +// @public (undocumented) +enum ContextMode { + // (undocumented) + Locked = 0, + // (undocumented) + None = 15, + // (undocumented) + XAxis = 1, + // (undocumented) + XAxis2 = 4, + // (undocumented) + YAxis = 2, + // (undocumented) + ZAxis = 3 +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +class ContextRealityModelState implements TileTreeModelState { + constructor(props: ContextRealityModelProps, iModel: IModelConnection); + // (undocumented) + protected _iModel: IModelConnection; + // (undocumented) + protected _modelId: Id64String; + // (undocumented) + protected _name: string; + // (undocumented) + protected _tilesetUrl: string; + // (undocumented) + protected _tileTreeState: TileTreeState; + static findAvailableRealityModels(projectid: string, modelCartographicRange?: CartographicRange | undefined): Promise; + intersectsProjectExtents(): Promise; + // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly loadStatus: TileTree.LoadStatus; + // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + loadTileTree(_edgesRequired: boolean, _animationId?: Id64String, _asClassifier?: boolean, _classifierExpansion?: number): TileTree.LoadStatus; + matches(other: ContextRealityModelState): boolean; + // (undocumented) + readonly name: string; + // (undocumented) + readonly tileTree: TileTree | undefined; + // (undocumented) + readonly treeModelId: Id64String; + // (undocumented) + readonly url: string; +} + +// @public +class ConversionData implements UnitConversion { + // (undocumented) + factor: number; + // (undocumented) + offset: number; +} + +// @public (undocumented) +enum CoordinateLockOverrides { + // (undocumented) + ACS = 2, + // (undocumented) + All = 65535, + // (undocumented) + Grid = 4, + // (undocumented) + None = 0 +} + +// @public +enum CoordSource { + ElemSnap = 3, + Precision = 1, + TentativePoint = 2, + User = 0 +} + +// @public +enum CoordSystem { + Npc = 1, + View = 0, + World = 2 +} + +// @public (undocumented) +class CurrentInputState { + // (undocumented) + adjustLastDataPoint(ev: BeButtonEvent): void; + // (undocumented) + button: BeButtonState[]; + // (undocumented) + changeButtonToDownPoint(ev: BeButtonEvent): void; + // (undocumented) + clearKeyQualifiers(): void; + // (undocumented) + clearViewport(vp: Viewport): void; + // (undocumented) + fromButton(vp: ScreenViewport, pt: XAndY, source: InputSource, applyLocks: boolean): void; + // (undocumented) + fromPoint(vp: ScreenViewport, pt: XAndY, source: InputSource): void; + // (undocumented) + readonly hasMotionStopped: boolean; + // (undocumented) + inputSource: InputSource; + // (undocumented) + readonly isAltDown: boolean; + // (undocumented) + readonly isControlDown: boolean; + // (undocumented) + isDragging(button: BeButton): boolean; + // (undocumented) + readonly isShiftDown: boolean; + // (undocumented) + isStartDrag(button: BeButton): boolean; + // (undocumented) + lastButton: BeButton; + // (undocumented) + lastMotion: Point2d; + // (undocumented) + lastTouchStart?: BeTouchEvent; + // (undocumented) + lastWheelEvent?: BeWheelEvent; + // (undocumented) + motionTime: number; + // (undocumented) + onButtonDown(button: BeButton): void; + // (undocumented) + onButtonUp(button: BeButton): void; + // (undocumented) + onInstallTool(): void; + // (undocumented) + onMotion(pt2d: XAndY): void; + // (undocumented) + onStartDrag(button: BeButton): void; + // (undocumented) + qualifiers: BeModifierKeys; + // (undocumented) + rawPoint: Point3d; + // (undocumented) + setKeyQualifiers(ev: MouseEvent | KeyboardEvent | TouchEvent): void; + // (undocumented) + toEvent(ev: BeButtonEvent, useSnap: boolean): void; + // (undocumented) + toEventFromLastDataPoint(ev: BeButtonEvent): void; + // (undocumented) + touchTapCount?: number; + // (undocumented) + touchTapTimer?: number; + // (undocumented) + uorPoint: Point3d; + // (undocumented) + updateDownPoint(ev: BeButtonEvent): void; + // (undocumented) + viewPoint: Point3d; + // (undocumented) + viewport?: ScreenViewport; + // (undocumented) + readonly wasMotion: boolean; +} + +// @public (undocumented) +enum CurrentState { + // (undocumented) + Active = 3, + // (undocumented) + Deactivated = 1, + // (undocumented) + Inactive = 2, + // (undocumented) + NotEnabled = 0 +} + +// @public +class DecorateContext extends RenderContext { + // @internal + constructor(vp: ScreenViewport, _decorations: Decorations); + addCanvasDecoration(decoration: CanvasDecoration, atFront?: boolean): void; + addDecoration(type: GraphicType, decoration: RenderGraphic): void; + addDecorationFromBuilder(builder: GraphicBuilder): void; + addHtmlDecoration(decoration: HTMLElement): void; + createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder; + decorationDiv: HTMLDivElement; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static drawGrid(graphic: GraphicBuilder, doIsogrid: boolean, drawDots: boolean, gridOrigin: Point3d, xVec: Vector3d, yVec: Vector3d, gridsPerRef: number, repetitions: Point2d, vp: Viewport): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + drawStandardGrid(gridOrigin: Point3d, rMatrix: Matrix3d, spacing: XAndY, gridsPerRef: number, isoGrid?: boolean, fixedRepetitions?: Point2d): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static getGridDimension(props: { + nRepetitions: number; + min: number; + }, gridSize: number, org: Point3d, dir: Point3d, points: Point3d[]): boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static getGridPlaneViewIntersections(planePoint: Point3d, planeNormal: Vector3d, vp: Viewport, useProjectExtents: boolean): Point3d[]; + readonly screenViewport: ScreenViewport; + setSkyBox(graphic: RenderGraphic): void; + setViewBackground(graphic: RenderGraphic): void; +} + +// @public +class DecorationAnimator implements ViewportAnimator { + constructor(duration: BeDuration); + // (undocumented) + animate(vp: Viewport): RemoveMe; + animateDecorations(_viewport: Viewport, _durationPercent: number): RemoveMe; + // (undocumented) + onInterrupted(vp: Viewport): void; +} + +// @public +class Decorations implements IDisposable { + // (undocumented) + canvasDecorations?: CanvasDecorationList; + // (undocumented) + dispose(): void; + normal: GraphicList | undefined; + skyBox: RenderGraphic | undefined; + viewBackground: RenderGraphic | undefined; + viewOverlay: GraphicList | undefined; + world: GraphicList | undefined; + worldOverlay: GraphicList | undefined; +} + +// @public +interface Decorator { + decorate(context: DecorateContext): void; + getDecorationGeometry?(hit: HitDetail): GeometryStreamProps | undefined; + getDecorationToolTip?(hit: HitDetail): Promise; + onDecorationButtonEvent?(hit: HitDetail, ev: BeButtonEvent): Promise; + testDecorationHit?(id: string): boolean; +} + +// @public (undocumented) +class DefaultViewTouchTool extends ViewManip { + constructor(startEv: BeTouchEvent, _ev: BeTouchEvent); + // (undocumented) + onDataButtonDown(_ev: BeButtonEvent): Promise; + // (undocumented) + onDataButtonUp(_ev: BeButtonEvent): Promise; + // (undocumented) + onStart(ev: BeTouchEvent): void; + // (undocumented) + onTouchCancel(_ev: BeTouchEvent): Promise; + // (undocumented) + onTouchComplete(_ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMove(ev: BeTouchEvent): Promise; + // (undocumented) + static toolId: string; +} + +// @public +class DepthRangeNpc { + constructor(minimum?: number, maximum?: number); + // (undocumented) + maximum: number; + middle(): number; + // (undocumented) + minimum: number; +} + +// @public +class DisplayStyle2dState extends DisplayStyleState { + constructor(props: DisplayStyleProps, iModel: IModelConnection); + // (undocumented) + readonly settings: DisplayStyleSettings; +} + +// @public +class DisplayStyle3dState extends DisplayStyleState { + constructor(props: DisplayStyleProps, iModel: IModelConnection); + environment: Environment; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) + // @internal + loadSkyBoxParams(system: RenderSystem): SkyBox.CreateParams | undefined; + // (undocumented) + readonly settings: DisplayStyle3dSettings; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + skyboxMaterial: RenderMaterial | undefined; +} + +// @public +class DisplayStyleState extends ElementState, implements DisplayStyleProps { + constructor(props: DisplayStyleProps, iModel: IModelConnection); + analysisStyle: AnalysisStyle | undefined; + backgroundColor: ColorDef; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "BackgroundMapState" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + readonly backgroundMap: BackgroundMapState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly backgroundMapPlane: Plane3dByOriginAndUnitNormal | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + containsContextRealityModel(contextRealityModel: ContextRealityModelState): boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + contextRealityModels: ContextRealityModelState[]; + dropSubCategoryOverride(id: Id64String): void; + equalState(other: DisplayStyleState): boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + forEachContextRealityModel(func: (model: TileTreeModelState) => void): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getAnimationBranches(scheduleTime: number): AnimationBranchStates | undefined; + getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined; + readonly hasSubCategoryOverride: boolean; + is3d(): this is DisplayStyle3dState; + monochromeColor: ColorDef; + readonly name: string; + overrideSubCategory(id: Id64String, ovr: SubCategoryOverride): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "RenderScheduleState.Script" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + readonly scheduleScript: RenderScheduleState.Script | undefined; + setBackgroundMap(mapProps: BackgroundMapProps): void; + readonly settings: DisplayStyleSettings; + viewFlags: ViewFlags; +} + +// @public +class DrawingModelState extends GeometricModel2dState { +} + +// @public +class DrawingViewState extends ViewState2d { + // (undocumented) + static readonly className: string; + // (undocumented) + static createFromProps(props: ViewStateProps, iModel: IModelConnection): ViewState | undefined; + // (undocumented) + getExtentLimits: { + max: number; + min: number; + } +} + +// @public +class DynamicsContext extends RenderContext { + addGraphic(graphic: RenderGraphic): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + changeDynamics(): void; +} + +// @public +module EditManipulator { + // (undocumented) + enum EventType { + // (undocumented) + Accept = 2, + // (undocumented) + Cancel = 1, + // (undocumented) + Synch = 0 + } + + // (undocumented) + class HandleProvider { + constructor(iModel: IModelConnection); + // (undocumented) + protected _isActive: boolean; + // (undocumented) + protected _removeDecorationListener?: () => void; + // (undocumented) + protected _removeManipulatorToolListener?: () => void; + // (undocumented) + protected _removeSelectionListener?: () => void; + // (undocumented) + protected clearControls(): void; + protected abstract createControls(): Promise; + // (undocumented) + decorate(_context: DecorateContext): void; + // (undocumented) + iModel: IModelConnection; + protected abstract modifyControls(_hit: HitDetail, _ev: BeButtonEvent): boolean; + // (undocumented) + onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise; + // (undocumented) + protected onDoubleClick(_hit: HitDetail, _ev: BeButtonEvent): Promise; + // WARNING: The type "EventType" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + onManipulatorEvent(_eventType: EventType): void; + // (undocumented) + onManipulatorToolEvent(_tool: Tool, event: ManipulatorToolEvent): void; + // (undocumented) + protected onRightClick(_hit: HitDetail, _ev: BeButtonEvent): Promise; + // (undocumented) + onSelectionChanged(iModel: IModelConnection, _eventType: SelectEventType, _ids?: Set): void; + // (undocumented) + protected stop(): void; + // (undocumented) + protected updateControls(): Promise; + // (undocumented) + protected updateDecorationListener(add: boolean): void; + } + + // (undocumented) + class HandleTool extends InputCollector { + // WARNING: The type "HandleProvider" needs to be exported by the package (e.g. added to index.ts) + constructor(manipulator: HandleProvider); + // (undocumented) + protected abstract accept(_ev: BeButtonEvent): boolean; + // (undocumented) + protected cancel(_ev: BeButtonEvent): boolean; + // (undocumented) + static hidden: boolean; + protected init(): void; + // WARNING: The type "HandleProvider" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + manipulator: HandleProvider; + // (undocumented) + onDataButtonDown(ev: BeButtonEvent): Promise; + // (undocumented) + onPostInstall(): void; + // (undocumented) + onResetButtonUp(ev: BeButtonEvent): Promise; + // (undocumented) + onTouchCancel(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchComplete(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMove(ev: BeTouchEvent): Promise; + // (undocumented) + static toolId: string; + } + + // (undocumented) + class HandleUtils { + static getArrowShape(baseStart?: number, baseWidth?: number, tipStart?: number, tipEnd?: number, tipWidth?: number, flangeStart?: number, flangeWidth?: number): Point3d[]; + static getArrowTransform(vp: Viewport, base: Point3d, direction: Vector3d, sizeInches: number): Transform | undefined; + // (undocumented) + static getBoresite(origin: Point3d, vp: Viewport, checkAccuDraw?: boolean, checkACS?: boolean): Ray3d; + // (undocumented) + static projectPointToLineInView(spacePt: Point3d, linePt: Point3d, lineDirection: Vector3d, vp: Viewport, checkAccuDraw?: boolean, checkACS?: boolean): Point3d | undefined; + // (undocumented) + static projectPointToPlaneInView(spacePt: Point3d, planePt: Point3d, planeNormal: Vector3d, vp: Viewport, checkAccuDraw?: boolean, checkACS?: boolean): Point3d | undefined; + } + +} + +// @public +interface EditorPosition { + columnIndex: number; + columnSpan?: number; + rowPriority: number; +} + +// @public (undocumented) +class ElementAgenda { + constructor(iModel: IModelConnection); + add(arg: Id64Arg): boolean; + clear(): void; + // (undocumented) + readonly count: number; + // (undocumented) + readonly elements: string[]; + find(id: Id64String): boolean; + // WARNING: The type "ModifyElementSource.Unknown" needs to be exported by the package (e.g. added to index.ts) + getSource(): ModifyElementSource.Unknown | ModifyElementSource; + // (undocumented) + readonly groupMarks: GroupMark[]; + // (undocumented) + has(id: string): boolean; + hilite(): void; + // (undocumented) + hilitedState: HilitedState; + hiliteOnAdd: boolean; + // (undocumented) + iModel: IModelConnection; + invert(arg: Id64Arg): boolean; + // (undocumented) + readonly isEmpty: boolean; + // (undocumented) + readonly length: number; + popGroup(): void; + // (undocumented) + remove(arg: Id64Arg): boolean; + setSource(val: ModifyElementSource): void; +} + +// @public (undocumented) +class ElementLocateManager { + // (undocumented) + readonly apertureInches: number; + // (undocumented) + clear(): void; + // (undocumented) + currHit?: HitDetail; + // (undocumented) + doLocate(response: LocateResponse, newSearch: boolean, testPoint: Point3d, view: ScreenViewport | undefined, source: InputSource, filterHits?: boolean): Promise; + // (undocumented) + filterHit(hit: HitDetail, _action: LocateAction, out: LocateResponse): Promise; + static getFailureMessageKey(key: string): string; + // (undocumented) + getNextHit(): HitDetail | undefined; + getPreLocatedHit(): HitDetail | undefined; + // (undocumented) + hitList?: HitList; + // (undocumented) + initLocateOptions(): void; + // (undocumented) + initToolLocate(): void; + // (undocumented) + onInitialized(): void; + // (undocumented) + readonly options: LocateOptions; + // (undocumented) + readonly picker: ElementPicker; + // (undocumented) + setCurrHit(hit?: HitDetail): void; + // (undocumented) + setHitList(list?: HitList): void; + // (undocumented) + readonly touchApertureInches: number; +} + +// @public (undocumented) +class ElementPicker { + doPick(vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): number; + // (undocumented) + empty(): void; + getHit(i: number): HitDetail | undefined; + getHitList(takeOwnership: boolean): HitList; + // (undocumented) + getNextHit(): HitDetail | undefined; + // (undocumented) + hitList?: HitList; + // (undocumented) + readonly pickPointWorld: Point3d; + // (undocumented) + resetCurrentHit(): void; + // (undocumented) + testHit(hit: HitDetail, vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): boolean; + // (undocumented) + viewport?: Viewport; +} + +// @public +class ElementState extends EntityState, implements ElementProps { + constructor(props: ElementProps, iModel: IModelConnection); + // (undocumented) + readonly code: Code; + // (undocumented) + readonly federationGuid?: GuidString; + // (undocumented) + readonly model: Id64String; + // (undocumented) + readonly parent?: RelatedElement; + // (undocumented) + toJSON(): ElementProps; + // (undocumented) + readonly userLabel?: string; +} + +// @public +enum ElemMethod { + Add = 0, + Invert = 1 +} + +// @public +enum ElemSource { + Fence = 1, + Pick = 0, + SelectionSet = 2 +} + +// @public +class EmphasizeElements implements FeatureOverrideProvider { + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + addFeatureOverrides(overrides: FeatureSymbology.Overrides, vp: Viewport): void; + static clear(vp: Viewport, inactiveOnly?: boolean): void; + clearAlwaysDrawnElements(vp: Viewport): boolean; + clearEmphasizedElements(vp: Viewport): boolean; + clearHiddenElements(vp: Viewport): boolean; + clearIsolatedElements(vp: Viewport): boolean; + clearNeverDrawnElements(vp: Viewport): boolean; + clearOverriddenElements(vp: Viewport, key?: number): boolean; + // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected createAppearanceFromKey(key: number): FeatureSymbology.Appearance; + // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) + createDefaultAppearance(): FeatureSymbology.Appearance; + // (undocumented) + protected createOverrideKey(color: ColorDef, override: FeatureOverrideType): number | undefined; + // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) + readonly defaultAppearance: FeatureSymbology.Appearance | undefined; + // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) + emphasizeElements(ids: Id64Arg, vp: Viewport, defaultAppearance?: FeatureSymbology.Appearance, replace?: boolean): boolean; + // WARNING: The type "FeatureSymbology.Appearance" needs to be exported by the package (e.g. added to index.ts) + emphasizeSelectedElements(vp: Viewport, defaultAppearance?: FeatureSymbology.Appearance, replace?: boolean, clearSelection?: boolean): boolean; + // (undocumented) + fromJSON(props: EmphasizeElementsProps, vp: Viewport): boolean; + static get(vp: Viewport): EmphasizeElements | undefined; + getAlwaysDrawnElements(vp: Viewport): Id64Set | undefined; + getEmphasizedElements(vp: Viewport): Id64Set | undefined; + getHiddenElements(vp: Viewport): Id64Set | undefined; + getIsolatedElements(vp: Viewport): Id64Set | undefined; + getNeverDrawnElements(vp: Viewport): Id64Set | undefined; + static getOrCreate(vp: Viewport): EmphasizeElements; + getOverriddenElements(): Map | undefined; + getOverriddenElementsByKey(key: number): Id64Set | undefined; + getOverrideFromKey(key: number, color: ColorDef): FeatureOverrideType; + hideElements(ids: Id64Arg, vp: Viewport, replace?: boolean): boolean; + hideSelectedElements(vp: Viewport, replace?: boolean, clearSelection?: boolean): boolean; + isActive(vp: Viewport): boolean; + isolateElements(ids: Id64Arg, vp: Viewport, replace?: boolean): boolean; + isolateSelectedElements(vp: Viewport, replace?: boolean, clearSelection?: boolean): boolean; + overrideElements(ids: Id64Arg, vp: Viewport, color: ColorDef, override?: FeatureOverrideType, replace?: boolean): boolean; + overrideSelectedElements(vp: Viewport, color: ColorDef, override?: FeatureOverrideType, replace?: boolean, clearSelection?: boolean): boolean; + setAlwaysDrawnElements(ids: Id64Arg, vp: Viewport, exclusive?: boolean, replace?: boolean): boolean; + setNeverDrawnElements(ids: Id64Arg, vp: Viewport, replace?: boolean): boolean; + // (undocumented) + toJSON(vp: Viewport): EmphasizeElementsProps; +} + +// @public (undocumented) +interface EmphasizeElementsProps { + // (undocumented) + alwaysDrawn?: Id64Set; + // (undocumented) + appearanceOverride?: AppearanceOverrideProps[]; + // (undocumented) + defaultAppearance?: FeatureSymbology.AppearanceProps; + // (undocumented) + isAlwaysDrawnExclusive?: boolean; + // (undocumented) + neverDrawn?: Id64Set; +} + +// @public +class EntityState implements EntityProps { + constructor(props: EntityProps, iModel: IModelConnection, _state?: EntityState); + // (undocumented) + readonly classFullName: string; + static readonly className: string; + clone(iModel?: IModelConnection): this; + // (undocumented) + equals(other: this): boolean; + static getClassFullName(): string; + // (undocumented) + readonly id: Id64String; + // (undocumented) + readonly iModel: IModelConnection; + // (undocumented) + readonly jsonProperties: { + [key: string]: any; + } + // (undocumented) + static schemaName: string; + // (undocumented) + static readonly sqlName: string; + // (undocumented) + toJSON(): EntityProps; +} + +// @public +interface EnumerationChoice { + // (undocumented) + label: string; + // (undocumented) + value: string | number; +} + +// @public +interface EnumerationChoicesInfo { + // (undocumented) + choices: EnumerationChoice[]; + // (undocumented) + isStrict?: boolean; + // (undocumented) + maxDisplayedRows?: number; +} + +// @public +class Environment implements EnvironmentProps { + constructor(json?: EnvironmentProps); + // (undocumented) + readonly ground: GroundPlane; + // (undocumented) + readonly sky: SkyBox; + // (undocumented) + toJSON(): EnvironmentProps; +} + +// @public +enum ErrorNums { + NoFence = 0, + NoFenceElems = 1, + NoFenceElemsOutside = 2, + NoSSElems = 3, + NotSupportedElmType = 4 +} + +// @public +class EventController { + constructor(vp: ScreenViewport); + // (undocumented) + destroy(): void; + // (undocumented) + vp: ScreenViewport; +} + +// @public (undocumented) +enum EventHandled { + // (undocumented) + No = 0, + // (undocumented) + Yes = 1 +} + +// @public +export function extractImageSourceDimensions(source: ImageSource): Promise; + +// @public +interface FeatureOverrideProvider { + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addFeatureOverrides(overrides: FeatureSymbology.Overrides, viewport: Viewport): void; +} + +// @public +enum FeatureOverrideType { + // (undocumented) + AlphaOnly = 1, + // (undocumented) + ColorAndAlpha = 2, + // (undocumented) + ColorOnly = 0 +} + +// @public +module FeatureSymbology { + class Appearance implements AppearanceProps { + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + static readonly defaults: Appearance; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + equals(other: Appearance): boolean; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + extendAppearance(base: Appearance): Appearance; + // WARNING: The type "AppearanceProps" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static fromJSON(props?: AppearanceProps): Appearance; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + static fromRgb(color: ColorDef): Appearance; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + static fromRgba(color: ColorDef): Appearance; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + static fromSubCategoryOverride(ovr: SubCategoryOverride): Appearance; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + static fromTransparency(transparencyValue: number): Appearance; + readonly ignoresMaterial?: true | undefined; + // (undocumented) + readonly isFullyTransparent: boolean; + readonly linePixels?: LinePixels; + readonly nonLocatable?: true | undefined; + // (undocumented) + readonly overridesLinePixels: boolean; + // (undocumented) + readonly overridesRgb: boolean; + // (undocumented) + readonly overridesSymbology: boolean; + // (undocumented) + readonly overridesTransparency: boolean; + // (undocumented) + readonly overridesWeight: boolean; + readonly rgb?: RgbColor; + // WARNING: The type "AppearanceProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + toJSON(): AppearanceProps; + readonly transparency?: number; + readonly weight?: number; + } + + interface AppearanceProps { + ignoresMaterial?: true | undefined; + linePixels?: LinePixels; + nonLocatable?: true | undefined; + rgb?: RgbColor; + transparency?: number; + weight?: number; + } + + class Overrides { + constructor(view?: ViewState); + // @internal + protected readonly _alwaysDrawn: Id64.Uint32Set; + // @internal + protected _constructions: boolean; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + protected _defaultOverrides: Appearance; + // @internal + protected _dimensions: boolean; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + protected readonly _elementOverrides: Id64.Uint32Map; + // @internal + protected _lineWeights: boolean; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + protected readonly _modelOverrides: Id64.Uint32Map; + // @internal + protected readonly _neverDrawn: Id64.Uint32Set; + // @internal + protected _patterns: boolean; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + protected readonly _subCategoryOverrides: Id64.Uint32Map; + // @internal + protected readonly _visibleSubCategories: Id64.Uint32Set; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + readonly animationNodeOverrides: Map; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + readonly defaultOverrides: Appearance; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): Appearance | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal + protected getClassifierAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, modelLo: number, modelHi: number): Appearance | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + protected getElementOverrides(idLo: number, idHi: number, animationNodeId: number): Appearance | undefined; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + getElementOverridesById(id: Id64String): Appearance | undefined; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + getFeatureAppearance(feature: Feature, modelId: Id64String, type?: BatchType): Appearance | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + protected getModelOverrides(idLo: number, idHi: number): Appearance | undefined; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + getModelOverridesById(id: Id64String): Appearance | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + protected getSubCategoryOverrides(idLo: number, idHi: number): Appearance | undefined; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + getSubCategoryOverridesById(id: Id64String): Appearance | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + initFromView(view: ViewState): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + protected isAlwaysDrawn(idLo: number, idHi: number): boolean; + isAlwaysDrawnExclusive: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + isClassVisible(geomClass: GeometryClass): boolean; + isFeatureVisible(feature: Feature): boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + protected isNeverDrawn(elemIdLo: number, elemIdHi: number, animationNodeId: number): boolean; + isSubCategoryIdVisible(id: Id64String): boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + protected isSubCategoryVisible(idLo: number, idHi: number): boolean; + readonly lineWeights: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + readonly neverDrawnAnimationNodes: Set; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + overrideAnimationNode(id: number, app: Appearance): void; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + overrideElement(id: Id64String, app: Appearance, replaceExisting?: boolean): void; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + overrideModel(id: Id64String, app: Appearance, replaceExisting?: boolean): void; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + overrideSubCategory(id: Id64String, app: Appearance, replaceExisting?: boolean): void; + setAlwaysDrawn(id: Id64String): void; + setAlwaysDrawnSet(ids: Id64Set, exclusive: boolean): void; + setAnimationNodeNeverDrawn(id: number): void; + // WARNING: The type "Appearance" needs to be exported by the package (e.g. added to index.ts) + setDefaultOverrides(appearance: Appearance, replaceExisting?: boolean): void; + setNeverDrawn(id: Id64String): void; + setNeverDrawnSet(ids: Id64Set): void; + setVisibleSubCategory(id: Id64String): void; + } + +} + +// @public +enum FenceClipMode { + Copy = 3, + None = 0, + Original = 1 +} + +// @public +class FenceParams { + // (undocumented) + clip?: ClipVector; + // (undocumented) + clipMode: FenceClipMode; + // (undocumented) + readonly fenceRangeNPC: Range3d; + // (undocumented) + hasOverlaps: boolean; + // (undocumented) + onTolerance: number; + // (undocumented) + overlapMode: boolean; + // (undocumented) + viewport?: Viewport; +} + +// @public +class FitViewTool extends ViewTool { + constructor(viewport: ScreenViewport, oneShot: boolean, doAnimate?: boolean, isolatedOnly?: boolean); + // (undocumented) + doAnimate: boolean; + // (undocumented) + doFit(viewport: ScreenViewport, oneShot: boolean, doAnimate?: boolean, isolatedOnly?: boolean): Promise; + // (undocumented) + isolatedOnly: boolean; + // (undocumented) + onDataButtonDown(ev: BeButtonEvent): Promise; + // (undocumented) + oneShot: boolean; + // (undocumented) + onPostInstall(): void; + // (undocumented) + static toolId: string; +} + +// @public (undocumented) +class Flags { + // (undocumented) + animateRotation: boolean; + // (undocumented) + auxRotationPlane: RotationMode; + // (undocumented) + baseMode: number; + // (undocumented) + baseRotation: RotationMode; + // (undocumented) + bearingFixToPlane2D: boolean; + // (undocumented) + contextRotMode: number; + // (undocumented) + dialogNeedsUpdate: boolean; + // (undocumented) + fixedOrg: boolean; + // (undocumented) + haveValidOrigin: boolean; + // (undocumented) + ignoreDataButton: boolean; + // (undocumented) + inDataPoint: boolean; + // (undocumented) + indexLocked: boolean; + // (undocumented) + lockedRotation: boolean; + // (undocumented) + pointIsOnPlane: boolean; + // (undocumented) + redrawCompass: boolean; + // (undocumented) + rotationNeedsUpdate: boolean; + // (undocumented) + softAngleLock: boolean; +} + +// @public +class FlyViewTool extends ViewManip { + constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// @public (undocumented) +export function fromSumOf(p: Point3d, v: Vector3d, scale: number, out?: Point3d): Point3d; + +// @public +class FrustumUniforms { + constructor(); + // (undocumented) + readonly farPlane: number; + // (undocumented) + readonly frustum: Float32Array; + // (undocumented) + readonly frustumPlanes: Float32Array; + // (undocumented) + readonly is2d: boolean; + // (undocumented) + readonly nearPlane: number; + // (undocumented) + setFrustum(nearPlane: number, farPlane: number, type: FrustumUniformType): void; + // (undocumented) + setPlanes(top: number, bottom: number, left: number, right: number): void; + // (undocumented) + readonly type: FrustumUniformType; +} + +// @public (undocumented) +enum FrustumUniformType { + // (undocumented) + Orthographic = 1, + // (undocumented) + Perspective = 2, + // (undocumented) + TwoDee = 0 +} + +// @public (undocumented) +class FuzzySearch { + onGetMultiWordSearchOptions(): Fuse.FuseOptions; + onGetSingleWordSearchOptions(): Fuse.FuseOptions; + search(searchedObjects: T[], keys: Array, pattern: string): FuzzySearchResults; +} + +// @public +interface FuzzySearchResult { + getBoldMask(): boolean[]; + getMatchedKey(): string; + getMatchedValue(): string; + getResult(): T; +} + +// @public +class FuzzySearchResults implements Iterable { + // WARNING: The name "__@iterator" contains unsupported characters; API names should use only letters, numbers, and underscores + // (undocumented) + [Symbol.iterator](): any; + constructor(results: any[] | undefined); + // (undocumented) + getResult(resultIndex: number): FuzzySearchResult | undefined; + // (undocumented) + readonly length: number; + // (undocumented) + results: any[]; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class GeoConverter { + constructor(iModel: IModelConnection, datum: string); + // (undocumented) + getGeoCoordinatesFromIModelCoordinates(iModelPoints: XYZProps[]): Promise; + // (undocumented) + getIModelCoordinatesFromGeoCoordinates(geoPoints: XYZProps[]): Promise; +} + +// @public +class GeometricModel2dState extends GeometricModelState, implements GeometricModel2dProps { + constructor(props: GeometricModel2dProps, iModel: IModelConnection); + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly asGeometricModel2d: GeometricModel2dState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly globalOrigin: Point2d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly is3d: boolean; + // (undocumented) + toJSON(): GeometricModel2dProps; +} + +// @public +class GeometricModel3dState extends GeometricModelState { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly asGeometricModel3d: GeometricModel3dState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly is3d: boolean; +} + +// @public +class GeometricModelState extends ModelState, implements TileTreeModelState { + // @internal (undocumented) + protected _classifierTileTreeState: TileTreeState; + // @internal (undocumented) + protected _tileTreeState: TileTreeState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly asGeometricModel: GeometricModelState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly classifierTileTree: TileTree | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + getOrLoadTileTree(edgesRequired: boolean): TileTree | undefined; + readonly is2d: boolean; + readonly is3d: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isGeometricModel: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) + // @internal + loadStatus: TileTree.LoadStatus; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) + // @internal + loadTileTree(edgesRequired: boolean, animationId?: Id64String, asClassifier?: boolean, classifierExpansion?: number): TileTree.LoadStatus; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + onIModelConnectionClose(): void; + queryModelRange(): Promise; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + readonly tileTree: TileTree | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly treeModelId: Id64String; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class GeoServices { + constructor(iModel: IModelConnection); + // (undocumented) + getConverter(datum?: string): GeoConverter; +} + +// @public +export function getImageSourceFormatForMimeType(mimeType: string): ImageSourceFormat | undefined; + +// @public +export function getImageSourceMimeType(format: ImageSourceFormat): string; + +// @public +class GraphicBranch implements IDisposable, RenderMemory.Consumer { + constructor(ownsEntries?: boolean); + add(graphic: RenderGraphic): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + animationId?: string; + clear(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "RenderMemory.Statistics" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + collectStatistics(stats: RenderMemory.Statistics): void; + // (undocumented) + dispose(): void; + readonly entries: RenderGraphic[]; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getViewFlags(flags: ViewFlags, out?: ViewFlags): ViewFlags; + // (undocumented) + readonly isEmpty: boolean; + readonly ownsEntries: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + setViewFlagOverrides(ovr: ViewFlag.Overrides): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + setViewFlags(flags: ViewFlags): void; + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + symbologyOverrides?: FeatureSymbology.Overrides; +} + +// @public +class GraphicBuilder { + // @internal + protected constructor(placement: Transform | undefined, type: GraphicType, viewport: Viewport, pickId?: Id64String); + abstract activateGraphicParams(graphicParams: GraphicParams): void; + abstract addArc(arc: Arc3d, isEllipse: boolean, filled: boolean): void; + abstract addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void; + abstract addLineString(points: Point3d[]): void; + abstract addLineString2d(points: Point2d[], zDepth: number): void; + abstract addLoop(loop: Loop): void; + abstract addPath(path: Path): void; + abstract addPointString(points: Point3d[]): void; + abstract addPointString2d(points: Point2d[], zDepth: number): void; + abstract addPolyface(meshData: Polyface, filled: boolean): void; + // @public + addRangeBox(range: Range3d): void; + abstract addShape(points: Point3d[]): void; + abstract addShape2d(points: Point2d[], zDepth: number): void; + abstract finish(): RenderGraphic; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly iModel: IModelConnection; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isOverlay: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isSceneGraphic: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isViewBackground: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isViewCoordinates: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isWorldCoordinates: boolean; + // (undocumented) + pickId?: string; + placement: Transform; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + setBlankingFill(fillColor: ColorDef): void; + setSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels?: LinePixels): void; + readonly type: GraphicType; + readonly viewport: Viewport; +} + +// @public +enum GraphicType { + Scene = 1, + ViewBackground = 0, + ViewOverlay = 4, + WorldDecoration = 2, + WorldOverlay = 3 +} + +// @public +enum GridOrientationType { + AuxCoord = 4, + View = 0, + // (undocumented) + WorldXY = 1, + // (undocumented) + WorldXZ = 3, + // (undocumented) + WorldYZ = 2 +} + +// @public (undocumented) +interface GroupMark { + // (undocumented) + source: ModifyElementSource; + // (undocumented) + start: number; +} + +// @public +class HilitedSet { + constructor(iModel: IModelConnection); + clearAll(): void; + readonly elements: Set; + has(id: string): boolean; + // (undocumented) + iModel: IModelConnection; + isHilited(id: Id64String): boolean; + setHilite(arg: Id64Arg, onOff: boolean): void; + readonly size: number; +} + +// @public (undocumented) +enum HilitedState { + No = 2, + Unknown = 0, + Yes = 1 +} + +// @public +class HitDetail { + constructor(testPoint: Point3d, viewport: ScreenViewport, hitSource: HitSource, hitPoint: Point3d, sourceId: string, priority: HitPriority, distXY: number, distFraction: number, subCategoryId?: string | undefined, geometryClass?: GeometryClass | undefined); + clone(): HitDetail; + // (undocumented) + readonly distFraction: number; + // (undocumented) + readonly distXY: number; + draw(_context: DecorateContext): void; + // (undocumented) + readonly geometryClass?: GeometryClass | undefined; + getHitType(): HitDetailType; + getPoint(): Point3d; + getToolTip(): Promise; + // (undocumented) + readonly hitPoint: Point3d; + // (undocumented) + readonly hitSource: HitSource; + readonly isElementHit: boolean; + // (undocumented) + readonly isModelHit: boolean; + isSameHit(otherHit?: HitDetail): boolean; + // (undocumented) + readonly priority: HitPriority; + // (undocumented) + readonly sourceId: string; + // (undocumented) + readonly subCategoryId?: string | undefined; + // (undocumented) + readonly testPoint: Point3d; + // (undocumented) + readonly viewport: ScreenViewport; +} + +// @public (undocumented) +enum HitDetailType { + // (undocumented) + Hit = 1, + // (undocumented) + Intersection = 3, + // (undocumented) + Snap = 2 +} + +// @public +enum HitGeomType { + // (undocumented) + Arc = 4, + // (undocumented) + Curve = 3, + // (undocumented) + None = 0, + // (undocumented) + Point = 1, + // (undocumented) + Segment = 2, + // (undocumented) + Surface = 5 +} + +// @public +class HitList { + addHit(newHit: T): number; + compare(hit1: HitDetail | undefined, hit2: HitDetail | undefined): -1 | 1 | 0; + // (undocumented) + currHit: number; + // (undocumented) + dropNulls(): void; + // (undocumented) + empty(): void; + // (undocumented) + getCurrentHit(): T | undefined; + getHit(hitNum: number): T | undefined; + // (undocumented) + getNextHit(): T | undefined; + // (undocumented) + hits: T[]; + insertHit(i: number, hit: T): void; + // (undocumented) + readonly length: number; + removeCurrentHit(): void; + removeHit(hitNum: number): void; + removeHitsFrom(sourceId: string): boolean; + // (undocumented) + resetCurrentHit(): void; + // (undocumented) + setCurrentHit(hit: T): void; + setHit(i: number, p: T | undefined): void; +} + +// @public (undocumented) +interface HitListHolder { + // (undocumented) + setHitList(list: HitList | undefined): void; +} + +// @public +enum HitParentGeomType { + // (undocumented) + Mesh = 4, + // (undocumented) + None = 0, + // (undocumented) + Sheet = 2, + // (undocumented) + Solid = 3, + // (undocumented) + Text = 5, + // (undocumented) + Wire = 1 +} + +// @public (undocumented) +enum HitPriority { + // (undocumented) + NonPlanarEdge = 2, + // (undocumented) + NonPlanarSurface = 5, + // (undocumented) + PlanarEdge = 1, + // (undocumented) + PlanarSurface = 4, + // (undocumented) + SilhouetteEdge = 3, + // (undocumented) + Unknown = 6, + // (undocumented) + WireEdge = 0 +} + +// @public +enum HitSource { + // (undocumented) + AccuSnap = 3, + // (undocumented) + Application = 6, + // (undocumented) + DataPoint = 5, + // (undocumented) + EditAction = 7, + // (undocumented) + EditActionSS = 8, + // (undocumented) + FromUser = 1, + // (undocumented) + MotionLocate = 2, + // (undocumented) + None = 0, + // (undocumented) + TentativeSnap = 4 +} + +// @public +interface IconDefinition { + iconClass: string; + // (undocumented) + isEnabledFunction?: () => boolean; +} + +// @public +interface IconEditorParams extends BasePropertyEditorParams { + // (undocumented) + definition: IconDefinition; + // (undocumented) + type: PropertyEditorParamTypes.Icon; +} + +// @public +class IconSprites { + static emptyAll(): void; + static getSpriteFromUrl(spriteUrl: string): Sprite; +} + +// @public +class IdleTool extends InteractiveTool { + // (undocumented) + exitTool(): void; + // (undocumented) + static hidden: boolean; + // (undocumented) + onMiddleButtonUp(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseStartDrag(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseWheel(ev: BeWheelEvent): Promise; + // (undocumented) + onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; + // (undocumented) + onTouchTap(ev: BeTouchEvent): Promise; + // (undocumented) + run(): boolean; + // (undocumented) + static toolId: string; +} + +// @public +export function imageBufferToBase64EncodedPng(buffer: ImageBuffer): string | undefined; + +// @public +export function imageBufferToPngDataUrl(buffer: ImageBuffer): string | undefined; + +// @public +export function imageElementFromImageSource(source: ImageSource): Promise; + +// @public +export function imageElementFromUrl(url: string): Promise; + +// @public +class IModelApp { + // (undocumented) + protected static _imodelClient?: IModelClient; + // (undocumented) + protected static _initialized: boolean; + static accessToken?: AccessToken; + static accuDraw: AccuDraw; + static accuSnap: AccuSnap; + static applicationId: string; + // (undocumented) + static readonly features: FeatureGates; + // (undocumented) + static readonly hasRenderSystem: boolean; + static i18n: I18N; + // (undocumented) + static iModelClient: IModelClient; + // (undocumented) + static readonly initialized: boolean; + // (undocumented) + static locateManager: ElementLocateManager; + static notifications: NotificationManager; + protected static onStartup(): void; + static quantityFormatter: QuantityFormatter; + static readonly renderSystem: RenderSystem; + static sessionId: GuidString; + static settings: SettingsAdmin; + static shutdown(): void; + static startup(imodelClient?: IModelClient): void; + protected static supplyI18NOptions(): I18NOptions | undefined; + protected static supplyRenderSystem(): RenderSystem; + // (undocumented) + static tentativePoint: TentativePoint; + static tileAdmin: TileAdmin; + static toolAdmin: ToolAdmin; + static readonly tools: ToolRegistry; + static viewManager: ViewManager; +} + +// @public (undocumented) +class IModelConnection { +} + +// @public +class InputCollector extends InteractiveTool { + // (undocumented) + exitTool(): void; + // (undocumented) + onResetButtonUp(_ev: BeButtonEvent): Promise; + // (undocumented) + run(): boolean; +} + +// @public +interface InputEditorSizeParams extends BasePropertyEditorParams { + maxLength?: number; + size?: number; + // (undocumented) + type: PropertyEditorParamTypes.InputEditorSize; +} + +// @public +enum InputSource { + Mouse = 1, + Touch = 2, + Unknown = 0 +} + +// @public +interface InstancedGraphicParams { + readonly count: number; + readonly featureIds?: Uint8Array; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + readonly symbologyOverrides?: Uint8Array; + readonly transforms: Float32Array; +} + +// @public +class InteractiveTool extends Tool { + applyToolSettingPropertyChange(_updatedValue: ToolSettingsPropertySyncItem): boolean; + beginDynamics(): void; + changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void; + decorate(_context: DecorateContext): void; + decorateSuspended(_context: DecorateContext): void; + endDynamics(): void; + // (undocumented) + abstract exitTool(): void; + filterHit(_hit: HitDetail, _out?: LocateResponse): Promise; + getCurrentButtonEvent(ev: BeButtonEvent): void; + getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined; + getToolTip(_hit: HitDetail): Promise; + initLocateElements(enableLocate?: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void; + // (undocumented) + isCompatibleViewport(_vp: Viewport, _isSelectedViewChange: boolean): boolean; + readonly isDynamicsStarted: boolean; + // (undocumented) + isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean; + onCleanup(): void; + onDataButtonDown(_ev: BeButtonEvent): Promise; + onDataButtonUp(_ev: BeButtonEvent): Promise; + onDynamicFrame(_ev: BeButtonEvent, _context: DynamicsContext): void; + onInstall(): boolean; + onKeyTransition(_wentDown: boolean, _keyEvent: KeyboardEvent): Promise; + onMiddleButtonDown(_ev: BeButtonEvent): Promise; + onMiddleButtonUp(_ev: BeButtonEvent): Promise; + onModifierKeyTransition(_wentDown: boolean, _modifier: BeModifierKeys, _event: KeyboardEvent): Promise; + onMouseEndDrag(ev: BeButtonEvent): Promise; + onMouseMotion(_ev: BeButtonEvent): Promise; + onMouseMotionStopped(_ev: BeButtonEvent): Promise; + onMouseNoMotion(_ev: BeButtonEvent): Promise; + onMouseStartDrag(_ev: BeButtonEvent): Promise; + onMouseWheel(_ev: BeWheelEvent): Promise; + onPostInstall(): void; + onReinitialize(): void; + onResetButtonDown(_ev: BeButtonEvent): Promise; + onResetButtonUp(_ev: BeButtonEvent): Promise; + onSelectedViewportChanged(_previous: Viewport | undefined, _current: Viewport | undefined): void; + onSuspend(): void; + onTouchCancel(_ev: BeTouchEvent): Promise; + onTouchComplete(_ev: BeTouchEvent): Promise; + onTouchEnd(_ev: BeTouchEvent): Promise; + onTouchMove(_ev: BeTouchEvent): Promise; + onTouchMoveStart(_ev: BeTouchEvent, _startEv: BeTouchEvent): Promise; + onTouchStart(_ev: BeTouchEvent): Promise; + onTouchTap(_ev: BeTouchEvent): Promise; + onUnsuspend(): void; + receivedDownEvent: boolean; + supplyToolSettingsProperties(): ToolSettingsPropertyRecord[] | undefined; + syncToolSettingsProperties(syncData: ToolSettingsPropertySyncItem[]): void; + testDecorationHit(_id: string): boolean; +} + +// @public (undocumented) +class IntersectDetail extends SnapDetail { + constructor(from: SnapDetail, heat: SnapHeat | undefined, snapPoint: XYZProps, otherPrimitive: CurvePrimitive, otherId: string); + // (undocumented) + draw(context: DecorateContext): void; + // (undocumented) + readonly otherId: string; + // (undocumented) + readonly otherPrimitive: CurvePrimitive; +} + +// @public (undocumented) +enum ItemField { + // (undocumented) + ANGLE_Item = 1, + // (undocumented) + DIST_Item = 0, + // (undocumented) + X_Item = 2, + // (undocumented) + Y_Item = 3, + // (undocumented) + Z_Item = 4 +} + +// @public +interface JsonEditorParams extends BasePropertyEditorParams { + // (undocumented) + json: any; + // (undocumented) + type: PropertyEditorParamTypes.JSON; +} + +// @public (undocumented) +enum KeyinStatus { + // (undocumented) + DontUpdate = 2, + // (undocumented) + Dynamic = 0, + // (undocumented) + Partial = 1 +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +export function linePlaneIntersect(outP: Point3d, linePt: Point3d, lineNormal: Vector3d | undefined, planePt: Point3d, planeNormal: Vector3d, perpendicular: boolean): void; + +// @public +interface LinkElementsInfo { + matcher?: (displayValue: string) => Array<{ + start: number; + end: number; + }>; + onClick: (record: PropertyRecord, text: string) => void; +} + +// @public +enum LocateAction { + // (undocumented) + AutoLocate = 1, + // (undocumented) + Identify = 0 +} + +// @public +enum LocateFilterStatus { + // (undocumented) + Accept = 0, + // (undocumented) + Reject = 1 +} + +// @public +class LocateOptions { + allowDecorations: boolean; + allowNonLocatable: boolean; + clone(): LocateOptions; + hitSource: HitSource; + // (undocumented) + init(): void; + maxHits: number; + // (undocumented) + setFrom(other: LocateOptions): void; +} + +// @public (undocumented) +class LocateResponse { + // (undocumented) + explanation: string; + // (undocumented) + reason?: string; + // (undocumented) + snapStatus: SnapStatus; +} + +// @public (undocumented) +enum LockedStates { + // (undocumented) + ANGLE_BM = 7, + // (undocumented) + DIST_BM = 8, + // (undocumented) + NONE_LOCKED = 0, + // (undocumented) + VEC_BM = 4, + // (undocumented) + X_BM = 1, + // (undocumented) + XY_BM = 3, + // (undocumented) + Y_BM = 2 +} + +// @public +class LookViewTool extends ViewManip { + constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// @public (undocumented) +enum ManipulatorToolEvent { + // (undocumented) + Start = 1, + // (undocumented) + Stop = 2, + // (undocumented) + Suspend = 3, + // (undocumented) + Unsuspend = 4 +} + +// @public +class MarginPercent { + constructor(left: number, top: number, right: number, bottom: number); + // (undocumented) + bottom: number; + // (undocumented) + left: number; + // (undocumented) + right: number; + // (undocumented) + top: number; +} + +// @public +class Marker implements CanvasDecoration { + constructor(worldLocation: XYAndZ, size: XAndY); + protected _hiliteColor?: ColorDef; + protected _isHilited: boolean; + // (undocumented) + protected _scaleFactor?: Point2d; + // (undocumented) + protected _scaleFactorRange?: Range1d; + addDecoration(context: DecorateContext): void; + addMarker(context: DecorateContext): void; + drawDecoration(ctx: CanvasRenderingContext2D): void; + drawFunc?(ctx: CanvasRenderingContext2D): void; + protected drawHilited(ctx: CanvasRenderingContext2D): boolean; + image?: MarkerImage; + imageOffset?: XAndY; + imageSize?: XAndY; + label?: string; + labelAlign?: MarkerTextAlign; + labelBaseline?: MarkerTextBaseline; + labelColor?: MarkerFillStyle; + labelFont?: string; + labelOffset?: XAndY; + static makeFrom(other: Marker, ...args: any[]): T; + onMouseButton?(_ev: BeButtonEvent): boolean; + onMouseEnter(ev: BeButtonEvent): void; + onMouseLeave(): void; + onMouseMove(ev: BeButtonEvent): void; + pick(pt: XAndY): boolean; + position: Point3d; + readonly rect: ViewRect; + setImage(image: MarkerImage | Promise): void; + setImageUrl(url: string): void; + setPosition(vp: Viewport): boolean; + setScaleFactor(range: Range1dProps): void; + size: Point2d; + title?: string; + tooltipOptions?: ToolTipOptions; + visible: boolean; + readonly wantImage: boolean; + worldLocation: Point3d; +} + +// @public +class MarkerSet { + // (undocumented) + protected _entries: Array>; + // (undocumented) + protected readonly _worldToViewMap: Matrix4d; + addDecoration(context: DecorateContext): void; + protected abstract getClusterMarker(cluster: Cluster): Marker; + readonly markers: Set; + minimumClusterSize: number; +} + +// @public (undocumented) +class MeasureDistanceTool extends PrimitiveTool { + // WARNING: The type "MeasureMarker" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected readonly _acceptedSegments: { + distance: number; + slope: number; + start: Point3d; + end: Point3d; + delta: Vector3d; + refAxes: Matrix3d; + marker: MeasureMarker; + }[]; + // (undocumented) + protected readonly _locationData: { + point: Point3d; + refAxes: Matrix3d; + }[]; + // (undocumented) + protected _snapGeomId?: string; + // (undocumented) + protected _totalDistance: number; + // WARNING: The type "MeasureLabel" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected _totalDistanceMarker?: MeasureLabel; + // (undocumented) + protected acceptNewSegments(): Promise; + // (undocumented) + decorate(context: DecorateContext): void; + // (undocumented) + decorateSuspended(context: DecorateContext): void; + // (undocumented) + protected displayDelta(context: DecorateContext, seg: any): void; + // (undocumented) + protected displayDynamicDistance(context: DecorateContext, points: Point3d[]): void; + // (undocumented) + getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined; + // (undocumented) + protected getMarkerToolTip(distance: number, slope: number, start: Point3d, end: Point3d, delta?: Vector3d): Promise; + // (undocumented) + protected getReferenceAxes(vp?: Viewport): Matrix3d; + // (undocumented) + protected getSnapPoints(): Point3d[] | undefined; + // (undocumented) + isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean; + // (undocumented) + onDataButtonDown(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseMotion(ev: BeButtonEvent): Promise; + // (undocumented) + onPostInstall(): void; + // (undocumented) + onResetButtonUp(ev: BeButtonEvent): Promise; + // (undocumented) + onRestartTool(): void; + // (undocumented) + onUndoPreviousStep(): Promise; + // (undocumented) + onUnsuspend(): void; + // (undocumented) + protected reportMeasurements(): void; + // (undocumented) + requireWriteableTarget(): boolean; + // (undocumented) + protected setupAndPromptForNextAction(): void; + // (undocumented) + protected showPrompt(): void; + // (undocumented) + testDecorationHit(id: string): boolean; + // (undocumented) + static toolId: string; + // (undocumented) + protected updateSelectedMarkerToolTip(seg: any): Promise; + // (undocumented) + protected updateTotals(): Promise; +} + +// @public (undocumented) +class MeasureLocationTool extends PrimitiveTool { + // WARNING: The type "MeasureMarker" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected readonly _acceptedLocations: MeasureMarker[]; + // (undocumented) + decorate(context: DecorateContext): void; + // (undocumented) + decorateSuspended(context: DecorateContext): void; + // (undocumented) + protected getMarkerToolTip(point: Point3d): Promise; + // (undocumented) + isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean; + // (undocumented) + onDataButtonDown(ev: BeButtonEvent): Promise; + // (undocumented) + onPostInstall(): void; + // (undocumented) + onResetButtonUp(_ev: BeButtonEvent): Promise; + // (undocumented) + onRestartTool(): void; + // (undocumented) + onUndoPreviousStep(): Promise; + // (undocumented) + onUnsuspend(): void; + // (undocumented) + protected reportMeasurements(): void; + // (undocumented) + requireWriteableTarget(): boolean; + // (undocumented) + protected setupAndPromptForNextAction(): void; + // (undocumented) + protected showPrompt(): void; + // (undocumented) + static toolId: string; +} + +// @public +enum MessageBoxIconType { + // (undocumented) + Critical = 4, + // (undocumented) + Information = 1, + // (undocumented) + NoSymbol = 0, + // (undocumented) + Question = 2, + // (undocumented) + Warning = 3 +} + +// @public +enum MessageBoxType { + // (undocumented) + LargeOk = 2, + // (undocumented) + MediumAlert = 3, + // (undocumented) + Ok = 1, + // (undocumented) + OkCancel = 0, + // (undocumented) + YesNo = 5, + // (undocumented) + YesNoCancel = 4 +} + +// @public +enum MessageBoxValue { + // (undocumented) + Apply = 1, + // (undocumented) + Cancel = 4, + // (undocumented) + Default = 5, + // (undocumented) + Help = 10, + // (undocumented) + No = 7, + // (undocumented) + NoToAll = 12, + // (undocumented) + Ok = 3, + // (undocumented) + Reset = 2, + // (undocumented) + Retry = 8, + // (undocumented) + Stop = 9, + // (undocumented) + Yes = 6, + // (undocumented) + YesToAll = 11 +} + +// WARNING: Unsupported export: SystemFactory +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +module MockRender { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + class App extends IModelApp { + // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected static createDefaultRenderSystem(): System; + // (undocumented) + static shutdown(): void; + // (undocumented) + protected static supplyRenderSystem(): RenderSystem; + // WARNING: The type "SystemFactory" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + static systemFactory: SystemFactory; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Batch extends Graphic { + constructor(graphic: RenderGraphic, featureTable: PackedFeatureTable, range: ElementAlignedBox3d); + // (undocumented) + dispose(): void; + // (undocumented) + readonly featureTable: PackedFeatureTable; + // (undocumented) + readonly graphic: RenderGraphic; + // (undocumented) + readonly range: ElementAlignedBox3d; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Branch extends Graphic { + constructor(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume | undefined); + // (undocumented) + readonly branch: GraphicBranch; + // (undocumented) + readonly clips?: RenderClipVolume | undefined; + // (undocumented) + dispose(): void; + // (undocumented) + readonly transform: Transform; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Builder extends PrimitiveBuilder { + // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) + constructor(system: System, placement: Transform | undefined, type: GraphicType, viewport: Viewport, pickId?: Id64String); + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Graphic extends RenderGraphic { + constructor(); + // WARNING: The type "RenderMemory.Statistics" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + collectStatistics(_stats: RenderMemory.Statistics): void; + // (undocumented) + dispose(): void; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class List extends Graphic { + constructor(graphics: RenderGraphic[]); + // (undocumented) + dispose(): void; + // (undocumented) + readonly graphics: RenderGraphic[]; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class OffScreenTarget extends Target { + // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) + constructor(system: System, _viewRect: ViewRect); + // (undocumented) + setViewRect(rect: ViewRect, _temp: boolean): void; + // (undocumented) + readonly viewRect: ViewRect; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class OnScreenTarget extends Target { + // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) + constructor(system: System, _canvas: HTMLCanvasElement); + // (undocumented) + setViewRect(_rect: ViewRect, _temp: boolean): void; + // (undocumented) + readonly viewRect: ViewRect; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class System extends RenderSystem { + // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d): Batch; + // WARNING: The type "Branch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createBranch(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume): Branch; + // WARNING: The type "Builder" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createGraphicBuilder(placement: Transform, type: GraphicType, viewport: Viewport, pickableId?: Id64String): Builder; + // WARNING: The type "List" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createGraphicList(primitives: RenderGraphic[]): List; + // WARNING: The type "MeshParams" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createMesh(_params: MeshParams): Graphic; + // (undocumented) + createOffscreenTarget(rect: ViewRect): RenderTarget; + // WARNING: The type "PointCloudArgs" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection): Graphic; + // WARNING: The type "PointStringParams" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createPointString(_params: PointStringParams): Graphic; + // WARNING: The type "PolylineParams" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Graphic" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createPolyline(_params: PolylineParams): Graphic; + // WARNING: The type "OnScreenTarget" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createTarget(canvas: HTMLCanvasElement): OnScreenTarget; + // (undocumented) + dispose(): void; + // (undocumented) + readonly isValid: boolean; + // (undocumented) + readonly maxTextureSize: number; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Target extends RenderTarget { + // WARNING: The type "System" needs to be exported by the package (e.g. added to index.ts) + protected constructor(_system: System); + // (undocumented) + animationFraction: number; + // (undocumented) + readonly cameraFrustumNearScaleLimit: number; + // (undocumented) + changeDecorations(_decs: Decorations): void; + // (undocumented) + changeDynamics(_dynamics?: GraphicList): void; + // (undocumented) + changeRenderPlan(_plan: RenderPlan): void; + // (undocumented) + changeScene(_scene: GraphicList): void; + // (undocumented) + changeTerrain(_terrain: GraphicList): void; + // (undocumented) + drawFrame(_sceneTime?: number): void; + // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readPixels(_rect: ViewRect, _selector: Pixel.Selector, receiver: Pixel.Receiver, _excludeNonLocatable: boolean): void; + // (undocumented) + readonly renderSystem: RenderSystem; + // (undocumented) + updateViewRect(): boolean; + // (undocumented) + readonly wantInvertBlackBackground: boolean; + } + +} + +// @public +class ModelSelectorState extends ElementState { + constructor(props: ModelSelectorProps, iModel: IModelConnection); + addModels(arg: Id64Arg): void; + containsModel(modelId: Id64String): boolean; + dropModels(arg: Id64Arg): void; + // @public + equalState(other: ModelSelectorState): boolean; + has(id: string): boolean; + load(): Promise; + readonly models: Set; + readonly name: string; + // (undocumented) + toJSON(): ModelSelectorProps; +} + +// @public +class ModelState extends EntityState, implements ModelProps { + constructor(props: ModelProps, iModel: IModelConnection); + readonly asGeometricModel: GeometricModelState | undefined; + readonly asGeometricModel2d: GeometricModel2dState | undefined; + readonly asGeometricModel3d: GeometricModel3dState | undefined; + readonly isGeometricModel: boolean; + // (undocumented) + readonly isPrivate: boolean; + // (undocumented) + readonly isTemplate: boolean; + // (undocumented) + readonly modeledElement: RelatedElement; + // (undocumented) + readonly name: string; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + onIModelConnectionClose(): void; + // (undocumented) + parentModel: Id64String; + toJSON(): ModelProps; +} + +// @public (undocumented) +enum ModifyElementSource { + DragSelect = 5, + Fence = 3, + Group = 4, + Selected = 1, + SelectionSet = 2, + Unknown = 0 +} + +// @public +interface MultilineTextEditorParams extends BasePropertyEditorParams { + // (undocumented) + heightInRows: number; + // (undocumented) + type: PropertyEditorParamTypes.MultilineText; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class NoRenderApp extends IModelApp { + // (undocumented) + protected static supplyRenderSystem(): RenderSystem; +} + +// @public +class NotificationManager { + protected _showToolTip(_htmlElement: HTMLElement, _message: HTMLElement | string, _location?: XAndY, _options?: ToolTipOptions): void; + clearToolTip(): void; + closePointerMessage(): void; + endActivityMessage(_reason: ActivityMessageEndReason): boolean; + readonly isToolTipOpen: boolean; + readonly isToolTipSupported: boolean; + openMessageBox(_mbType: MessageBoxType, _message: string, _icon: MessageBoxIconType): Promise; + openToolTip(_htmlElement: HTMLElement, message: HTMLElement | string, location?: XAndY, options?: ToolTipOptions): void; + outputActivityMessage(_messageText: string, _percentComplete: number): boolean; + outputMessage(_message: NotifyMessageDetails): void; + outputPrompt(_prompt: string): void; + outputPromptByKey(key: string): void; + setupActivityMessage(_details: ActivityMessageDetails): boolean; + // (undocumented) + readonly toolTipLocation: Point2d; +} + +// @public +class NotifyMessageDetails { + constructor(priority: OutputMessagePriority, briefMessage: string, detailedMessage?: string | undefined, msgType?: OutputMessageType, openAlert?: OutputMessageAlert); + // (undocumented) + briefMessage: string; + // (undocumented) + detailedMessage?: string | undefined; + // (undocumented) + displayPoint?: Point2d; + // (undocumented) + displayTime: BeDuration; + // (undocumented) + msgType: OutputMessageType; + // (undocumented) + openAlert: OutputMessageAlert; + // (undocumented) + priority: OutputMessagePriority; + // (undocumented) + relativePosition: RelativePosition; + setPointerTypeDetails(viewport: HTMLElement, displayPoint: XAndY, relativePosition?: RelativePosition): void; + // (undocumented) + viewport?: HTMLElement; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class NullRenderSystem extends RenderSystem { + constructor(); + // (undocumented) + createBatch(): any; + // (undocumented) + createBranch(): any; + // (undocumented) + createGraphicBuilder(): any; + // (undocumented) + createGraphicList(): any; + // (undocumented) + createOffscreenTarget(): NullTarget; + // (undocumented) + createTarget(): NullTarget; + // (undocumented) + dispose(): void; + // (undocumented) + readonly isValid: boolean; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class NullTarget extends RenderTarget { + // (undocumented) + animationBranches: AnimationBranchStates | undefined; + // (undocumented) + animationFraction: number; + // (undocumented) + readonly cameraFrustumNearScaleLimit: number; + // (undocumented) + changeDecorations(): void; + // (undocumented) + changeDynamics(): void; + // (undocumented) + changeRenderPlan(): void; + // (undocumented) + changeScene(): void; + // (undocumented) + changeTerrain(): void; + // (undocumented) + dispose(): void; + // (undocumented) + drawFrame(_sceneMilSecElapsed?: number): void; + // (undocumented) + onDestroy(): void; + // (undocumented) + onResized(): void; + // (undocumented) + overrideFeatureSymbology(): void; + // (undocumented) + readImage(): undefined; + // (undocumented) + readPixels(): void; + // (undocumented) + readonly renderSystem: any; + // (undocumented) + reset(): void; + // (undocumented) + setFlashed(): void; + // (undocumented) + setHiliteSet(): void; + // (undocumented) + setViewRect(): void; + // (undocumented) + updateViewRect(): boolean; + // (undocumented) + readonly viewRect: ViewRect; + // (undocumented) + readonly wantInvertBlackBackground: boolean; +} + +// @public (undocumented) +class OffScreenTarget extends Target { + constructor(rect: ViewRect); + // (undocumented) + protected _assignDC(): boolean; + // (undocumented) + protected _beginPaint(): void; + // (undocumented) + protected _endPaint(): void; + // (undocumented) + animationFraction: number; + // (undocumented) + onResized(): void; + // (undocumented) + setViewRect(rect: ViewRect, temporary: boolean): void; + // (undocumented) + updateViewRect(): boolean; + // (undocumented) + readonly viewRect: ViewRect; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class OffScreenViewport extends Viewport { + // (undocumented) + static create(view: ViewState, viewRect?: ViewRect): OffScreenViewport; + // (undocumented) + setRect(rect: ViewRect, temporary?: boolean): void; + // (undocumented) + readonly viewRect: ViewRect; +} + +// @public +class OidcBrowserClient extends OidcClient, implements IOidcFrontendClient { + constructor(_configuration: OidcFrontendClientConfiguration); + dispose(): void; + getAccessToken(_actx: ActivityLoggingContext): Promise; + handleRedirectCallback(): Promise; + initialize(actx: ActivityLoggingContext): Promise; + readonly onUserStateChanged: BeEvent<(token: AccessToken | undefined) => void>; + signIn(_actx: ActivityLoggingContext): void; + signOut(_actx: ActivityLoggingContext): void; +} + +// @public (undocumented) +class OidcClientWrapper { + // (undocumented) + static initialize(actx: ActivityLoggingContext, config: OidcFrontendClientConfiguration): Promise; + // (undocumented) + static readonly oidcClient: IOidcFrontendClient; +} + +// @public +class OnScreenTarget extends Target { + constructor(canvas: HTMLCanvasElement); + // (undocumented) + protected _assignDC(): boolean; + // (undocumented) + protected _beginPaint(): void; + // (undocumented) + protected _endPaint(): void; + // (undocumented) + animationFraction: number; + // (undocumented) + protected debugPaint(): void; + // (undocumented) + dispose(): void; + // (undocumented) + protected drawOverlayDecorations(): void; + // (undocumented) + onResized(): void; + // (undocumented) + pickOverlayDecoration(pt: XAndY): CanvasDecoration | undefined; + // (undocumented) + setViewRect(_rect: ViewRect, _temporary: boolean): void; + // (undocumented) + updateViewRect(): boolean; + // (undocumented) + readonly viewRect: ViewRect; +} + +// @public +class OrthographicViewState extends SpatialViewState { + constructor(props: SpatialViewDefinitionProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle3dState, modelSelector: ModelSelectorState); + // (undocumented) + static readonly className: string; + // (undocumented) + supportsCamera(): boolean; +} + +// @public +enum OutputMessageAlert { + // (undocumented) + Balloon = 2, + // (undocumented) + Dialog = 1, + // (undocumented) + None = 0 +} + +// @public +enum OutputMessagePriority { + // (undocumented) + Debug = 13, + // (undocumented) + Error = 10, + // (undocumented) + Fatal = 17, + // (undocumented) + Info = 12, + // (undocumented) + None = 0, + // (undocumented) + Warning = 11 +} + +// @public +enum OutputMessageType { + Alert = 4, + // (undocumented) + InputField = 3, + // (undocumented) + Pointer = 1, + // (undocumented) + Sticky = 2, + Toast = 0 +} + +// @public (undocumented) +interface PackedFeature { + // (undocumented) + animationNodeId: number; + // (undocumented) + elementId: Id64.Uint32Pair; + // (undocumented) + geometryClass: GeometryClass; + // (undocumented) + subCategoryId: Id64.Uint32Pair; +} + +// @public +class PackedFeatureTable { + // @internal + constructor(data: Uint32Array, modelId: Id64String, numFeatures: number, maxFeatures: number, type: BatchType, animationNodeIds?: Uint8Array | Uint16Array | Uint32Array); + // (undocumented) + readonly anyDefined: boolean; + // (undocumented) + readonly byteLength: number; + findElementId(featureIndex: number): Id64String | undefined; + findFeature(featureIndex: number): Feature | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getAnimationNodeId(featureIndex: number): number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getElementIdPair(featureIndex: number): Id64.Uint32Pair; + getFeature(featureIndex: number): Feature; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getPackedFeature(featureIndex: number): PackedFeature; + // (undocumented) + readonly isClassifier: boolean; + readonly isUniform: boolean; + // (undocumented) + readonly maxFeatures: number; + // (undocumented) + readonly modelId: Id64String; + // (undocumented) + readonly numFeatures: number; + static pack(featureTable: FeatureTable): PackedFeatureTable; + // (undocumented) + readonly type: BatchType; + readonly uniform: Feature | undefined; + unpack(): FeatureTable; +} + +// @public +class PanViewTool extends ViewManip { + constructor(vp: ScreenViewport | undefined, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// @public (undocumented) +class PerformanceMetrics { + constructor(gatherGlFinish?: boolean, gatherCurPerformanceMetrics?: boolean); + // (undocumented) + curSpfTimeIndex: number; + // (undocumented) + endFrame(operationName?: string): void; + // (undocumented) + fpsTimer: StopWatch; + // (undocumented) + fpsTimerStart: number; + // (undocumented) + frameTimings: Map; + // (undocumented) + gatherCurPerformanceMetrics: boolean; + // (undocumented) + gatherGlFinish: boolean; + // (undocumented) + loadTileSum: number; + // (undocumented) + loadTileTimes: number[]; + // (undocumented) + recordTime(operationName: string): void; + // (undocumented) + renderSpfSum: number; + // (undocumented) + renderSpfTimes: number[]; + // (undocumented) + spfSum: number; + // (undocumented) + spfTimes: number[]; + // (undocumented) + startNewFrame(sceneTime?: number): void; +} + +// WARNING: Unsupported export: Receiver +// @public +module Pixel { + interface Buffer { + // WARNING: The type "Data" needs to be exported by the package (e.g. added to index.ts) + getPixel(x: number, y: number): Data; + } + + class Data { + // WARNING: The type "GeometryType" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Planarity" needs to be exported by the package (e.g. added to index.ts) + constructor(feature?: Feature | undefined, distanceFraction?: number, type?: GeometryType, planarity?: Planarity, featureTable?: PackedFeatureTable | undefined); + // (undocumented) + readonly distanceFraction: number; + // (undocumented) + readonly elementId: Id64String | undefined; + // (undocumented) + readonly feature?: Feature | undefined; + // (undocumented) + readonly featureTable?: PackedFeatureTable | undefined; + // (undocumented) + readonly geometryClass: GeometryClass | undefined; + // WARNING: The type "Planarity" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly planarity: Planarity; + // (undocumented) + readonly subCategoryId: Id64String | undefined; + // WARNING: The type "GeometryType" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly type: GeometryType; + } + + enum GeometryType { + Edge = 4, + Linear = 3, + None = 1, + Silhouette = 5, + Surface = 2, + Unknown = 0 + } + + enum Planarity { + None = 1, + NonPlanar = 3, + Planar = 2, + Unknown = 0 + } + + enum Selector { + All = 5, + Feature = 1, + GeometryAndDistance = 4, + // (undocumented) + None = 0 + } + +} + +// @public +class Plugin { + constructor(name: string, versionsRequired: string); + // (undocumented) + name: string; + abstract onExecute(_args: string[]): void; + onLoad(_args: string[]): void; + // (undocumented) + versionsRequired: string; +} + +// @public +class PluginAdmin { + static getPlugin(pluginName: string): Promise | undefined; + static loadPlugin(packageName: string, args?: string[]): Promise; + static register(plugin: Plugin): string[] | undefined; +} + +// WARNING: Unsupported export: Text +// WARNING: Unsupported export: String +// WARNING: Unsupported export: ShortDate +// WARNING: Unsupported export: Boolean +// WARNING: Unsupported export: Float +// WARNING: Unsupported export: Int +// WARNING: Unsupported export: Hexadecimal +// WARNING: Unsupported export: Enum +// WARNING: Unsupported export: Numeric +// WARNING: Unsupported export: Point2d +// WARNING: Unsupported export: Point3d +// WARNING: Unsupported export: Point +// WARNING: Unsupported export: Value +// @public +module Primitives { +} + +// @public +class PrimitiveTool extends InteractiveTool { + autoLockTarget(): void; + // (undocumented) + exitTool(): void; + getPrompt(): string; + readonly iModel: IModelConnection; + isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean; + isValidLocation(ev: BeButtonEvent, isButtonEvent: boolean): boolean; + onRedoPreviousStep(): Promise; + onReinitialize(): void; + abstract onRestartTool(): void; + onSelectedViewportChanged(_previous: Viewport | undefined, current: Viewport | undefined): void; + onUndoPreviousStep(): Promise; + // (undocumented) + redoPreviousStep(): Promise; + requireWriteableTarget(): boolean; + run(): boolean; + saveChanges(): Promise; + // (undocumented) + targetIsLocked: boolean; + // (undocumented) + targetModelId?: string; + // (undocumented) + targetView?: Viewport; + // (undocumented) + undoPreviousStep(): Promise; +} + +// @public +interface PrimitiveValue extends BasePropertyValue { + // (undocumented) + displayValue?: string; + // (undocumented) + value?: Primitives.Value; + // (undocumented) + valueFormat: PropertyValueFormat.Primitive; +} + +// @public +interface PropertyDescription { + dataController?: string; + // (undocumented) + displayLabel: string; + // (undocumented) + editor?: PropertyEditorInfo; + // (undocumented) + enum?: EnumerationChoicesInfo; + // (undocumented) + name: string; + quantityType?: QuantityType | string; + // (undocumented) + typename: string; +} + +// @public +interface PropertyEditorInfo { + // (undocumented) + name?: string; + // (undocumented) + params?: PropertyEditorParams[]; +} + +// @public +enum PropertyEditorParamTypes { + // (undocumented) + ButtonGroupData = 0, + // (undocumented) + CheckBoxIcons = 1, + // (undocumented) + ColorData = 10, + // (undocumented) + Icon = 2, + // (undocumented) + InputEditorSize = 3, + // (undocumented) + JSON = 4, + // (undocumented) + MultilineText = 5, + // (undocumented) + Range = 6, + // (undocumented) + Slider = 7, + // (undocumented) + SuppressEditorLabel = 9, + // (undocumented) + SuppressUnitLabel = 8 +} + +// @public +class PropertyRecord { + constructor(value: PropertyValue, property: PropertyDescription); + copyWithNewValue(newValue: PropertyValue): PropertyRecord; + // (undocumented) + description?: string; + // (undocumented) + isDisabled?: boolean; + // (undocumented) + isMerged?: boolean; + // (undocumented) + isReadonly?: boolean; + links?: LinkElementsInfo; + // (undocumented) + readonly property: PropertyDescription; + // (undocumented) + readonly value: PropertyValue; +} + +// @public +enum PropertyValueFormat { + // (undocumented) + Array = 1, + // (undocumented) + Primitive = 0, + // (undocumented) + Struct = 2 +} + +// @public +class QuantityFormatter implements UnitsProvider { + // (undocumented) + protected _activeSystemIsImperial: boolean; + // (undocumented) + protected _formatSpecsByKoq: Map; + // (undocumented) + protected _imperialFormatsByType: Map; + // (undocumented) + protected _imperialFormatSpecsByType: Map; + // (undocumented) + protected _metricFormatsByType: Map; + // (undocumented) + protected _metricFormatSpecsByType: Map; + findFormatterSpecByQuantityType(type: QuantityType, imperial?: boolean): FormatterSpec | undefined; + protected findKoqFormatterSpec(koq: string, useImperial: boolean): FormatterSpec | undefined; + findUnit(unitLabel: string, unitFamily?: string): Promise; + findUnitByName(unitName: string): Promise; + // WARNING: The type "UnitDefinition" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected findUnitDefinition(name: string): UnitDefinition | undefined; + formatQuantity(magnitude: number, formatSpec: FormatterSpec): string; + getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise; + // (undocumented) + protected getFormatByQuantityType(type: QuantityType, imperial: boolean): Promise; + getFormatterSpecByQuantityType(type: QuantityType, imperial?: boolean): Promise; + protected getKoqFormatterSpec(koq: string, useImperial: boolean): Promise; + protected getKoqFormatterSpecsAsync(koq: string, useImperial: boolean): Promise; + protected getUnitByQuantityType(type: QuantityType): Promise; + protected loadFormatSpecsForQuantityTypes(useImperial: boolean): Promise; + protected loadKoqFormatSpecs(koq: string): Promise; + // (undocumented) + protected loadStdFormat(type: QuantityType, imperial: boolean): Promise; + useImperialFormats: boolean; +} + +// @public +enum QuantityType { + // (undocumented) + Angle = 2, + // (undocumented) + Area = 3, + // (undocumented) + Coordinate = 6, + // (undocumented) + LatLong = 5, + // (undocumented) + Length = 1, + // (undocumented) + Volume = 4 +} + +// @public +interface RangeEditorParams extends BasePropertyEditorParams { + maximum?: number; + minimum?: number; + // (undocumented) + type: PropertyEditorParamTypes.Range; +} + +// @public +enum RelativePosition { + // (undocumented) + Bottom = 3, + // (undocumented) + BottomLeft = 6, + // (undocumented) + BottomRight = 7, + // (undocumented) + Left = 0, + // (undocumented) + Right = 2, + // (undocumented) + Top = 1, + // (undocumented) + TopLeft = 4, + // (undocumented) + TopRight = 5 +} + +// @public +enum RemoveMe { + // (undocumented) + No = 0, + // (undocumented) + Yes = 1 +} + +// @public +class RenderClipVolume implements IDisposable { + // (undocumented) + abstract dispose(): void; + readonly type: ClippingType; +} + +// @public +class RenderContext { + constructor(vp: Viewport); + // @internal (undocumented) + protected _createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder; + createBranch(branch: GraphicBranch, location: Transform, clip?: RenderClipVolume): RenderGraphic; + createSceneGraphicBuilder(transform?: Transform): GraphicBuilder; + readonly frustum: Frustum; + readonly frustumPlanes: FrustumPlanes; + getPixelSizeAtPoint(inPoint?: Point3d): number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly target: RenderTarget; + readonly viewFlags: ViewFlags; + readonly viewport: Viewport; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +enum RenderDiagnostics { + All = 6, + DebugOutput = 2, + None = 0, + WebGL = 4 +} + +// @public +class RenderGraphic implements IDisposable, RenderMemory.Consumer { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "RenderMemory.Statistics" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + abstract collectStatistics(stats: RenderMemory.Statistics): void; + // (undocumented) + abstract dispose(): void; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +module RenderMemory { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + class Buffers extends Consumers { + constructor(); + // WARNING: The type "BufferType" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addBuffer(type: BufferType, numBytes: number): void; + // (undocumented) + clear(): void; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly consumers: Consumers[]; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly instances: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly pointClouds: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly pointStrings: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly polylineEdges: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly polylines: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly silhouetteEdges: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly surfaces: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly visibleEdges: Consumers; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + enum BufferType { + // (undocumented) + COUNT = 8, + // (undocumented) + Instances = 7, + // (undocumented) + PointClouds = 6, + // (undocumented) + PointStrings = 5, + // (undocumented) + PolylineEdges = 3, + // (undocumented) + Polylines = 4, + // (undocumented) + SilhouetteEdges = 2, + // (undocumented) + Surfaces = 0, + // (undocumented) + VisibleEdges = 1 + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + interface Consumer { + // WARNING: The type "Statistics" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + collectStatistics(stats: Statistics): void; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + class Consumers { + // (undocumented) + addConsumer(numBytes: number): void; + // (undocumented) + clear(): void; + // (undocumented) + count: number; + // (undocumented) + maxBytes: number; + // (undocumented) + totalBytes: number; + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + enum ConsumerType { + // (undocumented) + ClipVolumes = 4, + // (undocumented) + COUNT = 5, + // (undocumented) + FeatureOverrides = 3, + // (undocumented) + FeatureTables = 2, + // (undocumented) + Textures = 0, + // (undocumented) + VertexTables = 1 + } + + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + class Statistics { + constructor(); + // WARNING: The type "BufferType" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addBuffer(type: BufferType, numBytes: number): void; + // (undocumented) + addClipVolume(numBytes: number): void; + // WARNING: The type "ConsumerType" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addConsumer(type: ConsumerType, numBytes: number): void; + // (undocumented) + addFeatureOverrides(numBytes: number): void; + // (undocumented) + addFeatureTable(numBytes: number): void; + // (undocumented) + addInstances(numBytes: number): void; + // (undocumented) + addPointCloud(numBytes: number): void; + // (undocumented) + addPointString(numBytes: number): void; + // (undocumented) + addPolyline(numBytes: number): void; + // (undocumented) + addPolylineEdges(numBytes: number): void; + // (undocumented) + addSilhouetteEdges(numBytes: number): void; + // (undocumented) + addSurface(numBytes: number): void; + // (undocumented) + addTexture(numBytes: number): void; + // (undocumented) + addVertexTable(numBytes: number): void; + // (undocumented) + addVisibleEdges(numBytes: number): void; + // WARNING: The type "Buffers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly buffers: Buffers; + // (undocumented) + clear(): void; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly clipVolumes: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly consumers: Consumers[]; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly featureOverrides: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly featureTables: Consumers; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly textures: Consumers; + // (undocumented) + readonly totalBytes: number; + // WARNING: The type "Consumers" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly vertexTables: Consumers; + } + +} + +// @public (undocumented) +class RenderPlan { + // (undocumented) + readonly aaLines: AntiAliasPref; + // (undocumented) + readonly aaText: AntiAliasPref; + // (undocumented) + readonly activeVolume?: RenderClipVolume; + // (undocumented) + readonly analysisStyle?: AnalysisStyle; + // (undocumented) + analysisTexture?: RenderTexture; + // (undocumented) + readonly ao?: AmbientOcclusion.Settings; + // (undocumented) + readonly bgColor: ColorDef; + // (undocumented) + static createFromViewport(vp: Viewport): RenderPlan; + // (undocumented) + readonly fraction: number; + // (undocumented) + readonly frustum: Frustum; + // (undocumented) + readonly hiliteSettings: Hilite.Settings; + // (undocumented) + readonly hline?: HiddenLine.Settings; + // (undocumented) + readonly is3d: boolean; + // (undocumented) + readonly isFadeOutActive: boolean; + // (undocumented) + readonly lights?: SceneLights; + // (undocumented) + readonly monoColor: ColorDef; + // (undocumented) + selectTerrainFrustum(): void; + // (undocumented) + selectViewFrustum(): void; + // (undocumented) + readonly terrainFrustum: ViewFrustum | undefined; + // (undocumented) + readonly viewFlags: ViewFlags; + // (undocumented) + readonly viewFrustum: ViewFrustum; +} + +// @public +class RenderSystem implements IDisposable { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + abstract createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d): RenderGraphic; + abstract createBranch(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume): RenderGraphic; + abstract createGraphicBuilder(placement: Transform, type: GraphicType, viewport: Viewport, pickableId?: Id64String): GraphicBuilder; + abstract createGraphicList(primitives: RenderGraphic[]): RenderGraphic; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "PolylineArgs" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + createIndexedPolylines(args: PolylineArgs, instances?: InstancedGraphicParams): RenderGraphic | undefined; + createMaterial(_params: RenderMaterial.Params, _imodel: IModelConnection): RenderMaterial | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "MeshParams" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + createMesh(_params: MeshParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + abstract createOffscreenTarget(rect: ViewRect): RenderTarget; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "PointCloudArgs" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "PointStringParams" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + createPointString(_params: PointStringParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "PolylineParams" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + createPolyline(_params: PolylineParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createSheetTile(_tile: RenderTexture, _polyfaces: IndexedPolyface[], _tileColor: ColorDef): GraphicList; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createSheetTilePolyfaces(_corners: Point3d[], _clip?: ClipVector): IndexedPolyface[]; + // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) + createSkyBox(_params: SkyBox.CreateParams): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + abstract createTarget(canvas: HTMLCanvasElement): RenderTarget; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + createTextureFromCubeImages(_posX: HTMLImageElement, _negX: HTMLImageElement, _posY: HTMLImageElement, _negY: HTMLImageElement, _posZ: HTMLImageElement, _negZ: HTMLImageElement, _imodel: IModelConnection, _params: RenderTexture.Params): RenderTexture | undefined; + createTextureFromImage(_image: HTMLImageElement, _hasAlpha: boolean, _imodel: IModelConnection | undefined, _params: RenderTexture.Params): RenderTexture | undefined; + createTextureFromImageBuffer(_image: ImageBuffer, _imodel: IModelConnection, _params: RenderTexture.Params): RenderTexture | undefined; + createTextureFromImageSource(source: ImageSource, imodel: IModelConnection | undefined, params: RenderTexture.Params): Promise; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createTile(tileTexture: RenderTexture, corners: Point3d[]): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "MeshArgs" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + createTriMesh(args: MeshArgs, instances?: InstancedGraphicParams): RenderGraphic | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + abstract dispose(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + enableDiagnostics(_enable: RenderDiagnostics): void; + findMaterial(_key: string, _imodel: IModelConnection): RenderMaterial | undefined; + findTexture(_key: string, _imodel: IModelConnection): RenderTexture | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getClipVolume(_clipVector: ClipVector, _imodel: IModelConnection): RenderClipVolume | undefined; + getGradientTexture(_symb: Gradient.Symb, _imodel: IModelConnection): RenderTexture | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isValid: boolean; + loadTexture(id: Id64String, iModel: IModelConnection): Promise; + loadTextureImage(id: Id64String, iModel: IModelConnection): Promise; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly maxTextureSize: number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + onInitialized(): void; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class RenderTarget implements IDisposable { + // (undocumented) + animationBranches: AnimationBranchStates | undefined; + // (undocumented) + animationFraction: number; + // (undocumented) + readonly cameraFrustumNearScaleLimit: number; + // (undocumented) + abstract changeDecorations(decorations: Decorations): void; + // (undocumented) + abstract changeDynamics(dynamics?: GraphicList): void; + // (undocumented) + abstract changeRenderPlan(plan: RenderPlan): void; + // (undocumented) + abstract changeScene(scene: GraphicList): void; + // (undocumented) + abstract changeTerrain(_scene: GraphicList): void; + // (undocumented) + createGraphicBuilder(type: GraphicType, viewport: Viewport, placement?: Transform, pickableId?: Id64String): GraphicBuilder; + static depthFromDisplayPriority(priority: number): number; + // (undocumented) + dispose(): void; + // (undocumented) + abstract drawFrame(sceneMilSecElapsed?: number): void; + // (undocumented) + static readonly frustumDepth2d: number; + // (undocumented) + static readonly maxDisplayPriority: number; + // (undocumented) + static readonly minDisplayPriority: number; + // (undocumented) + onResized(): void; + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + overrideFeatureSymbology(_ovr: FeatureSymbology.Overrides): void; + // (undocumented) + pickOverlayDecoration(_pt: XAndY): CanvasDecoration | undefined; + // (undocumented) + readImage(_rect: ViewRect, _targetSize: Point2d, _flipVertically: boolean): ImageBuffer | undefined; + // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + abstract readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void; + // (undocumented) + readonly renderSystem: RenderSystem; + // (undocumented) + reset(): void; + // (undocumented) + setFlashed(_elementId: Id64String, _intensity: number): void; + // (undocumented) + setHiliteSet(_hilited: Set): void; + // (undocumented) + abstract setViewRect(_rect: ViewRect, _temporary: boolean): void; + // (undocumented) + abstract updateViewRect(): boolean; + // (undocumented) + readonly viewRect: ViewRect; + // (undocumented) + readonly wantInvertBlackBackground: boolean; +} + +// @public +class RotateViewTool extends ViewManip { + constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// @public (undocumented) +enum RotationMode { + // (undocumented) + ACS = 5, + // (undocumented) + Context = 6, + // (undocumented) + Front = 2, + // (undocumented) + Side = 3, + // (undocumented) + Top = 1, + // (undocumented) + View = 4 +} + +// @public (undocumented) +class RoundOff { + // (undocumented) + active: boolean; + // (undocumented) + units: Set; +} + +// @public (undocumented) +class SavedState { + // (undocumented) + auxRotationPlane: number; + // (undocumented) + readonly axes: ThreeAxes; + // (undocumented) + contextRotMode: number; + // (undocumented) + fixedOrg: boolean; + // (undocumented) + ignoreDataButton: boolean; + // (undocumented) + ignoreFlags: AccuDrawFlags; + // (undocumented) + mode: CompassMode; + // (undocumented) + readonly origin: Point3d; + // (undocumented) + rotationMode: RotationMode; + // (undocumented) + state: CurrentState; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class SceneContext extends RenderContext { + constructor(vp: Viewport); + // (undocumented) + readonly backgroundGraphics: RenderGraphic[]; + // WARNING: The type "BackgroundMapState" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + backgroundMap?: BackgroundMapState; + // (undocumented) + readonly graphics: RenderGraphic[]; + // (undocumented) + hasMissingTiles: boolean; + // (undocumented) + insertMissingTile(tile: Tile): void; + // (undocumented) + readonly missingTiles: Set; + // (undocumented) + outputGraphic(graphic: RenderGraphic): void; + // (undocumented) + requestMissingTiles(): void; +} + +// @public +class ScreenViewport extends Viewport { + // @internal + constructor(canvas: HTMLCanvasElement, parentDiv: HTMLDivElement, target: RenderTarget); + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + addChildDiv(element: HTMLElement, zIndex: number): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + addDecorations(decorations: Decorations): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + addNewDiv(className: string, overflowHidden: boolean, z: number): HTMLDivElement; + readonly canvas: HTMLCanvasElement; + changeView(view: ViewState): void; + clearViewUndo(): void; + static create(parentDiv: HTMLDivElement, view: ViewState): ScreenViewport; + readonly decorationDiv: HTMLDivElement; + doRedo(animationTime?: BeDuration): void; + doUndo(animationTime?: BeDuration): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + drawLocateCursor(context: DecorateContext, pt: Point3d, aperture: number, isLocateCircleOn: boolean, hit?: HitDetail): void; + getClientRect(): ClientRect; + readonly isRedoPossible: boolean; + readonly isUndoPossible: boolean; + maxUndoSteps: number; + openToolTip(message: HTMLElement | string, location?: XAndY, options?: ToolTipOptions): void; + readonly parentDiv: HTMLDivElement; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + pickCanvasDecoration(pt: XAndY): import("./render/System").CanvasDecoration | undefined; + pickNearestVisibleGeometry(pickPoint: Point3d, radius: number, allowNonLocatable?: boolean, out?: Point3d): Point3d | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + static removeAllChildren(el: HTMLDivElement): void; + resetUndo(): void; + saveViewUndo(): void; + setCursor(cursor?: string): void; + setEventController(controller: EventController | undefined): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + synchWithView(saveInUndo: boolean): void; + readonly toolTipDiv: HTMLDivElement; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + viewCmdTargetCenter: Point3d | undefined; + readonly viewRect: ViewRect; +} + +// @public +class ScrollViewTool extends ViewManip { + constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// @public +class SectionDrawingModelState extends DrawingModelState { +} + +// @public +interface SelectedViewportChangedArgs { + // (undocumented) + current?: ScreenViewport; + // (undocumented) + previous?: ScreenViewport; +} + +// @public +enum SelectEventType { + // (undocumented) + Add = 0, + // (undocumented) + Clear = 3, + // (undocumented) + Remove = 1, + // (undocumented) + Replace = 2 +} + +// @public +enum SelectionMethod { + Box = 2, + Line = 1, + Pick = 0 +} + +// @public +enum SelectionMode { + Add = 1, + Remove = 2, + Replace = 0 +} + +// @public +enum SelectionProcessing { + AddElementToSelection = 0, + InvertElementInSelection = 2, + RemoveElementFromSelection = 1, + ReplaceSelectionWithElement = 3 +} + +// @public (undocumented) +enum SelectionScope { + Assembly = 1, + Element = 0 +} + +// @public +class SelectionSet { + constructor(iModel: IModelConnection); + add(elem: Id64Arg, sendEvent?: boolean): boolean; + addAndRemove(adds: Id64Arg, removes: Id64Arg): boolean; + readonly elements: Set; + emptyAll(): void; + has(elemId?: string): boolean; + // (undocumented) + iModel: IModelConnection; + invert(elem: Id64Arg): boolean; + readonly isActive: boolean; + isSelected(elemId?: Id64String): boolean; + readonly onChanged: BeEvent<(iModel: IModelConnection, evType: SelectEventType, ids?: Set | undefined) => void>; + remove(elem: Id64Arg, sendEvent?: boolean): boolean; + replace(elem: Id64Arg): void; + readonly size: number; +} + +// @public +class SelectionTool extends PrimitiveTool { + // (undocumented) + protected _selectionScopeValue: ToolSettingsValue; + applyToolSettingPropertyChange(updatedValue: ToolSettingsPropertySyncItem): boolean; + // (undocumented) + autoLockTarget(): void; + // (undocumented) + decorate(context: DecorateContext): void; + // (undocumented) + filterHit(hit: HitDetail, _out?: LocateResponse): Promise; + // (undocumented) + protected getSelectionMethod(): SelectionMethod; + // (undocumented) + protected getSelectionMode(): SelectionMode; + // (undocumented) + static hidden: boolean; + // (undocumented) + protected initSelectTool(): void; + // (undocumented) + isSelectByPoints: boolean; + // (undocumented) + isSuspended: boolean; + // (undocumented) + onCleanup(): void; + // (undocumented) + onDataButtonUp(ev: BeButtonEvent): Promise; + // (undocumented) + onModifierKeyTransition(_wentDown: boolean, modifier: BeModifierKeys, _event: KeyboardEvent): Promise; + // (undocumented) + onMouseEndDrag(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseMotion(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseStartDrag(ev: BeButtonEvent): Promise; + // (undocumented) + onPostInstall(): void; + // (undocumented) + onResetButtonUp(ev: BeButtonEvent): Promise; + // (undocumented) + onRestartTool(): void; + // (undocumented) + onSuspend(): void; + // (undocumented) + onTouchCancel(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchComplete(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMove(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; + // (undocumented) + onUnsuspend(): void; + // (undocumented) + readonly points: Point3d[]; + // (undocumented) + processSelection(elementId: Id64Arg, process: SelectionProcessing): Promise; + // (undocumented) + requireWriteableTarget(): boolean; + // (undocumented) + protected selectByPointsEnd(ev: BeButtonEvent): boolean; + // (undocumented) + protected selectByPointsProcess(origin: Point3d, corner: Point3d, ev: BeButtonEvent, method: SelectionMethod, overlap: boolean): void; + // (undocumented) + protected selectByPointsStart(ev: BeButtonEvent): boolean; + // (undocumented) + selectDecoration(ev: BeButtonEvent, currHit?: HitDetail): Promise; + // (undocumented) + selectionOption: SelectOptions; + // (undocumented) + selectionScope: SelectionScope; + // (undocumented) + protected setSelectionMethod(method: SelectionMethod): void; + // (undocumented) + protected setSelectionMode(mode: SelectionMode): void; + // (undocumented) + protected showPrompt(mode: SelectionMode, method: SelectionMethod): void; + // (undocumented) + static startTool(): boolean; + supplyToolSettingsProperties(): ToolSettingsPropertyRecord[] | undefined; + // (undocumented) + static toolId: string; + // (undocumented) + updateSelection(elementId: Id64Arg, process: SelectionProcessing): boolean; + // (undocumented) + protected useOverlapSelection(ev: BeButtonEvent): boolean; + // (undocumented) + protected wantEditManipulators(): boolean; + // (undocumented) + protected wantPickableDecorations(): boolean; + // (undocumented) + protected wantSelectionClearOnMiss(_ev: BeButtonEvent): boolean; + // (undocumented) + protected wantSelectionScopeInToolSettings(): boolean; + // (undocumented) + protected wantToolSettings(): boolean; +} + +// @public +enum SelectOptions { + // (undocumented) + BoxAndReplace = 2, + // (undocumented) + LineAndReplace = 1, + // (undocumented) + PickAndAdd = 3, + // (undocumented) + PickAndRemove = 4, + // (undocumented) + PickAndReplace = 0 +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class SheetBorder { + addToBuilder(builder: GraphicBuilder): void; + static create(width: number, height: number, context?: DecorateContext): SheetBorder; + // (undocumented) + getRange(): Range2d; +} + +// @public +class SheetModelState extends GeometricModel2dState { +} + +// @public +class SheetViewState extends ViewState2d { + constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, sheetProps: SheetProps, attachments: Id64Array); + // (undocumented) + static readonly className: string; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + computeFitRange(): Range3d; + // (undocumented) + static createFromProps(viewStateData: ViewStateProps, iModel: IModelConnection): ViewState | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + createScene(context: SceneContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + decorate(context: DecorateContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + getExtentLimits: { + max: number; + min: number; + } + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + load(): Promise; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + markAttachment3dSceneIncomplete(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + onRenderFrame(_viewport: Viewport): void; + readonly sheetSize: Point2d; +} + +// @public +class SkyBox { +} + +// @public +class SkyCube extends SkyBox, implements SkyCubeProps { + readonly back: Id64String; + readonly bottom: Id64String; + static create(front: Id64String, back: Id64String, top: Id64String, bottom: Id64String, right: Id64String, left: Id64String, display?: boolean): SkyCube | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + static fromJSON(skyboxJson: SkyBoxProps): SkyCube | undefined; + readonly front: Id64String; + readonly left: Id64String; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + loadParams(system: RenderSystem, iModel: IModelConnection): Promise; + readonly right: Id64String; + // (undocumented) + toJSON(): SkyBoxProps; + readonly top: Id64String; +} + +// @public +class SkyGradient extends SkyBox { + constructor(sky?: SkyBoxProps); + readonly groundColor: ColorDef; + readonly groundExponent: number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + loadParams(_system: RenderSystem, iModel: IModelConnection): Promise; + readonly nadirColor: ColorDef; + readonly skyColor: ColorDef; + readonly skyExponent: number; + // (undocumented) + toJSON(): SkyBoxProps; + readonly twoColor: boolean; + readonly zenithColor: ColorDef; +} + +// @public +class SkySphere extends SkyBox { + static fromJSON(json: SkyBoxProps): SkySphere | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "SkyBox.CreateParams" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + loadParams(system: RenderSystem, iModel: IModelConnection): Promise; + textureId: Id64String; + // (undocumented) + toJSON(): SkyBoxProps; +} + +// @public +interface SliderEditorParams extends BasePropertyEditorParams { + intervals?: boolean; + maximum: number; + minimum: number; + numButtons?: number; + // (undocumented) + type: PropertyEditorParamTypes.Slider; + valueFactor?: number; + vertical?: boolean; +} + +// @public +class SnapDetail extends HitDetail { + constructor(from: HitDetail, snapMode?: SnapMode, heat?: SnapHeat, snapPoint?: XYZProps); + readonly adjustedPoint: Point3d; + clone(): SnapDetail; + // (undocumented) + draw(context: DecorateContext): void; + geomType?: HitGeomType; + // (undocumented) + getCurvePrimitive(singleSegment?: boolean): CurvePrimitive | undefined; + getHitType(): HitDetailType; + getPoint(): Point3d; + // (undocumented) + heat: SnapHeat; + readonly isHot: boolean; + readonly isPointAdjusted: boolean; + normal?: Vector3d; + parentGeomType?: HitParentGeomType; + primitive?: CurvePrimitive; + setCurvePrimitive(primitive?: CurvePrimitive, localToWorld?: Transform, geomType?: HitGeomType): void; + setSnapPoint(point: Point3d, heat: SnapHeat): void; + // (undocumented) + snapMode: SnapMode; + readonly snapPoint: Point3d; + sprite?: Sprite; +} + +// @public (undocumented) +enum SnapHeat { + // (undocumented) + InRange = 2, + // (undocumented) + None = 0, + // (undocumented) + NotInRange = 1 +} + +// @public (undocumented) +enum SnapMode { + // (undocumented) + Bisector = 32, + // (undocumented) + Center = 8, + // (undocumented) + Intersection = 64, + // (undocumented) + MidPoint = 4, + // (undocumented) + Nearest = 1, + // (undocumented) + NearestKeypoint = 2, + // (undocumented) + Origin = 16 +} + +// @public (undocumented) +enum SnapStatus { + // (undocumented) + Aborted = 1, + // (undocumented) + Disabled = 100, + // (undocumented) + FilteredByApp = 600, + // (undocumented) + FilteredByAppQuietly = 700, + // (undocumented) + NoElements = 2, + // (undocumented) + NoSnapPossible = 200, + // (undocumented) + NotSnappable = 300, + // (undocumented) + Success = 0 +} + +// @public +class SpatialModelState extends GeometricModel3dState { +} + +// @public +class SpatialViewState extends ViewState3d { + constructor(props: SpatialViewDefinitionProps, iModel: IModelConnection, arg3: CategorySelectorState, displayStyle: DisplayStyle3dState, modelSelector: ModelSelectorState); + // (undocumented) + addViewedModel(id: Id64String): void; + // (undocumented) + static readonly className: string; + // (undocumented) + clearViewedModels(): void; + // (undocumented) + computeFitRange(): AxisAlignedBox3d; + // (undocumented) + createAuxCoordSystem(acsName: string): AuxCoordSystemState; + // (undocumented) + static createFromProps(props: ViewStateProps, iModel: IModelConnection): ViewState | undefined; + // (undocumented) + equals(other: this): boolean; + // (undocumented) + equalState(other: SpatialViewState): boolean; + // (undocumented) + forEachModel(func: (model: GeometricModelState) => void): void; + // (undocumented) + forEachTileTreeModel(func: (model: TileTreeModelState) => void): void; + // (undocumented) + getExtentLimits: { + max: number; + min: number; + } + // (undocumented) + getViewedExtents(): AxisAlignedBox3d; + // (undocumented) + load(): Promise; + // (undocumented) + modelSelector: ModelSelectorState; + // (undocumented) + removeViewedModel(id: Id64String): void; + // (undocumented) + toJSON(): SpatialViewDefinitionProps; + // (undocumented) + viewsModel(modelId: Id64String): boolean; +} + +// @public +class Sprite { + fromImageSource(src: ImageSource): void; + fromUrl(url: string): void; + image?: HTMLImageElement; + readonly isLoaded: boolean; + readonly offset: Point2d; + readonly size: Point2d; +} + +// @public +class SpriteLocation implements CanvasDecoration { + activate(sprite: Sprite, viewport: ScreenViewport, locationWorld: XYAndZ, alpha?: number): void; + deactivate(): void; + decorate(context: DecorateContext): void; + drawDecoration(ctx: CanvasRenderingContext2D): void; + // (undocumented) + readonly isActive: boolean; + readonly position: Point3d; +} + +// @public +class StandardView { + static adjustToStandardRotation(matrix: Matrix3d): void; + // (undocumented) + static readonly back: Matrix3d; + // (undocumented) + static readonly bottom: Matrix3d; + // (undocumented) + static readonly front: Matrix3d; + static getStandardRotation(id: StandardViewId): Matrix3d; + // (undocumented) + static readonly iso: Matrix3d; + // (undocumented) + static readonly left: Matrix3d; + // (undocumented) + static readonly right: Matrix3d; + // (undocumented) + static readonly rightIso: Matrix3d; + // (undocumented) + static readonly top: Matrix3d; +} + +// @public +enum StandardViewId { + // (undocumented) + Back = 5, + // (undocumented) + Bottom = 1, + // (undocumented) + Front = 4, + // (undocumented) + Iso = 6, + // (undocumented) + Left = 2, + NotStandard = -1, + // (undocumented) + Right = 3, + // (undocumented) + RightIso = 7, + // (undocumented) + Top = 0 +} + +// @public +class StandardViewTool extends ViewTool { + constructor(viewport: ScreenViewport, _standardViewId: StandardViewId); + // (undocumented) + onPostInstall(): void; + // (undocumented) + static toolId: string; +} + +// @public (undocumented) +enum StartOrResume { + // (undocumented) + Resume = 2, + // (undocumented) + Start = 1 +} + +// @public +interface StructValue extends BasePropertyValue { + // (undocumented) + members: { + [name: string]: PropertyRecord; + } + // (undocumented) + valueFormat: PropertyValueFormat.Struct; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class SubCategoriesRequest { + constructor(subcategories: ViewSubCategories, categoryIds: Set, imodel: IModelConnection); + // (undocumented) + cancel(): void; + // (undocumented) + dispatch(): Promise; +} + +// @public +interface SuppressLabelEditorParams extends BasePropertyEditorParams { + suppressLabelPlaceholder?: boolean; + // (undocumented) + type: PropertyEditorParamTypes.SuppressEditorLabel; +} + +// @public +interface SuppressUnitLabelEditorParams extends BasePropertyEditorParams { + // (undocumented) + type: PropertyEditorParamTypes.SuppressUnitLabel; +} + +// @public (undocumented) +class SuspendedToolState { + constructor(); + // (undocumented) + stop(): void; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class SyncFlags { + // (undocumented) + initFrom(other: SyncFlags): void; + // (undocumented) + invalidateAnimationFraction(): void; + // (undocumented) + invalidateController(): void; + // (undocumented) + invalidateDecorations(): void; + // (undocumented) + invalidateRedrawPending(): void; + // (undocumented) + invalidateRenderPlan(): void; + // (undocumented) + invalidateRotatePoint(): void; + // (undocumented) + invalidateScene(): void; + // (undocumented) + readonly isRedrawPending: boolean; + // (undocumented) + readonly isValidAnimationFraction: boolean; + // (undocumented) + readonly isValidController: boolean; + // (undocumented) + readonly isValidDecorations: boolean; + // (undocumented) + readonly isValidRenderPlan: boolean; + // (undocumented) + readonly isValidRotatePoint: boolean; + // (undocumented) + readonly isValidScene: boolean; + // (undocumented) + setRedrawPending(): void; + // (undocumented) + setValidAnimationFraction(): void; + // (undocumented) + setValidController(): void; + // (undocumented) + setValidDecorations(): void; + // (undocumented) + setValidRenderPlan(): void; + // (undocumented) + setValidRotatePoint(): void; + // (undocumented) + setValidScene(): void; +} + +// @public (undocumented) +class Target extends RenderTarget { + protected constructor(rect?: ViewRect); + // (undocumented) + protected abstract _assignDC(): boolean; + // (undocumented) + protected abstract _beginPaint(): void; + // (undocumented) + protected _dcAssigned: boolean; + // (undocumented) + protected _decorations?: Decorations; + // (undocumented) + protected abstract _endPaint(): void; + // WARNING: The type "FrameBuffer" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected _fbo?: FrameBuffer; + // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + addBatch(batch: Batch): void; + // (undocumented) + readonly ambientLight: Float32Array; + // (undocumented) + ambientOcclusionSettings: AmbientOcclusion.Settings; + // (undocumented) + analysisStyle?: AnalysisStyle; + // (undocumented) + analysisTexture?: RenderTexture; + // (undocumented) + animationBranches: AnimationBranchStates | undefined; + // WARNING: The type "BatchState" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly batchState: BatchState; + // (undocumented) + readonly bgColor: ColorDef; + // (undocumented) + readonly cameraFrustumNearScaleLimit: number; + // (undocumented) + changeDecorations(decs: Decorations): void; + // (undocumented) + changeDynamics(dynamics?: GraphicList): void; + // (undocumented) + changeFrustum(plan: RenderPlan): void; + // (undocumented) + changeRenderPlan(plan: RenderPlan): void; + // (undocumented) + changeScene(scene: GraphicList): void; + // (undocumented) + changeTerrain(terrain: GraphicList): void; + // WARNING: The type "ClipDef" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly clipDef: ClipDef; + // WARNING: The type "TextureHandle" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + clipMask: TextureHandle | undefined; + // (undocumented) + readonly clips: Clips; + // WARNING: The type "SceneCompositor" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly compositor: SceneCompositor; + // (undocumented) + readonly currentBatchId: number; + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly currentFeatureSymbologyOverrides: FeatureSymbology.Overrides; + // WARNING: The type "FeatureOverrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + currentOverrides: FeatureOverrides | undefined; + // WARNING: The type "ShaderFlags" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly currentShaderFlags: ShaderFlags; + // (undocumented) + readonly currentTransform: Transform; + // (undocumented) + readonly currentViewFlags: ViewFlags; + // (undocumented) + protected debugPaint(): void; + // WARNING: The type "BranchState" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly decorationState: BranchState; + // (undocumented) + dispose(): void; + // (undocumented) + drawFrame(sceneMilSecElapsed?: number): void; + // (undocumented) + readonly drawNonLocatable: boolean; + // (undocumented) + protected drawOverlayDecorations(): void; + // (undocumented) + readonly dynamics: GraphicList | undefined; + // WARNING: The type "ColorInfo" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly edgeColor: ColorInfo; + // (undocumented) + readonly flashedElemId: Id64String; + // (undocumented) + readonly flashedUpdateTime: BeTimePoint; + // (undocumented) + readonly flashIntensity: number; + // (undocumented) + readonly frustumUniforms: FrustumUniforms; + // (undocumented) + readonly fStop: number; + // WARNING: The type "ShaderProgramParams" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getEdgeLineCode(params: ShaderProgramParams, baseCode: number): number; + // WARNING: The type "RenderPass" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "EdgeOverrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getEdgeOverrides(pass: RenderPass): EdgeOverrides | undefined; + // WARNING: The type "ShaderProgramParams" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getEdgeWeight(params: ShaderProgramParams, baseWeight: number): number; + // WARNING: The type "Branch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + getWorldDecorations(decs: GraphicList): Branch; + // (undocumented) + readonly hasClipMask: boolean; + // (undocumented) + readonly hasClipVolume: boolean; + // WARNING: The type "EdgeOverrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly hiddenEdgeOverrides: EdgeOverrides | undefined; + // (undocumented) + readonly hilite: Id64.Uint32Set; + // (undocumented) + hiliteSettings: Hilite.Settings; + // (undocumented) + readonly hiliteUpdateTime: BeTimePoint; + // (undocumented) + readonly is2d: boolean; + // (undocumented) + readonly is3d: boolean; + // (undocumented) + readonly isEdgeColorOverridden: boolean; + // (undocumented) + readonly isEdgeWeightOverridden: boolean; + // (undocumented) + isFadeOutActive: boolean; + // (undocumented) + readonly isReadPixelsInProgress: boolean; + // (undocumented) + readonly monoColor: ColorDef; + // (undocumented) + readonly nearPlaneCenter: Point3d; + // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + onBatchDisposed(batch: Batch): void; + // WARNING: The type "FeatureSymbology.Overrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + overrideFeatureSymbology(ovr: FeatureSymbology.Overrides): void; + // (undocumented) + readonly overridesUpdateTime: BeTimePoint; + // (undocumented) + performanceMetrics?: PerformanceMetrics; + // (undocumented) + plan?: RenderPlan; + // (undocumented) + readonly planFraction: number; + // (undocumented) + readonly planFrustum: Frustum; + // (undocumented) + popActiveVolume(): void; + // (undocumented) + popBatch(): void; + // (undocumented) + popBranch(): void; + // (undocumented) + readonly projectionMatrix: Matrix4d; + // (undocumented) + pushActiveVolume(): void; + // WARNING: The type "Batch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + pushBatch(batch: Batch): void; + // WARNING: The type "ShaderProgramExecutor" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Branch" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + pushBranch(exec: ShaderProgramExecutor, branch: Branch): void; + // WARNING: The type "BranchState" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + pushState(state: BranchState): void; + // (undocumented) + readImage(wantRectIn: ViewRect, targetSizeIn: Point2d, flipVertically: boolean): ImageBuffer | undefined; + // (undocumented) + protected readImagePixels(out: Uint8Array, x: number, y: number, w: number, h: number): boolean; + // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void; + // (undocumented) + recordPerformanceMetric(operation: string): void; + // (undocumented) + readonly renderRect: ViewRect; + // (undocumented) + readonly renderSystem: RenderSystem; + // (undocumented) + reset(): void; + // (undocumented) + readonly scene: GraphicList; + // (undocumented) + setFlashed(id: Id64String, intensity: number): void; + // (undocumented) + setHiliteSet(hilite: Set): void; + // WARNING: The type "ShaderLights" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly shaderLights: ShaderLights | undefined; + // WARNING: The type "Techniques" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly techniques: Techniques; + // (undocumented) + readonly transparencyThreshold: number; + // (undocumented) + readonly viewMatrix: Transform; + // WARNING: The type "EdgeOverrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly visibleEdgeOverrides: EdgeOverrides | undefined; + // (undocumented) + readonly wantAmbientOcclusion: boolean; + // (undocumented) + readonly wantInvertBlackBackground: boolean; +} + +// @public (undocumented) +class TentativeOrAccuSnap { + // (undocumented) + static getCurrentPoint(): Point3d; + // (undocumented) + static getCurrentSnap(checkIsHot?: boolean): SnapDetail | undefined; + // (undocumented) + static getCurrentView(): ScreenViewport | undefined; + // (undocumented) + static readonly isHot: boolean; +} + +// @public (undocumented) +class TentativePoint { + // (undocumented) + clear(doErase: boolean): void; + // (undocumented) + currSnap?: SnapDetail; + // (undocumented) + decorate(context: DecorateContext): void; + getCurrSnap(): SnapDetail | undefined; + // (undocumented) + getHitAndList(holder: HitListHolder): SnapDetail | undefined; + // (undocumented) + getPoint(): Point3d; + // (undocumented) + isActive: boolean; + readonly isSnapped: boolean; + // (undocumented) + onButtonEvent(ev: BeButtonEvent): void; + // (undocumented) + onInitialized(): void; + // (undocumented) + process(ev: BeButtonEvent): Promise; + // (undocumented) + removeTentative(): void; + // (undocumented) + setCurrSnap(newSnap?: SnapDetail): void; + // (undocumented) + setHitList(list?: HitList): void; + // (undocumented) + setPoint(point: Point3d): void; + // (undocumented) + showTentative(): void; + // (undocumented) + tpHits?: HitList; + // (undocumented) + viewport?: ScreenViewport; +} + +// @public +interface TextureImage { + format: ImageSourceFormat | undefined; + image: HTMLImageElement | undefined; +} + +// @public (undocumented) +class ThreeAxes { + // (undocumented) + clone(): ThreeAxes; + // (undocumented) + static createFromMatrix3d(rMatrix: Matrix3d, result?: ThreeAxes): ThreeAxes; + // (undocumented) + equals(other: ThreeAxes): boolean; + // (undocumented) + fromMatrix3d(rMatrix: Matrix3d): void; + // (undocumented) + setFrom(other: ThreeAxes): void; + // (undocumented) + toMatrix3d(out?: Matrix3d): Matrix3d; + // (undocumented) + readonly x: Vector3d; + // (undocumented) + readonly y: Vector3d; + // (undocumented) + readonly z: Vector3d; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +class Tile { +} + +// @alpha (undocumented) +class TileAdmin { +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class TileLoader { + // (undocumented) + protected readonly _batchType: BatchType; + // (undocumented) + protected readonly _loadEdges: boolean; + // (undocumented) + adjustContentIdSizeMultiplier(contentId: string, _sizeMultipler: number): string; + compareTilePriorities(lhs: Tile, rhs: Tile): number; + // (undocumented) + abstract getChildrenProps(parent: Tile): Promise; + // WARNING: The type "TileRequest.ResponseData" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tile.Content" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + loadTileContent(tile: Tile, data: TileRequest.ResponseData, isCanceled?: () => boolean): Promise; + // WARNING: The type "TileIO.StreamBuffer" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Tile.Content" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + loadTileContentFromStream(tile: Tile, streamBuffer: TileIO.StreamBuffer, isCanceled?: () => boolean): Promise; + // (undocumented) + readonly maxDepth: number; + // (undocumented) + readonly parentsAndChildrenExclusive: boolean; + // WARNING: The type "Tile.LoadPriority" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + readonly priority: Tile.LoadPriority; + // WARNING: The type "Tile.DrawArgs" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + processSelectedTiles(selected: Tile[], _args: Tile.DrawArgs): Tile[]; + // WARNING: The type "TileRequest.Response" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + abstract requestTileContent(tile: Tile): Promise; + // WARNING: The type "Tile.Params" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + abstract tileRequiresLoading(params: Tile.Params): boolean; + // (undocumented) + readonly viewFlagOverrides: ViewFlag.Overrides; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class TileTree { +} + +// @beta +interface TileTreeModelState { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly loadStatus: TileTree.LoadStatus; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) + // @internal (undocumented) + loadTileTree(edgesRequired: boolean, animationId?: Id64String, asClassifier?: boolean, classifierExpansion?: number): TileTree.LoadStatus; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly tileTree: TileTree | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly treeModelId: Id64String; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal (undocumented) +class TileTreeState { + constructor(_iModel: IModelConnection, _is3d: boolean, _modelId: Id64String); + // (undocumented) + clearTileTree(): void; + // (undocumented) + edgesOmitted: boolean; + // (undocumented) + readonly iModel: IModelConnection; + // WARNING: The type "TileTree.LoadStatus" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + loadStatus: TileTree.LoadStatus; + // (undocumented) + setTileTree(props: TileTreeProps, loader: TileLoader): void; + // (undocumented) + tileTree?: TileTree; +} + +// @public +class Tool { + constructor(..._args: any[]); + static readonly description: string; + static readonly flyover: string; + static hidden: boolean; + static readonly keyin: string; + static namespace: I18NNamespace; + static register(namespace?: I18NNamespace): void; + run(..._arg: any[]): boolean; + static toolId: string; +} + +// @public +class ToolAdmin { + acsContextLock: boolean; + acsPlaneSnapLock: boolean; + readonly activeTool: InteractiveTool | undefined; + readonly activeToolChanged: BeEvent<(tool: Tool, start: StartOrResume) => void>; + addEvent(ev: Event, vp?: ScreenViewport): void; + // (undocumented) + adjustPoint(pointActive: Point3d, vp: ScreenViewport, projectToACS?: boolean, applyLocks?: boolean): void; + // (undocumented) + adjustPointToACS(pointActive: Point3d, vp: Viewport, perpendicular: boolean): void; + // (undocumented) + adjustPointToGrid(pointActive: Point3d, vp: Viewport): void; + // (undocumented) + adjustSnapPoint(perpendicular?: boolean): void; + assemblyLock: boolean; + // (undocumented) + beginDynamics(): void; + // (undocumented) + callOnCleanup(): void; + convertTouchEndToButtonUp(ev: BeTouchEvent, button?: BeButton): Promise; + convertTouchMoveStartToButtonDownAndMotion(startEv: BeTouchEvent, ev: BeTouchEvent, button?: BeButton): Promise; + convertTouchMoveToMotion(ev: BeTouchEvent): Promise; + convertTouchStartToButtonDown(ev: BeTouchEvent, button?: BeButton): Promise; + convertTouchTapToButtonDownAndUp(ev: BeTouchEvent, button?: BeButton): Promise; + // (undocumented) + readonly currentInputState: CurrentInputState; + readonly currentTool: InteractiveTool; + readonly cursorView: ScreenViewport | undefined; + // (undocumented) + decorate(context: DecorateContext): void; + defaultToolArgs: any[] | undefined; + defaultToolId: string; + doRedoOperation(): Promise; + doUndoOperation(): Promise; + // (undocumented) + endDynamics(): void; + // (undocumented) + exitInputCollector(): void; + // (undocumented) + exitViewTool(): void; + // (undocumented) + fillEventFromCursorLocation(ev: BeButtonEvent): void; + // (undocumented) + fillEventFromLastDataButton(ev: BeButtonEvent): void; + protected filterViewport(vp: Viewport): boolean; + // (undocumented) + getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined; + getToolTip(hit: HitDetail): Promise; + gridLock: boolean; + readonly idleTool: IdleTool; + // (undocumented) + readonly isLocateCircleOn: boolean; + readonly manipulatorToolEvent: BeEvent<(tool: Tool, event: ManipulatorToolEvent) => void>; + // (undocumented) + markupView?: ScreenViewport; + // (undocumented) + onInitialized(): void; + // (undocumented) + onInstallTool(tool: InteractiveTool): boolean; + // (undocumented) + onMouseLeave(vp: ScreenViewport): Promise; + // (undocumented) + onPostInstallTool(tool: InteractiveTool): void; + // (undocumented) + onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void; + // (undocumented) + onShutDown(): void; + // (undocumented) + readonly primitiveTool: PrimitiveTool | undefined; + processWheelEvent(ev: BeWheelEvent, doUpdate: boolean): Promise; + // (undocumented) + sendButtonEvent(ev: BeButtonEvent): Promise; + // (undocumented) + sendEndDragEvent(ev: BeButtonEvent): Promise; + // (undocumented) + setAdjustedDataPoint(ev: BeButtonEvent): void; + // (undocumented) + setCursor(cursor: string | undefined): void; + // (undocumented) + setIncompatibleViewportCursor(restore: boolean): void; + // (undocumented) + setInputCollector(newTool?: InputCollector): void; + // (undocumented) + setLocateCircleOn(locateOn: boolean): void; + // (undocumented) + setLocateCursor(enableLocate: boolean): void; + // (undocumented) + setPrimitiveTool(newTool?: PrimitiveTool): void; + // (undocumented) + setViewTool(newTool?: ViewTool): void; + startDefaultTool(): void; + // (undocumented) + startEventLoop(): void; + // (undocumented) + startInputCollector(newTool: InputCollector): void; + // (undocumented) + startPrimitiveTool(newTool?: PrimitiveTool): void; + // (undocumented) + startViewTool(newTool: ViewTool): void; + syncToolSettingsProperties(toolId: string, syncProperties: ToolSettingsPropertySyncItem[]): void; + // (undocumented) + testDecorationHit(id: string): boolean; + // (undocumented) + toolSettingsChangeHandler: ((toolId: string, syncProperties: ToolSettingsPropertySyncItem[]) => void) | undefined; + // (undocumented) + readonly toolState: ToolState; + // (undocumented) + updateDynamics(ev?: BeButtonEvent, useLastData?: boolean, adjustPoint?: boolean): void; + // (undocumented) + readonly viewTool: ViewTool | undefined; +} + +// @public +class ToolRegistry { + create(toolId: string, ...args: any[]): Tool | undefined; + executeExactMatch(keyin: string, ...args: any[]): boolean; + find(toolId: string): ToolType | undefined; + findExactMatch(keyin: string): ToolType | undefined; + findPartialMatches(keyin: string): FuzzySearchResults; + getToolList(): ToolList; + register(toolClass: ToolType, namespace?: I18NNamespace): void; + registerModule(moduleObj: any, namespace?: I18NNamespace): void; + run(toolId: string, ...args: any[]): boolean; + // (undocumented) + readonly tools: Map; + unRegister(toolId: string): void; +} + +// @public +class ToolSettings { + static animationTime: BeDuration; + static doubleClickTimeout: BeDuration; + static doubleClickToleranceInches: number; + static doubleTapTimeout: BeDuration; + static noMotionTimeout: BeDuration; + static preserveWorldUp: boolean; + static startDragDelay: BeDuration; + static startDragDistanceInches: number; + static touchMoveDelay: BeDuration; + static touchMoveDistanceInches: number; + static viewToolPickRadiusInches: number; + static walkCameraAngle: Angle; + static walkEnforceZUp: boolean; + static walkVelocity: number; + static wheelLineFactor: number; + static wheelPageFactor: number; + static wheelZoomBumpDistance: number; + static wheelZoomRatio: number; +} + +// @public +class ToolSettingsPropertyRecord extends PropertyRecord { + constructor(value: PropertyValue, property: PropertyDescription, editorPosition: EditorPosition, isReadonly?: boolean); + // (undocumented) + static clone(record: ToolSettingsPropertyRecord, newValue?: ToolSettingsValue): ToolSettingsPropertyRecord; + // (undocumented) + editorPosition: EditorPosition; +} + +// @public +class ToolSettingsPropertySyncItem { + constructor(value: ToolSettingsValue, propertyName: string, isDisabled?: boolean); + isDisabled?: boolean; + // (undocumented) + propertyName: string; + // (undocumented) + value: ToolSettingsValue; +} + +// WARNING: valueFormat has incomplete type information +// @public +class ToolSettingsValue implements PrimitiveValue { + constructor(value?: number | string | boolean | Date, displayValue?: string); + // (undocumented) + clone(): ToolSettingsValue; + // (undocumented) + displayValue?: string; + // (undocumented) + readonly hasDisplayValue: boolean; + // (undocumented) + readonly isNullValue: boolean; + // (undocumented) + update(newValue: ToolSettingsValue): boolean; + // (undocumented) + value?: number | string | boolean | Date; +} + +// @public (undocumented) +class ToolState { + // (undocumented) + clone(): ToolState; + // (undocumented) + coordLockOvr: CoordinateLockOverrides; + // (undocumented) + locateCircleOn: boolean; + // (undocumented) + setFrom(other: ToolState): void; +} + +// @public +interface ToolTipOptions { + // (undocumented) + duration?: BeDuration; + // (undocumented) + placement?: string; +} + +// @public +class TouchCursor implements CanvasDecoration { + protected constructor(vp: ScreenViewport); + // (undocumented) + protected _fillColor: string; + // (undocumented) + protected _inTouchTap: boolean; + // (undocumented) + protected _isDragging: boolean; + // (undocumented) + protected _offsetPosition: Point3d; + // (undocumented) + protected _outlineColor: string; + // (undocumented) + protected _size: number; + // (undocumented) + protected _yOffset: number; + // (undocumented) + static createFromTouchTap(ev: BeTouchEvent): TouchCursor | undefined; + // (undocumented) + doTouchEnd(ev: BeTouchEvent): void; + // (undocumented) + doTouchMove(ev: BeTouchEvent): boolean; + // (undocumented) + doTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean; + // (undocumented) + doTouchStart(ev: BeTouchEvent): void; + // (undocumented) + doTouchTap(ev: BeTouchEvent): Promise; + // (undocumented) + drawDecoration(ctx: CanvasRenderingContext2D): void; + // (undocumented) + protected getFillColor(isSelected: boolean): string; + // (undocumented) + isButtonHandled(ev: BeButtonEvent): boolean; + // (undocumented) + protected isSelected(pt: XAndY): boolean; + // (undocumented) + position: Point3d; + // (undocumented) + protected setPosition(vp: Viewport, worldLocation: Point3d): boolean; +} + +// @public +class TwoWayViewportSync { + connect(view1: Viewport, view2: Viewport): void; + disconnect(): void; +} + +// @public +class Unit implements UnitProps { + constructor(name: string, label: string, unitFamily: string); + // (undocumented) + isValid: boolean; + // (undocumented) + label: string; + // (undocumented) + name: string; + // (undocumented) + unitFamily: string; +} + +// @public +enum UsesDragSelect { + Box = 0, + Line = 1, + None = 2 +} + +// @public +enum UsesFence { + Check = 0, + None = 2, + Required = 1 +} + +// @public +enum UsesSelection { + Check = 0, + None = 2, + Required = 1 +} + +// @public +interface ViewChangeOptions { + animateFrustumChange?: boolean; + animationTime?: BeDuration; + marginPercent?: MarginPercent; + saveInUndo?: boolean; +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class ViewFrustum { + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + protected adjustAspectRatio(origin: Point3d, delta: Vector3d): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static createFromViewport(vp: Viewport, view?: ViewState): ViewFrustum | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static createFromViewportAndPlane(vp: Viewport, plane: Plane3dByOriginAndUnitNormal): ViewFrustum | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + fromView(from: XYZ, to?: XYZ): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + frustFraction: number; + getFrustum(sys?: CoordSystem, adjustedBox?: boolean, box?: Frustum): Frustum; + // (undocumented) + getPixelSizeAtPoint(inPoint?: Point3d): number; + // (undocumented) + getViewCorners(): Range3d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly invalidFrustum: boolean; + static nearScale24: number; + npcToView(pt: Point3d, out?: Point3d): Point3d; + npcToViewArray(pts: Point3d[]): void; + npcToWorld(pt: XYAndZ, out?: Point3d): Point3d; + npcToWorldArray(pts: Point3d[]): void; + readonly rotation: Matrix3d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + toView(from: XYZ, to?: XYZ): void; + view: ViewState; + view4dToWorld(input: Point4d, out?: Point3d): Point3d; + view4dToWorldArray(viewPts: Point4d[], worldPts: Point3d[]): void; + readonly viewDelta: Vector3d; + readonly viewDeltaUnexpanded: Vector3d; + readonly viewOrigin: Point3d; + readonly viewOriginUnexpanded: Point3d; + viewToNpc(pt: Point3d, out?: Point3d): Point3d; + viewToNpcArray(pts: Point3d[]): void; + viewToWorld(input: XYAndZ, out?: Point3d): Point3d; + viewToWorldArray(pts: Point3d[]): void; + worldToNpc(pt: XYAndZ, out?: Point3d): Point3d; + worldToNpcArray(pts: Point3d[]): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly worldToNpcMap: Map4d; + worldToView(input: XYAndZ, out?: Point3d): Point3d; + worldToView4d(input: XYAndZ, out?: Point4d): Point4d; + worldToView4dArray(worldPts: Point3d[], viewPts: Point4d[]): void; + worldToViewArray(pts: Point3d[]): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly worldToViewMap: Map4d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly zClipAdjusted: boolean; +} + +// @public (undocumented) +class ViewHandleArray { + constructor(viewTool: ViewManip); + // (undocumented) + add(handle: ViewingToolHandle): void; + // (undocumented) + readonly count: number; + // (undocumented) + drawHandles(context: DecorateContext): void; + // (undocumented) + empty(): void; + // (undocumented) + focus: number; + // (undocumented) + focusDrag: boolean; + // (undocumented) + readonly focusHandle: ViewingToolHandle | undefined; + // (undocumented) + focusHitHandle(): void; + // (undocumented) + getByIndex(index: number): ViewingToolHandle | undefined; + // (undocumented) + handles: ViewingToolHandle[]; + hasHandle(handleType: ViewHandleType): boolean; + // (undocumented) + readonly hitHandle: ViewingToolHandle | undefined; + // (undocumented) + hitHandleIndex: number; + // (undocumented) + motion(ev: BeButtonEvent): void; + // (undocumented) + onReinitialize(): void; + // (undocumented) + setFocus(index: number): void; + // (undocumented) + testHit(ptScreen: Point3d, forced?: ViewHandleType): boolean; + // (undocumented) + viewport?: Viewport; + // (undocumented) + viewTool: ViewManip; +} + +// @public (undocumented) +enum ViewHandleType { + // (undocumented) + Fly = 64, + // (undocumented) + Look = 128, + // (undocumented) + None = 0, + // (undocumented) + Pan = 4, + // (undocumented) + Rotate = 1, + // (undocumented) + Scroll = 8, + // (undocumented) + TargetCenter = 2, + // (undocumented) + Walk = 32, + // (undocumented) + Zoom = 16 +} + +// @public (undocumented) +enum ViewHandleWeight { + // (undocumented) + Bold = 3, + // (undocumented) + FatDot = 8, + // (undocumented) + Normal = 2, + // (undocumented) + Thin = 1, + // (undocumented) + VeryBold = 4 +} + +// @public (undocumented) +class ViewingToolHandle { + constructor(viewTool: ViewManip); + // (undocumented) + checkOneShot(): boolean; + // (undocumented) + abstract doManipulation(ev: BeButtonEvent, inDynamics: boolean): boolean; + // (undocumented) + drawHandle(_context: DecorateContext, _hasFocus: boolean): void; + // (undocumented) + abstract firstPoint(ev: BeButtonEvent): boolean; + // (undocumented) + focusIn(): void; + // (undocumented) + focusOut(): void; + // (undocumented) + getHandleCursor(): string; + // (undocumented) + readonly handleType: ViewHandleType; + // (undocumented) + motion(_ev: BeButtonEvent): boolean; + // (undocumented) + noMotion(_ev: BeButtonEvent): boolean; + // (undocumented) + onReinitialize(): void; + // (undocumented) + abstract testHandleForHit(ptScreen: Point3d, out: { + distance: number; + priority: ViewManipPriority; + }): boolean; + // (undocumented) + viewTool: ViewManip; +} + +// @public +class ViewManager { + addDecorator(decorator: Decorator): () => void; + addViewport(newVp: ScreenViewport): BentleyStatus; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + beginDynamicsMode(): void; + clearSelectedView(): void; + // (undocumented) + readonly crossHairCursor: string; + // (undocumented) + cursor: string; + // (undocumented) + readonly decorators: Decorator[]; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly doesHostHaveFocus: boolean; + dropDecorator(decorator: Decorator): void; + dropViewport(vp: ScreenViewport, disposeOfViewport?: boolean): BentleyStatus; + // (undocumented) + readonly dynamicsCursor: string; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + endDynamicsMode(): void; + forEachViewport(func: (vp: ScreenViewport) => void): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + getDecorationToolTip(hit: HitDetail): Promise; + getFirstOpenView(): ScreenViewport | undefined; + // (undocumented) + readonly grabbingCursor: string; + // (undocumented) + readonly grabCursor: string; + // (undocumented) + inDynamicsMode: boolean; + invalidateDecorationsAllViews(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + invalidateScenes(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + invalidateViewportScenes(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + notifySelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void; + readonly onBeginRender: BeEvent<() => void>; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise; + readonly onFinishRender: BeEvent<() => void>; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + onInitialized(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + onNewTilesReady(): void; + readonly onSelectedViewportChanged: BeUiEvent; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + onSelectionSetChanged(_iModel: IModelConnection): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + onShutDown(): void; + readonly onViewClose: BeUiEvent; + readonly onViewOpen: BeUiEvent; + readonly onViewResume: BeUiEvent; + readonly onViewSuspend: BeUiEvent; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + renderLoop(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly sceneInvalidated: boolean; + readonly selectedView: ScreenViewport | undefined; + setSelectedView(vp: ScreenViewport | undefined): BentleyStatus; + setViewCursor(cursor?: string): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + validateViewportScenes(): void; +} + +// @public +class ViewManip extends ViewTool { + constructor(viewport: ScreenViewport | undefined, handleMask: number, oneShot: boolean, isDraggingRequired?: boolean); + // (undocumented) + protected _forcedHandle: ViewHandleType; + // (undocumented) + protected static _useViewAlignedVolume: boolean; + // (undocumented) + changeViewport(vp?: ScreenViewport): void; + // (undocumented) + decorate(context: DecorateContext): void; + // (undocumented) + enforceZUp(pivotPoint: Point3d): boolean; + // (undocumented) + static fitView(viewport: ScreenViewport, doAnimate: boolean, marginPercent?: MarginPercent): void; + // (undocumented) + frustumValid: boolean; + // (undocumented) + static getFocusPlaneNpc(vp: Viewport): number; + // (undocumented) + handleMask: number; + // (undocumented) + inHandleModify: boolean; + // (undocumented) + isDragging: boolean; + // (undocumented) + isDraggingRequired: boolean; + isPointVisible(testPt: Point3d): boolean; + // (undocumented) + readonly isZUp: boolean; + // (undocumented) + lensAngleMatches(angle: Angle, tolerance: number): boolean; + // (undocumented) + nPts: number; + // (undocumented) + onCleanup(): void; + // (undocumented) + onDataButtonDown(ev: BeButtonEvent): Promise; + // (undocumented) + onDataButtonUp(_ev: BeButtonEvent): Promise; + // (undocumented) + oneShot: boolean; + // (undocumented) + onMouseEndDrag(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseMotion(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseMotionStopped(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseNoMotion(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseStartDrag(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseWheel(inputEv: BeWheelEvent): Promise; + // (undocumented) + onPostInstall(): void; + // (undocumented) + onReinitialize(): void; + // (undocumented) + onTouchCancel(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchComplete(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMove(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; + // (undocumented) + onTouchTap(ev: BeTouchEvent): Promise; + // (undocumented) + processFirstPoint(ev: BeButtonEvent): boolean; + // (undocumented) + processPoint(ev: BeButtonEvent, inDynamics: boolean): boolean; + // (undocumented) + setCameraLensAngle(lensAngle: Angle, retainEyePoint: boolean): ViewStatus; + setTargetCenterWorld(pt: Point3d, lockTarget: boolean, saveTarget: boolean): void; + // (undocumented) + startHandleDrag(ev: BeButtonEvent, forcedHandle?: ViewHandleType): Promise; + // (undocumented) + stoppedOverHandle: boolean; + // (undocumented) + targetCenterLocked: boolean; + // (undocumented) + targetCenterValid: boolean; + // (undocumented) + readonly targetCenterWorld: Point3d; + // (undocumented) + updateTargetCenter(): void; + // (undocumented) + viewHandles: ViewHandleArray; + // (undocumented) + static zoomToAlwaysDrawnExclusive(viewport: ScreenViewport, doAnimate: boolean, marginPercent?: MarginPercent): Promise; +} + +// @public (undocumented) +enum ViewManipPriority { + // (undocumented) + High = 1000, + // (undocumented) + Low = 1, + // (undocumented) + Medium = 100, + // (undocumented) + Normal = 10 +} + +// @public +class Viewport implements IDisposable { + // @internal + protected constructor(target: RenderTarget); + // @internal (undocumented) + protected readonly _viewRange: ViewRect; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + addDecorations(_decorations: Decorations): void; + readonly alwaysDrawn: Id64Set | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly analysisStyle: AnalysisStyle | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + animate(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + animateFrustumChange(start: Frustum, end: Frustum, animationTime?: BeDuration): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + animationFraction: number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + applyViewState(val: ViewState, animationTime?: BeDuration): void; + // (undocumented) + readonly auxCoordSystem: AuxCoordSystemState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly backgroundMapPlane: Plane3dByOriginAndUnitNormal | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + changeDynamics(dynamics: GraphicList | undefined): void; + changeView(view: ViewState): void; + clearAlwaysDrawn(): void; + clearNeverDrawn(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + computeViewRange(): Range3d; + continuousRendering: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createSceneContext(): SceneContext; + // WARNING: The type "Tile.DebugBoundingBoxes" needs to be exported by the package (e.g. added to index.ts) + debugBoundingBoxes: Tile.DebugBoundingBoxes; + determineVisibleDepthRange(rect?: ViewRect, result?: DepthRangeNpc): DepthRangeNpc | undefined; + // (undocumented) + dispose(): void; + featureOverrideProvider: FeatureOverrideProvider | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + flashDuration: number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + flashIntensity: number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + flashUpdateTime?: BeTimePoint; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + freezeScene: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + fromView(from: XYZ, to?: XYZ): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly frustFraction: number; + // (undocumented) + getAuxCoordOrigin(result?: Point3d): Point3d; + // (undocumented) + getAuxCoordRotation(result?: Matrix3d): Matrix3d; + getContrastToBackgroundColor(): ColorDef; + getFrustum(sys?: CoordSystem, adjustedBox?: boolean, box?: Frustum): Frustum; + // WARNING: The type "Pixel.Buffer" needs to be exported by the package (e.g. added to index.ts) + getPixelDataNpcPoint(pixels: Pixel.Buffer, x: number, y: number, out?: Point3d): Point3d | undefined; + // WARNING: The type "Pixel.Buffer" needs to be exported by the package (e.g. added to index.ts) + getPixelDataWorldPoint(pixels: Pixel.Buffer, x: number, y: number, out?: Point3d): Point3d | undefined; + getPixelSizeAtPoint(point?: Point3d): number; + getWorldFrustum(box?: Frustum): Frustum; + hilite: Hilite.Settings; + readonly iModel: IModelConnection; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + invalidateDecorations(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + invalidateRenderPlan(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + invalidateScene(): void; + readonly isAlwaysDrawnExclusive: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isAspectRatioLocked: boolean; + readonly isCameraOn: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isContextRotationRequired: boolean; + isFadeOutActive: boolean; + readonly isGridOn: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isPointAdjustmentRequired: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isSnapAdjustmentRequired: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + lastFlashedElem?: string; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + static nearScale24: number; + readonly neverDrawn: Id64Set | undefined; + npcToView(pt: Point3d, out?: Point3d): Point3d; + npcToViewArray(pts: Point3d[]): void; + npcToWorld(pt: XYAndZ, out?: Point3d): Point3d; + npcToWorldArray(pts: Point3d[]): void; + numReadyTiles: number; + readonly numRequestedTiles: number; + numSelectedTiles: number; + readonly onAlwaysDrawnChanged: BeEvent<(vp: Viewport) => void>; + readonly onNeverDrawnChanged: BeEvent<(vp: Viewport) => void>; + readonly onRender: BeEvent<(vp: Viewport) => void>; + readonly onViewChanged: BeEvent<(vp: Viewport) => void>; + pixelsFromInches(inches: number): number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly pixelsPerInch: number; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + pointToGrid(point: Point3d): void; + readImage(rect?: ViewRect, targetSize?: Point2d, flipVertically?: boolean): ImageBuffer | undefined; + // WARNING: The type "Pixel.Selector" needs to be exported by the package (e.g. added to index.ts) + // WARNING: The type "Pixel.Receiver" needs to be exported by the package (e.g. added to index.ts) + readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable?: boolean): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + removeAnimator(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + renderFrame(): boolean; + readonly rotation: Matrix3d; + scroll(screenDist: Point2d, options?: ViewChangeOptions): void; + setAlwaysDrawn(ids: Id64Set, exclusive?: boolean): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + setFlashed(id: string | undefined, duration: number): void; + setNeverDrawn(ids: Id64Set): void; + setStandardRotation(id: StandardViewId): void; + setupFromView(): ViewStatus; + setupViewFromFrustum(inFrustum: Frustum): boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly sync: SyncFlags; + synchWithView(_saveInUndo: boolean): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly target: RenderTarget; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + toView(from: XYZ, to?: XYZ): void; + turnCameraOn(lensAngle?: Angle): ViewStatus; + static undoDelay: BeDuration; + readonly view: ViewState; + view4dToWorld(input: Point4d, out?: Point3d): Point3d; + view4dToWorldArray(viewPts: Point4d[], worldPts: Point3d[]): void; + readonly viewDelta: Vector3d; + readonly viewFlags: ViewFlags; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly viewFrustum: ViewFrustum; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + readonly viewportId: number; + readonly viewRect: ViewRect; + viewToNpc(pt: Point3d, out?: Point3d): Point3d; + viewToNpcArray(pts: Point3d[]): void; + viewToWorld(input: XYAndZ, out?: Point3d): Point3d; + viewToWorldArray(pts: Point3d[]): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly wantAntiAliasLines: AntiAliasPref; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly wantAntiAliasText: AntiAliasPref; + worldToNpc(pt: XYAndZ, out?: Point3d): Point3d; + worldToNpcArray(pts: Point3d[]): void; + worldToView(input: XYAndZ, out?: Point3d): Point3d; + worldToView4d(input: XYAndZ, out?: Point4d): Point4d; + worldToView4dArray(worldPts: Point3d[], viewPts: Point4d[]): void; + worldToViewArray(pts: Point3d[]): void; + readonly worldToViewMap: Map4d; + zoom(newCenter: Point3d | undefined, factor: number, options?: ViewChangeOptions): void; + zoomToElementProps(elementProps: ElementProps[], options?: ViewChangeOptions & ZoomToOptions): void; + zoomToElements(ids: Id64Arg, options?: ViewChangeOptions & ZoomToOptions): Promise; + zoomToPlacementProps(placementProps: PlacementProps[], options?: ViewChangeOptions & ZoomToOptions): void; + zoomToVolume(volume: LowAndHighXYZ | LowAndHighXY, options?: ViewChangeOptions): void; +} + +// @public +interface ViewportAnimator { + animate(viewport: Viewport): RemoveMe; + onInterrupted(viewport: Viewport): void; +} + +// @public +class ViewRect { + constructor(left?: number, top?: number, right?: number, bottom?: number); + readonly area: number; + readonly aspect: number; + bottom: number; + clone(result?: ViewRect): ViewRect; + computeOverlap(other: ViewRect, out?: ViewRect): ViewRect | undefined; + containsPoint(point: XAndY): boolean; + equals(other: ViewRect): boolean; + // (undocumented) + extend(other: ViewRect): void; + height: number; + init(left: number, top: number, right: number, bottom: number): void; + initFromPoints(topLeft: XAndY, bottomRight: XAndY): void; + initFromRange(input: LowAndHighXY): void; + inset(deltaX: number, deltaY: number): void; + insetByPercent(percent: number): void; + insetUniform(offset: number): void; + isContained(other: ViewRect): boolean; + readonly isNull: boolean; + readonly isValid: boolean; + left: number; + overlaps(other: ViewRect): boolean; + right: number; + scaleAboutCenter(xScale: number, yScale: number): void; + setFrom(other: ViewRect): void; + top: number; + width: number; +} + +// @public +class ViewRedoTool extends ViewTool { + // (undocumented) + onPostInstall(): void; + // (undocumented) + static toolId: string; +} + +// @public +class ViewState extends ElementState { + // @internal + protected constructor(props: ViewDefinitionProps, iModel: IModelConnection, categorySelector: CategorySelectorState, displayStyle: DisplayStyleState); + // (undocumented) + protected _featureOverridesDirty: boolean; + // (undocumented) + protected _selectionSetDirty: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + protected adjustAspectRatio(windowAspect: number): void; + abstract allow3dManipulations(): boolean; + readonly analysisStyle: AnalysisStyle | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly areAllTileTreesLoaded: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly areFeatureOverridesDirty: boolean; + readonly auxiliaryCoordinateSystem: AuxCoordSystemState; + readonly backgroundColor: ColorDef; + calculateFrustum(result?: Frustum): Frustum | undefined; + // (undocumented) + categorySelector: CategorySelectorState; + changeCategoryDisplay(categories: Id64Arg, display: boolean, enableAllSubCategories?: boolean): void; + // (undocumented) + static readonly className: string; + abstract computeFitRange(): Range3d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + computeWorldToNpc: { + frustFraction: number; + map: Map4d | undefined; + } + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + abstract createAuxCoordSystem(acsName: string): AuxCoordSystemState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createClassification(context: SceneContext): void; + static createFromProps(_props: ViewStateProps, _iModel: IModelConnection): ViewState | undefined; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createScene(context: SceneContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + createTerrain(context: SceneContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + decorate(context: DecorateContext): void; + // (undocumented) + description?: string; + // (undocumented) + displayStyle: DisplayStyleState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + drawGrid(context: DecorateContext): void; + dropSubCategoryOverride(id: Id64String): void; + equals(other: this): boolean; + equalState(other: ViewState): boolean; + abstract forEachModel(func: (model: GeometricModelState) => void): void; + forEachTileTreeModel(func: (model: TileTreeModelState) => void): void; + getAspectRatio(): number; + getAspectRatioSkew(): number; + getAuxiliaryCoordinateSystemId(): Id64String; + getCenter(result?: Point3d): Point3d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + getDetail(name: string): any; + // (undocumented) + getDetails(): any; + getExtentLimits: { + max: number; + min: number; + } + abstract getExtents(): Vector3d; + getGridOrientation(): GridOrientationType; + getGridSettings(vp: Viewport, origin: Point3d, rMatrix: Matrix3d, orientation: GridOrientationType): void; + // (undocumented) + getGridSpacing(): XAndY; + // (undocumented) + getGridsPerRef(): number; + abstract getOrigin(): Point3d; + abstract getRotation(): Matrix3d; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static getStandardViewMatrix(id: StandardViewId): Matrix3d; + getSubCategoryAppearance(id: Id64String): SubCategoryAppearance; + getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined; + getTargetPoint(result?: Point3d): Point3d; + getViewClip(): ClipVector | undefined; + abstract getViewedExtents(): AxisAlignedBox3d; + getXVector(result?: Vector3d): Vector3d; + getYVector(result?: Vector3d): Vector3d; + getZVector(result?: Vector3d): Vector3d; + // (undocumented) + is3d(): this is ViewState3d; + // (undocumented) + isPrivate?: boolean; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + readonly isSelectionSetDirty: boolean; + // (undocumented) + isSpatialView(): this is SpatialViewState; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + isSubCategoryVisible(id: Id64String): boolean; + load(): Promise; + lookAtViewAlignedVolume(volume: Range3d, aspect?: number, margin?: MarginPercent): void; + lookAtVolume(volume: LowAndHighXYZ | LowAndHighXY, aspect?: number, margin?: MarginPercent): void; + readonly name: string; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + abstract onRenderFrame(_viewport: Viewport): void; + overrideSubCategory(id: Id64String, ovr: SubCategoryOverride): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + peekDetail(name: string): any; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + removeDetail(name: string): void; + // WARNING: The type "RenderScheduleState.Script" needs to be exported by the package (e.g. added to index.ts) + readonly scheduleScript: RenderScheduleState.Script | undefined; + // (undocumented) + scheduleTime: number; + setAspectRatioSkew(val: number): void; + setAuxiliaryCoordinateSystem(acs?: AuxCoordSystemState): void; + setCategorySelector(categories: CategorySelectorState): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + setDetail(name: string, value: any): void; + // (undocumented) + setDisplayStyle(style: DisplayStyleState): void; + abstract setExtents(viewDelta: Vector3d): void; + setFeatureOverridesDirty(dirty?: boolean): void; + setGridSettings(orientation: GridOrientationType, spacing: Point2d, gridsPerRef: number): void; + abstract setOrigin(viewOrg: Point3d): void; + abstract setRotation(viewRot: Matrix3d): void; + setRotationAboutPoint(rotation: Matrix3d, point?: Point3d): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + setSelectionSetDirty(dirty?: boolean): void; + setStandardRotation(id: StandardViewId): void; + setupFromFrustum(inFrustum: Frustum): ViewStatus; + setViewClip(clip?: ClipVector): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + showFrustumErrorMessage(status: ViewStatus): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal + readonly subCategories: ViewSubCategories; + // (undocumented) + toJSON(): ViewDefinitionProps; + undoTime?: BeTimePoint; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + validateViewDelta(delta: Vector3d, messageNeeded?: boolean): ViewStatus; + viewFlags: ViewFlags; + viewsCategory(id: Id64String): boolean; + abstract viewsModel(modelId: Id64String): boolean; +} + +// @public +class ViewState2d extends ViewState { + constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState); + // (undocumented) + allow3dManipulations(): boolean; + // (undocumented) + readonly angle: Angle; + // (undocumented) + readonly baseModelId: Id64String; + // (undocumented) + static readonly className: string; + // (undocumented) + computeFitRange(): Range3d; + // (undocumented) + createAuxCoordSystem(acsName: string): AuxCoordSystemState; + // (undocumented) + readonly delta: Point2d; + // (undocumented) + equalState(other: ViewState2d): boolean; + // (undocumented) + forEachModel(func: (model: GeometricModelState) => void): void; + // (undocumented) + getExtents(): Vector3d; + // (undocumented) + getOrigin(): Point3d; + // (undocumented) + getRotation(): Matrix3d; + // (undocumented) + getViewedExtents(): AxisAlignedBox3d; + getViewedModel(): GeometricModel2dState | undefined; + // (undocumented) + load(): Promise; + // (undocumented) + onRenderFrame(_viewport: Viewport): void; + // (undocumented) + readonly origin: Point2d; + // (undocumented) + setExtents(delta: Vector3d): void; + // (undocumented) + setOrigin(origin: Point3d): void; + // (undocumented) + setRotation(rot: Matrix3d): void; + // (undocumented) + toJSON(): ViewDefinition2dProps; + // (undocumented) + viewsModel(modelId: Id64String): boolean; +} + +// @public +class ViewState3d extends ViewState { + constructor(props: ViewDefinition3dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle3dState); + protected _cameraOn: boolean; + // (undocumented) + allow3dManipulations(): boolean; + calcLensAngle(): Angle; + // (undocumented) + protected static calculateMaxDepth(delta: Vector3d, zVec: Vector3d): number; + readonly camera: Camera; + centerEyePoint(backDistance?: number): void; + centerFocusDistance(): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + static readonly className: string; + // (undocumented) + createAuxCoordSystem(acsName: string): AuxCoordSystemState; + // (undocumented) + decorate(context: DecorateContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + protected drawGroundPlane(context: DecorateContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + protected drawSkyBox(context: DecorateContext): void; + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) + protected enableCamera(): void; + // (undocumented) + equalState(other: ViewState3d): boolean; + readonly extents: Vector3d; + forceMinFrontDist: number; + getBackDistance(): number; + // (undocumented) + getDisplayStyle3d(): DisplayStyle3dState; + // (undocumented) + getExtents(): Vector3d; + getEyePoint(): Point3d; + getFocusDistance(): number; + getFrontDistance(): number; + getGroundElevation(): number; + getGroundExtents(vp?: Viewport): AxisAlignedBox3d; + getLensAngle(): Angle; + // (undocumented) + getOrigin(): Point3d; + // (undocumented) + getRotation(): Matrix3d; + getTargetPoint(result?: Point3d): Point3d; + // (undocumented) + readonly isCameraOn: boolean; + readonly isCameraValid: boolean; + // (undocumented) + isEyePointAbove(elevation: number): boolean; + lookAt(eyePoint: XYAndZ, targetPoint: XYAndZ, upVector: Vector3d, newExtents?: XAndY, frontDistance?: number, backDistance?: number): ViewStatus; + lookAtUsingLensAngle(eyePoint: Point3d, targetPoint: Point3d, upVector: Vector3d, fov: Angle, frontDistance?: number, backDistance?: number): ViewStatus; + // (undocumented) + minimumFrontDistance(): number; + moveCameraLocal(distance: Vector3d): ViewStatus; + moveCameraWorld(distance: Vector3d): ViewStatus; + // (undocumented) + onRenderFrame(_viewport: Viewport): void; + readonly origin: Point3d; + rotateCameraLocal(angle: Angle, axis: Vector3d, aboutPt?: Point3d): ViewStatus; + rotateCameraWorld(angle: Angle, axis: Vector3d, aboutPt?: Point3d): ViewStatus; + readonly rotation: Matrix3d; + // (undocumented) + setExtents(extents: XYAndZ): void; + setEyePoint(pt: XYAndZ): void; + setFocusDistance(dist: number): void; + setLensAngle(angle: Angle): void; + // (undocumented) + setOrigin(origin: XYAndZ): void; + // (undocumented) + setRotation(rot: Matrix3d): void; + // (undocumented) + setupFromFrustum(frustum: Frustum): ViewStatus; + // (undocumented) + supportsCamera(): boolean; + // (undocumented) + toJSON(): ViewDefinition3dProps; + turnCameraOff(): void; + verifyFocusPlane(): void; +} + +// @public +enum ViewStatus { + // (undocumented) + AlreadyAttached = 2, + // (undocumented) + DrawFailure = 4, + // (undocumented) + InvalidLens = 14, + // (undocumented) + InvalidTargetPoint = 13, + // (undocumented) + InvalidUpVector = 12, + // (undocumented) + InvalidViewport = 15, + // (undocumented) + InvalidWindow = 7, + // (undocumented) + MaxDisplayDepth = 11, + // (undocumented) + MaxWindow = 9, + // (undocumented) + MaxZoom = 10, + // (undocumented) + MinWindow = 8, + // (undocumented) + ModelNotFound = 6, + // (undocumented) + NotAttached = 3, + // (undocumented) + NotResized = 5, + // (undocumented) + Success = 0, + // (undocumented) + ViewNotInitialized = 1 +} + +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class ViewSubCategories { + getSubCategories(categoryId: string): Id64Set | undefined; + getSubCategoryAppearance(subCategoryId: Id64String): SubCategoryAppearance | undefined; + load(categoryIds: Set, iModel: IModelConnection): Promise; + // (undocumented) + loadFromRows(rows: any[]): void; + update(addedCategoryIds: Set, iModel: IModelConnection): Promise; +} + +// @public +class ViewToggleCameraTool extends ViewTool { + // (undocumented) + onInstall(): boolean; + // (undocumented) + onPostInstall(): void; + // (undocumented) + static toolId: string; +} + +// @public +class ViewTool extends InteractiveTool { + constructor(viewport?: ScreenViewport | undefined); + // (undocumented) + beginDynamicUpdate(): void; + // (undocumented) + endDynamicUpdate(): void; + exitTool(): void; + // (undocumented) + inDynamicUpdate: boolean; + // (undocumented) + onResetButtonUp(_ev: BeButtonEvent): Promise; + // (undocumented) + run(): boolean; + // (undocumented) + static showPrompt(prompt: string): void; + // (undocumented) + viewport?: ScreenViewport | undefined; +} + +// @public +class ViewUndoTool extends ViewTool { + // (undocumented) + onPostInstall(): void; + // (undocumented) + static toolId: string; +} + +// @public +class WalkViewTool extends ViewManip { + constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// @public +class WheelEventProcessor { + // (undocumented) + static process(ev: BeWheelEvent, doUpdate: boolean): Promise; +} + +// @public +class WindowAreaTool extends ViewTool { + // (undocumented) + decorate(context: DecorateContext): void; + // (undocumented) + onDataButtonDown(ev: BeButtonEvent): Promise; + // (undocumented) + onMouseMotion(ev: BeButtonEvent): Promise; + // (undocumented) + onPostInstall(): void; + // (undocumented) + onReinitialize(): void; + // (undocumented) + onResetButtonUp(ev: BeButtonEvent): Promise; + // (undocumented) + onTouchCancel(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchComplete(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMove(ev: BeTouchEvent): Promise; + // (undocumented) + onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise; + // (undocumented) + onTouchTap(ev: BeTouchEvent): Promise; + // (undocumented) + static toolId: string; +} + +// @public +interface ZoomToOptions { + placementRelativeId?: StandardViewId; + standardViewId?: StandardViewId; + viewRotation?: Matrix3d; +} + +// @public +class ZoomViewTool extends ViewManip { + constructor(vp: ScreenViewport, oneShot?: boolean, isDraggingRequired?: boolean); + // (undocumented) + onReinitialize(): void; + // (undocumented) + static toolId: string; +} + +// WARNING: Unsupported export: ToolType +// WARNING: Unsupported export: ToolList +// WARNING: Unsupported export: MarkerImage +// WARNING: Unsupported export: MarkerFillStyle +// WARNING: Unsupported export: MarkerTextAlign +// WARNING: Unsupported export: MarkerTextBaseline +// WARNING: Unsupported export: GraphicList +// WARNING: Unsupported export: CanvasDecorationList +// WARNING: Unsupported export: AnimationBranchStates +// WARNING: Unsupported export: PropertyEditorParams +// WARNING: Unsupported export: PropertyValue +// (No @packagedocumentation comment for this package) diff --git a/common/api/imodeljs-i18n.api.ts b/common/api/imodeljs-i18n.api.ts index 264d162..abbf2ff 100644 --- a/common/api/imodeljs-i18n.api.ts +++ b/common/api/imodeljs-i18n.api.ts @@ -1,21 +1,28 @@ // @public class I18N { + // @internal constructor(nameSpaces: string[], defaultNameSpace: string, options?: I18NOptions, renderFunction?: i18next.Callback); - // (undocumented) + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) languageList(): string[]; - // (undocumented) + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) loadNamespace(name: string, i18nCallback: any): void; - // (undocumented) + // @public registerNamespace(name: string): I18NNamespace; + // @public translate(key: string | string[], options?: i18next.TranslationOptions): any; + // @public translateKeys(line: string): string; - // (undocumented) + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal (undocumented) unregisterNamespace(name: string): void; - // (undocumented) + // WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name + // @internal waitForAllRead(): Promise; } -// @public (undocumented) +// @public class I18NNamespace { constructor(name: string, readFinished: Promise); // (undocumented) diff --git a/common/api/imodeljs-quantity.api.ts b/common/api/imodeljs-quantity.api.ts index a86f5da..34e8020 100644 --- a/common/api/imodeljs-quantity.api.ts +++ b/common/api/imodeljs-quantity.api.ts @@ -261,6 +261,29 @@ class Quantity implements QuantityProps { readonly unit: UnitProps; } +// WARNING: CHAR_COMMA has incomplete type information +// WARNING: CHAR_SPACE has incomplete type information +// WARNING: CHAR_NUMBER has incomplete type information +// WARNING: CHAR_PLUS has incomplete type information +// WARNING: CHAR_MINUS has incomplete type information +// WARNING: CHAR_PERIOD has incomplete type information +// WARNING: CHAR_SLASH has incomplete type information +// WARNING: CHAR_DIVISION_SLASH has incomplete type information +// WARNING: CHAR_FRACTION_SLASH has incomplete type information +// WARNING: CHAR_ONE_QUARTER has incomplete type information +// WARNING: CHAR_ONE_HALF has incomplete type information +// WARNING: CHAR_THREE_QUARTER has incomplete type information +// WARNING: CHAR_DIGIT_ZERO has incomplete type information +// WARNING: CHAR_DIGIT_NINE has incomplete type information +// WARNING: CHAR_UPPER_E has incomplete type information +// WARNING: CHAR_LOWER_E has incomplete type information +// WARNING: Because this definition is explicitly marked as @internal, an underscore prefix ("_") should be added to its name +// @internal +class QuantityConstants { + static readonly LocaleSpecificDecimalSeparator: string; + static readonly LocaleSpecificThousandSeparator: string; +} + // @alpha class QuantityError extends BentleyError { constructor(errorNumber: number, message?: string); diff --git a/common/api/presentation-common.api.ts b/common/api/presentation-common.api.ts index a2799ad..27ba1c3 100644 --- a/common/api/presentation-common.api.ts +++ b/common/api/presentation-common.api.ts @@ -1,1355 +1,1378 @@ -// @public -interface AllInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { - specType: RuleSpecificationTypes.AllInstanceNodes; - supportedSchemas?: SchemasSpecification; -} - -// @public -interface AllRelatedInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { - requiredDirection?: RelationshipDirection; - skipRelatedLevel?: number; - specType: RuleSpecificationTypes.AllRelatedInstanceNodes; - supportedSchemas?: SchemasSpecification; -} - -// @public -interface ArrayTypeDescription extends BaseTypeDescription { - // (undocumented) - memberType: TypeDescription; - // (undocumented) - valueFormat: PropertyValueFormat.Array; -} - -// @public -interface BaseFieldJSON { - // (undocumented) - category: CategoryDescription; - // (undocumented) - editor?: EditorDescription; - // (undocumented) - isReadonly: boolean; - // (undocumented) - label: string; - // (undocumented) - name: string; - // (undocumented) - priority: number; - // (undocumented) - type: TypeDescription; -} - -// @public -interface BaseNodeKey { - pathFromRoot: string[]; - // (undocumented) - type: string; -} - -// @public -interface CalculatedPropertiesSpecification { - label: string; - priority?: number; - value: string; -} - -// @public -interface CategoryDescription { - description: string; - expand: boolean; - label: string; - name: string; - priority: number; -} - -// @public -interface CheckBoxRule extends RuleBase, ConditionContainer { - condition?: string; - defaultValue?: boolean; - isEnabled?: string | boolean; - propertyName?: string; - ruleType: RuleTypes.CheckBox; - useInversedPropertyValue?: boolean; -} - -// @public -interface ChildNodeRule extends NavigationRuleBase, ConditionContainer { - condition?: string; - ruleType: RuleTypes.ChildNodes; -} - -// @public -interface ClassGroup extends GroupingSpecificationBase { - baseClass?: SingleSchemaClassSpecification; - createGroupForSingleItem?: boolean; - specType: GroupingSpecificationTypes.Class; -} - -// @public -interface ClassInfo { - // (undocumented) - id: ClassId; - // (undocumented) - label: string; - // (undocumented) - name: string; -} - -// @public -interface ClassInfoJSON { - // (undocumented) - id: string; - // (undocumented) - label: string; - // (undocumented) - name: string; -} - -// @public -class Content { - contentSet: Array>; - descriptor: Readonly; - static fromJSON(json: ContentJSON | string | undefined): Content | undefined; - static reviver(key: string, value: any): any; -} - -// @public -enum ContentFlags { - DistinctValues = 16, - KeysOnly = 1, - MergeResults = 8, - NoFields = 32, - ShowImages = 2, - ShowLabels = 4 -} - -// @public -interface ContentInstancesOfSpecificClassesSpecification extends ContentSpecificationBase { - arePolymorphic?: boolean; - classes: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - instanceFilter?: string; - specType: RuleSpecificationTypes.ContentInstancesOfSpecificClasses; -} - -// @public -interface ContentJSON { - // (undocumented) - contentSet: ItemJSON[]; - // (undocumented) - descriptor: DescriptorJSON; -} - -// @public -interface ContentModifier extends RuleBase { - calculatedProperties?: CalculatedPropertiesSpecification[]; - class?: SingleSchemaClassSpecification; - propertiesDisplay?: PropertiesDisplaySpecification[]; - propertyEditors?: PropertyEditorsSpecification[]; - relatedProperties?: RelatedPropertiesSpecification[]; - ruleType: RuleTypes.ContentModifier; -} - -// @public -interface ContentRelatedInstancesSpecification extends ContentSpecificationBase { - instanceFilter?: string; - isRecursive?: boolean; - relatedClasses?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - relationships?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - requiredDirection?: RelationshipDirection; - skipRelatedLevel?: number; - specType: RuleSpecificationTypes.ContentRelatedInstances; -} - -// @public -interface ContentRequestOptions extends RequestOptions { -} - -// @public -interface ContentRule extends RuleBase, ConditionContainer { - condition?: string; - ruleType: RuleTypes.Content; - specifications: ContentSpecification[]; -} - -// @public -interface CustomNodeSpecification extends ChildNodeSpecificationBase { - description?: string; - imageId?: string; - label: string; - specType: RuleSpecificationTypes.CustomNode; - type: string; -} - -// @public -interface CustomQueryInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { - queries?: QuerySpecification[]; - specType: RuleSpecificationTypes.CustomQueryInstanceNodes; -} - -// WARNING: UNDEFINED has incomplete type information -// WARNING: GRID has incomplete type information -// WARNING: PROPERTY_PANE has incomplete type information -// WARNING: LIST has incomplete type information -// WARNING: VIEWPORT has incomplete type information -// @public -class DefaultContentDisplayTypes { -} - -// @public -class Descriptor { - connectionId: string; - contentFlags: number; - contentOptions: any; - // WARNING: The type "DescriptorOverrides" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - createDescriptorOverrides(): DescriptorOverrides; - // (undocumented) - createStrippedDescriptor(): Descriptor; - displayType: string; - fields: Field[]; - filterExpression?: string; - static fromJSON(json: DescriptorJSON | string | undefined): Descriptor | undefined; - getFieldByName(name: string, recurse?: boolean): Field | undefined; - inputKeysHash: string; - // (undocumented) - rebuildParentship(): void; - // (undocumented) - resetParentship(): void; - static reviver(key: string, value: any): any; - selectClasses: SelectClassInfo[]; - selectionInfo?: SelectionInfo; - sortDirection?: SortDirection; - sortingField?: Field; -} - -// @public -interface DescriptorJSON { - // (undocumented) - connectionId: string; - // (undocumented) - contentFlags: number; - // (undocumented) - contentOptions: any; - // (undocumented) - displayType: string; - // (undocumented) - fields: FieldJSON[]; - // (undocumented) - filterExpression?: string; - // (undocumented) - inputKeysHash: string; - // (undocumented) - selectClasses: SelectClassInfoJSON[]; - // (undocumented) - selectionInfo?: SelectionInfo; - // (undocumented) - sortDirection?: SortDirection; - // (undocumented) - sortingFieldName?: string; -} - -// @public (undocumented) -export function displayValueFromJSON(json: DisplayValueJSON): DisplayValue; - -// @public (undocumented) -interface DisplayValuesArray extends Array { -} - -// @public (undocumented) -export function displayValuesArrayFromJSON(json: DisplayValuesArrayJSON): DisplayValuesArray; - -// @public (undocumented) -interface DisplayValuesArrayJSON extends Array { -} - -// @public (undocumented) -interface DisplayValuesMap extends ValuesDictionary { -} - -// @public (undocumented) -export function displayValuesMapFromJSON(json: DisplayValuesMapJSON): DisplayValuesMap; - -// @public (undocumented) -interface DisplayValuesMapJSON extends ValuesDictionary { -} - -// @public -interface ECClassGroupingNodeKey extends GroupingNodeKey { - className: string; - // (undocumented) - type: StandardNodeTypes.ECClassGroupingNode; -} - -// @public -interface ECInstanceNodeKey extends BaseNodeKey { - instanceKey: InstanceKey; - // (undocumented) - type: StandardNodeTypes.ECInstanceNode; -} - -// @public -interface ECInstanceNodeKeyJSON extends BaseNodeKey { - // (undocumented) - instanceKey: InstanceKeyJSON; - // (undocumented) - type: StandardNodeTypes.ECInstanceNode; -} - -// @public -interface ECPropertyGroupingNodeKey extends GroupingNodeKey { - className: string; - groupingValue: any; - propertyName: string; - // (undocumented) - type: StandardNodeTypes.ECPropertyGroupingNode; -} - -// @public -interface ECPropertyValueQuerySpecification extends QuerySpecificationBase { - parentPropertyName: string; - specType: QuerySpecificationTypes.ECPropertyValue; -} - -// @public -interface EditorDescription { - name: string; - params: any; -} - -// @public -interface EnumerationChoice { - // (undocumented) - label: string; - // (undocumented) - value: string | number; -} - -// @public -interface EnumerationInfo { - // (undocumented) - choices: EnumerationChoice[]; - // (undocumented) - isStrict: boolean; -} - -// @public -class Field { - constructor(category: CategoryDescription, name: string, label: string, type: TypeDescription, isReadonly: boolean, priority: number, editor?: EditorDescription); - category: Readonly; - editor?: Readonly; - static fromJSON(json: FieldJSON | string | undefined): Field | undefined; - isNestedContentField(): this is NestedContentField; - isPropertiesField(): this is PropertiesField; - isReadonly: boolean; - label: string; - name: string; - // (undocumented) - readonly parent: Readonly | undefined; - priority: number; - // (undocumented) - rebuildParentship(parentField?: NestedContentField): void; - // (undocumented) - resetParentship(): void; - static reviver(key: string, value: any): any; - type: Readonly; -} - -// @public -interface GroupingRule extends RuleBase, ConditionContainer { - class: SingleSchemaClassSpecification; - condition?: string; - groups: GroupingSpecification[]; - ruleType: RuleTypes.Grouping; -} - -// @public -enum GroupingSpecificationTypes { - // (undocumented) - Class = "Class", - // (undocumented) - Property = "Property", - // (undocumented) - SameLabelInstance = "SameLabelInstance" -} - -// @public -interface HierarchyRequestOptions extends RequestOptions { -} - -// @public -interface IClientStateHolder { - // (undocumented) - key: string; - // (undocumented) - onStateChanged: BeEvent<() => void>; - // (undocumented) - state: TState | undefined; -} - -// @public -interface ImageIdOverride extends RuleBase, ConditionContainer { - condition?: string; - imageIdExpression: string; - ruleType: RuleTypes.ImageIdOverride; -} - -// @public -interface InstanceKey { - // (undocumented) - className: string; - // (undocumented) - id: InstanceId; -} - -// @public -interface InstanceKeyJSON { - // (undocumented) - className: string; - // (undocumented) - id: string; -} - -// @public -interface InstanceLabelOverride extends RuleBase { - class: SingleSchemaClassSpecification; - propertyNames: string[]; - ruleType: RuleTypes.InstanceLabelOverride; -} - -// @public -interface InstanceNodesOfSpecificClassesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { - arePolymorphic?: boolean; - classes: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - instanceFilter?: string; - specType: RuleSpecificationTypes.InstanceNodesOfSpecificClasses; -} - -// @public (undocumented) -export function isArray(v: Value | ValueJSON | DisplayValue | DisplayValueJSON): v is ValuesArray | ValuesArrayJSON | DisplayValuesArray | DisplayValuesArrayJSON; - -// @public (undocumented) -export function isMap(v: Value | ValueJSON | DisplayValue | DisplayValueJSON): v is ValuesMap | ValuesMapJSON | DisplayValuesMap | DisplayValuesMapJSON; - -// @public (undocumented) -export function isNestedContentValue(v: Value | ValueJSON): v is NestedContentValue[] | NestedContentValueJSON[]; - -// @public (undocumented) -export function isPrimitive(v: Value | DisplayValue): v is string | number | boolean | undefined; - -// @public -class Item { - constructor(primaryKeys: ec.InstanceKey[], label: string, imageId: string, classInfo: ec.ClassInfo | undefined, values: ValuesDictionary, displayValues: ValuesDictionary, mergedFieldNames: string[]); - classInfo?: Readonly; - displayValues: Readonly>; - static fromJSON(json: ItemJSON | string | undefined): Item | undefined; - imageId: string; - isFieldMerged(fieldName: string): boolean; - label: string; - mergedFieldNames: string[]; - primaryKeys: Array>; - static reviver(key: string, value: any): any; - values: Readonly>; -} - -// @public -interface ItemJSON { - // (undocumented) - classInfo?: ec.ClassInfoJSON; - // (undocumented) - displayValues: ValuesDictionary; - // (undocumented) - imageId: string; - // (undocumented) - label: string; - // (undocumented) - mergedFieldNames: string[]; - // (undocumented) - primaryKeys: ec.InstanceKeyJSON[]; - // (undocumented) - values: ValuesDictionary; -} - -// @public -class KeySet { - constructor(source?: Keys); - // WARNING: The type "Key" needs to be exported by the package (e.g. added to index.ts) - add(value: Keys | Key): KeySet; - clear(): KeySet; - // WARNING: The type "Key" needs to be exported by the package (e.g. added to index.ts) - delete(value: Keys | Key): KeySet; - readonly guid: GuidString; - // WARNING: The type "Key" needs to be exported by the package (e.g. added to index.ts) - has(value: Key): boolean; - hasAll(keys: Keys): boolean; - hasAny(keys: Keys): boolean; - readonly instanceKeys: Map>; - readonly instanceKeysCount: number; - readonly isEmpty: boolean; - readonly nodeKeys: Set; - readonly nodeKeysCount: number; - readonly size: number; - // WARNING: The type "KeySetJSON" needs to be exported by the package (e.g. added to index.ts) - toJSON(): KeySetJSON; -} - -// @public -interface KindOfQuantityInfo { - // (undocumented) - currentFormatId: string; - // (undocumented) - label: string; - // (undocumented) - name: string; - // (undocumented) - persistenceUnit: string; -} - -// @public -interface LabelGroupingNodeKey extends GroupingNodeKey { - label: string; - // (undocumented) - type: StandardNodeTypes.DisplayLabelGroupingNode; -} - -// @public -interface LabelOverride extends RuleBase, ConditionContainer { - condition?: string; - description?: string; - label?: string; - ruleType: RuleTypes.LabelOverride; -} - -// @public -enum LoggingNamespaces { - // (undocumented) - ECObjects = "ECObjects", - // (undocumented) - ECObjects_ECExpressions = "ECObjects.ECExpressions", - // (undocumented) - ECObjects_ECExpressions_Evaluate = "ECObjects.ECExpressions.Evaluate", - // (undocumented) - ECObjects_ECExpressions_Parse = "ECObjects.ECExpressions.Parse", - // (undocumented) - ECPresentation = "ECPresentation", - // (undocumented) - ECPresentation_Connections = "ECPresentation.Connections", - // (undocumented) - ECPresentation_RulesEngine = "ECPresentation.RulesEngine", - // (undocumented) - ECPresentation_RulesEngine_Content = "ECPresentation.RulesEngine.Content", - // (undocumented) - ECPresentation_RulesEngine_Localization = "ECPresentation.RulesEngine.Localization", - // (undocumented) - ECPresentation_RulesEngine_Navigation = "ECPresentation.RulesEngine.Navigation", - // (undocumented) - ECPresentation_RulesEngine_Navigation_Cache = "ECPresentation.RulesEngine.Navigation.Cache", - // (undocumented) - ECPresentation_RulesEngine_RulesetVariables = "ECPresentation.RulesEngine.RulesetVariables", - // (undocumented) - ECPresentation_RulesEngine_Threads = "ECPresentation.RulesEngine.Threads", - // (undocumented) - ECPresentation_RulesEngine_Update = "ECPresentation.RulesEngine.Update" -} - -// @public -interface MultiSchemaClassesSpecification { - classNames: string[]; - schemaName: string; -} - -// @public -class NestedContentField extends Field { - constructor(category: CategoryDescription, name: string, label: string, description: TypeDescription, isReadonly: boolean, priority: number, contentClassInfo: ec.ClassInfo, pathToPrimaryClass: ec.RelationshipPathInfo, nestedFields: Field[], editor?: EditorDescription); - contentClassInfo: ec.ClassInfo; - static fromJSON(json: NestedContentFieldJSON | string | undefined): NestedContentField | undefined; - nestedFields: Array>; - pathToPrimaryClass: ec.RelationshipPathInfo; - // (undocumented) - rebuildParentship(parentField?: NestedContentField): void; - // (undocumented) - resetParentship(): void; -} - -// @public -interface NestedContentFieldJSON extends BaseFieldJSON { - // (undocumented) - contentClassInfo: ec.ClassInfoJSON; - // (undocumented) - nestedFields: FieldJSON[]; - // (undocumented) - pathToPrimaryClass: ec.RelationshipPathInfoJSON; -} - -// @public -interface NestedContentValue { - // (undocumented) - displayValues: ValuesDictionary; - // (undocumented) - mergedFieldNames: string[]; - // (undocumented) - primaryKeys: InstanceKey[]; - // (undocumented) - values: ValuesDictionary; -} - -// @public (undocumented) -export function nestedContentValueFromJSON(json: NestedContentValueJSON): NestedContentValue; - -// @public -interface NestedContentValueJSON { - // (undocumented) - displayValues: ValuesDictionary; - // (undocumented) - mergedFieldNames: string[]; - // (undocumented) - primaryKeys: InstanceKeyJSON[]; - // (undocumented) - values: ValuesDictionary; -} - -// @public -interface Node { - backColor?: string; - description?: string; - // (undocumented) - fontStyle?: string; - foreColor?: string; - hasChildren?: boolean; - // (undocumented) - imageId?: string; - isCheckboxEnabled?: boolean; - isCheckboxVisible?: boolean; - isChecked?: boolean; - isEditable?: boolean; - isExpanded?: boolean; - isSelectionDisabled?: boolean; - key: NodeKey; - label: string; -} - -// @public -interface NodeJSON { - // (undocumented) - backColor?: string; - // (undocumented) - description?: string; - // (undocumented) - fontStyle?: string; - // (undocumented) - foreColor?: string; - // (undocumented) - hasChildren?: boolean; - // (undocumented) - imageId?: string; - // (undocumented) - isCheckboxEnabled?: boolean; - // (undocumented) - isCheckboxVisible?: boolean; - // (undocumented) - isChecked?: boolean; - // (undocumented) - isEditable?: boolean; - // (undocumented) - isExpanded?: boolean; - // (undocumented) - isSelectionDisabled?: boolean; - // (undocumented) - key: NodeKeyJSON; - // (undocumented) - label: string; -} - -// @public -interface NodePathElement { - // (undocumented) - children: NodePathElement[]; - // (undocumented) - filteringData?: NodePathFilteringData; - // (undocumented) - index: number; - // (undocumented) - isMarked: boolean; - // (undocumented) - node: Node; -} - -// @public -interface PageOptions { - size?: number; - start?: number; -} - -// @public -interface PersistentKeysContainer { - // (undocumented) - elements: Id64String[]; - // (undocumented) - models: Id64String[]; - // (undocumented) - nodes: NodeKey[]; -} - -// @public -class PresentationError extends BentleyError { - constructor(errorNumber: PresentationStatus, message?: string, log?: LogFunction, getMetaData?: GetMetaDataFunction); - protected _initName(): string; -} - -// @public -class PresentationRpcInterface extends RpcInterface { - // WARNING: The type "SelectionScopeRpcRequestOptions" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - computeSelection(_token: IModelToken, _options: SelectionScopeRpcRequestOptions, _keys: Readonly, _scopeId: string): Promise; - getChildren(_token: IModelToken, _options: Paged, _parentKey: Readonly): Promise; - getChildrenCount(_token: IModelToken, _options: HierarchyRpcRequestOptions, _parentKey: Readonly): Promise; - // WARNING: The type "ContentRpcRequestOptions" needs to be exported by the package (e.g. added to index.ts) - getContent(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptor: Readonly, _keys: Readonly): Promise; - // WARNING: The type "ContentRpcRequestOptions" needs to be exported by the package (e.g. added to index.ts) - getContentDescriptor(_token: IModelToken, _options: ContentRpcRequestOptions, _displayType: string, _keys: Readonly, _selection: Readonly | undefined): Promise; - // WARNING: The type "ContentRpcRequestOptions" needs to be exported by the package (e.g. added to index.ts) - getContentSetSize(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptor: Readonly, _keys: Readonly): Promise; - // WARNING: The type "ContentRpcRequestOptions" needs to be exported by the package (e.g. added to index.ts) - getDistinctValues(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptor: Readonly, _keys: Readonly, _fieldName: string, _maximumValueCount: number): Promise; - getFilteredNodePaths(_token: IModelToken, _options: HierarchyRpcRequestOptions, _filterText: string): Promise; - getNodePaths(_token: IModelToken, _options: HierarchyRpcRequestOptions, _paths: InstanceKey[][], _markedIndex: number): Promise; - getRootNodes(_token: IModelToken, _options: Paged): Promise; - getRootNodesCount(_token: IModelToken, _options: HierarchyRpcRequestOptions): Promise; - // WARNING: The type "SelectionScopeRpcRequestOptions" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - getSelectionScopes(_token: IModelToken, _options: SelectionScopeRpcRequestOptions): Promise; - // (undocumented) - syncClientState(_token: IModelToken, _options: ClientStateSyncRequestOptions): Promise; - static types: () => (typeof Field | typeof PropertiesField | typeof NestedContentField | typeof Descriptor | typeof Item | typeof Content)[]; - static version: string; -} - -// @public -enum PresentationStatus { - // (undocumented) - BackendOutOfSync = 65542, - // (undocumented) - Error = 65536, - // (undocumented) - InvalidArgument = 65539, - // (undocumented) - InvalidResponse = 65540, - // (undocumented) - NoContent = 65541, - // (undocumented) - NotInitialized = 65537, - // (undocumented) - Success = 0, - // (undocumented) - UseAfterDisposal = 65538 -} - -// @public -interface PrimitiveTypeDescription extends BaseTypeDescription { - // (undocumented) - valueFormat: PropertyValueFormat.Primitive; -} - -// @public -interface PropertiesDisplaySpecification { - isDisplayed?: boolean; - priority?: number; - propertyNames: string[]; -} - -// @public -class PropertiesField extends Field { - constructor(category: CategoryDescription, name: string, label: string, description: TypeDescription, isReadonly: boolean, priority: number, properties: Property[], editor?: EditorDescription); - static fromJSON(json: PropertiesFieldJSON | string | undefined): PropertiesField | undefined; - properties: Array>; -} - -// @public -interface PropertiesFieldJSON extends BaseFieldJSON { - // (undocumented) - properties: PropertyJSON[]; -} - -// @public -interface Property { - property: Readonly; - relatedClassPath: Readonly; -} - -// @public -interface PropertyEditorJsonParameters extends PropertyEditorParametersBase { - json: any; - paramsType: PropertyEditorParameterTypes.Json; -} - -// @public -interface PropertyEditorMultilineParameters extends PropertyEditorParametersBase { - height?: number; - paramsType: PropertyEditorParameterTypes.Multiline; -} - -// @public -enum PropertyEditorParameterTypes { - // (undocumented) - Json = "Json", - // (undocumented) - Multiline = "Multiline", - // (undocumented) - Range = "Range", - // (undocumented) - Slider = "Slider" -} - -// @public -interface PropertyEditorRangeParameters extends PropertyEditorParametersBase { - max?: number; - min?: number; - paramsType: PropertyEditorParameterTypes.Range; -} - -// @public -interface PropertyEditorSliderParameters extends PropertyEditorParametersBase { - intervalsCount?: number; - isVertical?: boolean; - max: number; - min: number; - paramsType: PropertyEditorParameterTypes.Slider; -} - -// @public -interface PropertyEditorsSpecification { - editorName: string; - parameters?: PropertyEditorParameters[]; - propertyName: string; -} - -// @public -interface PropertyGroup extends GroupingSpecificationBase { - createGroupForSingleItem?: boolean; - createGroupForUnspecifiedValues?: boolean; - groupingValue?: PropertyGroupingValue; - imageId?: string; - propertyName: string; - ranges?: PropertyRangeGroupSpecification[]; - sortingValue?: PropertyGroupingValue; - specType: GroupingSpecificationTypes.Property; -} - -// @public -enum PropertyGroupingValue { - DisplayLabel = "DisplayLabel", - PropertyValue = "PropertyValue" -} - -// @public -interface PropertyInfo { - // (undocumented) - classInfo: ClassInfo; - // (undocumented) - enumerationInfo?: EnumerationInfo; - // (undocumented) - kindOfQuantity?: KindOfQuantityInfo; - // (undocumented) - name: string; - // (undocumented) - type: string; -} - -// @public -interface PropertyInfoJSON { - // (undocumented) - classInfo: ClassInfoJSON; - // (undocumented) - enumerationInfo?: EnumerationInfo; - // (undocumented) - kindOfQuantity?: KindOfQuantityInfo; - // (undocumented) - name: string; - // (undocumented) - type: string; -} - -// @public -interface PropertyJSON { - // (undocumented) - property: ec.PropertyInfoJSON; - // (undocumented) - relatedClassPath: ec.RelationshipPathInfoJSON; -} - -// @public -interface PropertyRangeGroupSpecification { - fromValue: string; - imageId?: string; - label?: string; - toValue: string; -} - -// @public -enum PropertyValueFormat { - // (undocumented) - Array = "Array", - // (undocumented) - Primitive = "Primitive", - // (undocumented) - Struct = "Struct" -} - -// @public -enum QuerySpecificationTypes { - // (undocumented) - ECPropertyValue = "ECPropertyValue", - // (undocumented) - String = "String" -} - -// @public -class RegisteredRuleset implements IDisposable, Ruleset { - constructor(ruleset: Ruleset, uniqueIdentifier: string, disposeFunc: (ruleset: RegisteredRuleset) => void); - // (undocumented) - dispose(): void; - // (undocumented) - readonly id: string; - // (undocumented) - readonly rules: Rule[]; - // (undocumented) - readonly supplementationInfo: SupplementationInfo | undefined; - // (undocumented) - readonly supportedSchemas: SchemasSpecification | undefined; - // (undocumented) - toJSON(): Ruleset; - // (undocumented) - readonly uniqueIdentifier: string; - // (undocumented) - readonly vars: VariablesGroup[] | undefined; -} - -// @public -interface RelatedClassInfo { - isForwardRelationship: boolean; - isPolymorphicRelationship: boolean; - relationshipInfo: ClassInfo; - sourceClassInfo: ClassInfo; - targetClassInfo: ClassInfo; -} - -// @public -interface RelatedClassInfoJSON { - // (undocumented) - isForwardRelationship: boolean; - // (undocumented) - isPolymorphicRelationship: boolean; - // (undocumented) - relationshipInfo: ClassInfoJSON; - // (undocumented) - sourceClassInfo: ClassInfoJSON; - // (undocumented) - targetClassInfo: ClassInfoJSON; -} - -// @public -interface RelatedInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { - instanceFilter?: string; - relatedClasses?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - relationships?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - requiredDirection?: RelationshipDirection; - skipRelatedLevel?: number; - specType: RuleSpecificationTypes.RelatedInstanceNodes; - supportedSchemas?: string[]; -} - -// @public -interface RelatedInstanceSpecification { - alias: string; - class: SingleSchemaClassSpecification; - isRequired?: boolean; - relationship: SingleSchemaClassSpecification; - requiredDirection: RelationshipDirection.Forward | RelationshipDirection.Backward; -} - -// @public -interface RelatedPropertiesSpecification { - isPolymorphic?: boolean; - nestedRelatedProperties?: RelatedPropertiesSpecification[]; - propertyNames?: string[] | RelatedPropertiesSpecialValues; - relatedClasses?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - relationshipMeaning?: RelationshipMeaning; - relationships?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; - requiredDirection?: RelationshipDirection; -} - -// @public -enum RelationshipDirection { - Backward = "Backward", - Both = "Both", - Forward = "Forward" -} - -// @public -enum RelationshipMeaning { - RelatedInstance = "RelatedInstance", - SameInstance = "SameInstance" -} - -// @public -interface RequestOptions { - imodel: TIModel; - locale?: string; - rulesetId: string; -} - -// @public -interface RootNodeRule extends NavigationRuleBase { - autoExpand?: boolean; - ruleType: RuleTypes.RootNodes; -} - -// @public (undocumented) -interface RpcRequestOptions { - // (undocumented) - clientId?: string; - // (undocumented) - clientStateId?: string; -} - -// @public -class RpcRequestsHandler implements IDisposable { - // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) - constructor(props?: Props); - readonly clientId: string; - readonly clientStateId: string | undefined; - // (undocumented) - computeSelection(options: SelectionScopeRequestOptions, keys: EntityProps[], scopeId: string): Promise; - // (undocumented) - dispose(): void; - // (undocumented) - getChildren(options: Paged>, parentKey: Readonly): Promise; - // (undocumented) - getChildrenCount(options: HierarchyRequestOptions, parentKey: Readonly): Promise; - // (undocumented) - getContent(options: ContentRequestOptions, descriptor: Readonly, keys: Readonly): Promise; - // (undocumented) - getContentDescriptor(options: ContentRequestOptions, displayType: string, keys: Readonly, selection: Readonly | undefined): Promise; - // (undocumented) - getContentSetSize(options: ContentRequestOptions, descriptor: Readonly, keys: Readonly): Promise; - // (undocumented) - getDistinctValues(options: ContentRequestOptions, descriptor: Readonly, keys: Readonly, fieldName: string, maximumValueCount: number): Promise; - // (undocumented) - getFilteredNodePaths(options: HierarchyRequestOptions, filterText: string): Promise; - // (undocumented) - getNodePaths(options: HierarchyRequestOptions, paths: InstanceKey[][], markedIndex: number): Promise; - // (undocumented) - getRootNodes(options: Paged>): Promise; - // (undocumented) - getRootNodesCount(options: HierarchyRequestOptions): Promise; - // (undocumented) - getSelectionScopes(options: SelectionScopeRequestOptions): Promise; - // (undocumented) - registerClientStateHolder(holder: IClientStateHolder): void; - request(context: any, func: (token: IModelToken, options: Omit, ...args: TArg[]) => Promise, options: TOptions, ...args: TArg[]): Promise; - sync(token: IModelToken): Promise; - // (undocumented) - unregisterClientStateHolder(holder: IClientStateHolder): void; -} - -// @public -interface Ruleset { - id: string; - rules: Rule[]; - supplementationInfo?: SupplementationInfo; - supportedSchemas?: SchemasSpecification; - vars?: VariablesGroup[]; -} - -// WARNING: Unsupported export: STATE_ID -// @public (undocumented) -module RulesetManagerState { -} - -// @public -class RulesetsFactory { - createSimilarInstancesRuleset: { - description: string; - ruleset: Ruleset; - } -} - -// @public (undocumented) -interface RulesetVariablesState { -} - -// @public -enum RuleSpecificationTypes { - // (undocumented) - AllInstanceNodes = "AllInstanceNodes", - // (undocumented) - AllRelatedInstanceNodes = "AllRelatedInstanceNodes", - // (undocumented) - ContentInstancesOfSpecificClasses = "ContentInstancesOfSpecificClasses", - // (undocumented) - ContentRelatedInstances = "ContentRelatedInstances", - // (undocumented) - CustomNode = "CustomNode", - // (undocumented) - CustomQueryInstanceNodes = "CustomQueryInstanceNodes", - // (undocumented) - InstanceNodesOfSpecificClasses = "InstanceNodesOfSpecificClasses", - // (undocumented) - RelatedInstanceNodes = "RelatedInstanceNodes", - // (undocumented) - SelectedNodeInstances = "SelectedNodeInstances" -} - -// @public -enum RuleTypes { - // (undocumented) - CheckBox = "CheckBox", - // (undocumented) - ChildNodes = "ChildNodes", - // (undocumented) - Content = "Content", - // (undocumented) - ContentModifier = "ContentModifier", - // (undocumented) - DisabledSorting = "DisabledSorting", - // (undocumented) - Grouping = "Grouping", - // (undocumented) - ImageIdOverride = "ImageIdOverride", - // (undocumented) - InstanceLabelOverride = "InstanceLabelOverride", - // (undocumented) - LabelOverride = "LabelOverride", - // (undocumented) - PropertySorting = "PropertySorting", - // (undocumented) - RootNodes = "RootNodes", - // (undocumented) - StyleOverride = "StyleOverride" -} - -// @public -interface SameLabelInstanceGroup extends GroupingSpecificationBase { - specType: GroupingSpecificationTypes.SameLabelInstance; -} - -// @public -interface SchemasSpecification { - isExclude?: boolean; - schemaNames: string[]; -} - -// @public -interface SelectClassInfo { - isSelectPolymorphic: boolean; - pathToPrimaryClass: ec.RelationshipPathInfo; - relatedPropertyPaths: ec.RelationshipPathInfo[]; - selectClassInfo: ec.ClassInfo; -} - -// @public -interface SelectClassInfoJSON { - // (undocumented) - isSelectPolymorphic: boolean; - // (undocumented) - pathToPrimaryClass: ec.RelationshipPathInfoJSON; - // (undocumented) - relatedPropertyPaths: ec.RelationshipPathInfoJSON[]; - // (undocumented) - selectClassInfo: ec.ClassInfoJSON; -} - -// @public -interface SelectedNodeInstancesSpecification extends ContentSpecificationBase { - acceptableClassNames?: string; - acceptablePolymorphically?: boolean; - acceptableSchemaName?: string; - onlyIfNotHandled?: boolean; - specType: RuleSpecificationTypes.SelectedNodeInstances; -} - -// @public -interface SelectionInfo { - // (undocumented) - level?: number; - // (undocumented) - providerName: string; -} - -// @public -interface SelectionScope { - // (undocumented) - description?: string; - // (undocumented) - id: string; - // (undocumented) - label: string; -} - -// @public -interface SelectionScopeRequestOptions { - imodel: TIModel; - locale?: string; -} - -// @public -interface SingleSchemaClassSpecification { - className: string; - schemaName: string; -} - -// @public -enum SortDirection { - // (undocumented) - Ascending = 0, - // (undocumented) - Descending = 1 -} - -// @public -enum StandardNodeTypes { - // (undocumented) - DisplayLabelGroupingNode = "DisplayLabelGroupingNode", - // (undocumented) - ECClassGroupingNode = "ECClassGroupingNode", - // (undocumented) - ECInstanceNode = "ECInstanceNode", - // (undocumented) - ECPropertyGroupingNode = "ECPropertyGroupingNode" -} - -// @public -interface StringQuerySpecification extends QuerySpecificationBase { - query: string; - specType: QuerySpecificationTypes.String; -} - -// @public -interface StructTypeDescription extends BaseTypeDescription { - // (undocumented) - members: StructFieldMemberDescription[]; - // (undocumented) - valueFormat: PropertyValueFormat.Struct; -} - -// @public -interface StyleOverride extends RuleBase, ConditionContainer { - backColor?: string; - condition?: string; - fontStyle?: FontStyle; - foreColor?: string; - ruleType: RuleTypes.StyleOverride; -} - -// @public -interface SubCondition extends ConditionContainer { - condition?: string; - specifications?: ChildNodeSpecification[]; - subConditions?: SubCondition[]; -} - -// @public -interface SupplementationInfo { - supplementationPurpose: string; -} - -// @public (undocumented) -export function valueFromJSON(json: ValueJSON): Value; - -// @public (undocumented) -interface ValuesArray extends Array { -} - -// @public (undocumented) -export function valuesArrayFromJSON(json: ValuesArrayJSON): ValuesArray; - -// @public (undocumented) -interface ValuesArrayJSON extends Array { -} - -// @public -interface ValuesDictionary { - // (undocumented) - [key: string]: T; -} - -// @public (undocumented) -interface ValuesMap extends ValuesDictionary { -} - -// @public (undocumented) -export function valuesMapFromJSON(json: ValuesMapJSON): ValuesMap; - -// @public (undocumented) -interface ValuesMapJSON extends ValuesDictionary { -} - -// @public -interface Variable { - defaultValue?: string; - id: string; - label: string; - type?: VariableValueType; -} - -// @public -interface VariablesGroup { - label: string; - nestedGroups?: VariablesGroup[]; - vars: Variable[]; -} - -// @public -enum VariableValueType { - Int = "IntValue", - ShowHide = "ShowHide", - String = "StringValue", - YesNo = "YesNo" -} - -// @public -enum VariableValueTypes { - Bool = "bool", - Id64 = "id64", - Id64Array = "id64[]", - Int = "int", - IntArray = "int[]", - String = "string" -} - -// WARNING: Unsupported export: Keys -// WARNING: Unsupported export: HierarchyRpcRequestOptions -// WARNING: Unsupported export: ClientStateSyncRequestOptions -// WARNING: Unsupported export: VariableValue -// WARNING: Unsupported export: FieldJSON -// WARNING: Unsupported export: TypeDescription -// WARNING: Unsupported export: Value -// WARNING: Unsupported export: DisplayValue -// WARNING: Unsupported export: NodeKey -// WARNING: Unsupported export: NodeKeyPath -// WARNING: Unsupported export: NodeKeyJSON -// WARNING: Unsupported export: nodeKeyFromJSON -// WARNING: Unsupported export: isInstanceNodeKey -// WARNING: Unsupported export: isClassGroupingNodeKey -// WARNING: Unsupported export: isPropertyGroupingNodeKey -// WARNING: Unsupported export: isLabelGroupingNodeKey -// WARNING: Unsupported export: isGroupingNodeKey -// WARNING: Unsupported export: SortingRule -// WARNING: Unsupported export: GroupingSpecification -// WARNING: Unsupported export: Rule -// WARNING: Unsupported export: ClassId -// WARNING: Unsupported export: InstanceId -// WARNING: Unsupported export: instanceKeyFromJSON -// WARNING: Unsupported export: InstanceKeysList -// WARNING: Unsupported export: classInfoFromJSON -// WARNING: Unsupported export: propertyInfoFromJSON -// WARNING: Unsupported export: relatedClassInfoFromJSON -// WARNING: Unsupported export: RelationshipPathInfo -// WARNING: Unsupported export: RelationshipPathInfoJSON -// WARNING: Unsupported export: ValueJSON -// WARNING: Unsupported export: DisplayValueJSON -// WARNING: Unsupported export: Paged -// WARNING: Unsupported export: Omit -// WARNING: Unsupported export: Subtract -// WARNING: Unsupported export: getInstancesCount -// (No @packagedocumentation comment for this package) +// @public +interface AllInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { + specType: RuleSpecificationTypes.AllInstanceNodes; + supportedSchemas?: SchemasSpecification; +} + +// @public +interface AllRelatedInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { + requiredDirection?: RelationshipDirection; + skipRelatedLevel?: number; + specType: RuleSpecificationTypes.AllRelatedInstanceNodes; + supportedSchemas?: SchemasSpecification; +} + +// @public +interface ArrayTypeDescription extends BaseTypeDescription { + // (undocumented) + memberType: TypeDescription; + // (undocumented) + valueFormat: PropertyValueFormat.Array; +} + +// @public +interface BaseFieldJSON { + // (undocumented) + category: CategoryDescription; + // (undocumented) + editor?: EditorDescription; + // (undocumented) + isReadonly: boolean; + // (undocumented) + label: string; + // (undocumented) + name: string; + // (undocumented) + priority: number; + // (undocumented) + type: TypeDescription; +} + +// @public +interface BaseNodeKey { + pathFromRoot: string[]; + // (undocumented) + type: string; +} + +// @public +interface CalculatedPropertiesSpecification { + label: string; + priority?: number; + value: string; +} + +// @public +interface CategoryDescription { + description: string; + expand: boolean; + label: string; + name: string; + priority: number; +} + +// @public +interface CheckBoxRule extends RuleBase, ConditionContainer { + condition?: string; + defaultValue?: boolean; + isEnabled?: string | boolean; + propertyName?: string; + ruleType: RuleTypes.CheckBox; + useInversedPropertyValue?: boolean; +} + +// @public +interface ChildNodeRule extends NavigationRuleBase, ConditionContainer { + condition?: string; + ruleType: RuleTypes.ChildNodes; +} + +// @public +interface ClassGroup extends GroupingSpecificationBase { + baseClass?: SingleSchemaClassSpecification; + createGroupForSingleItem?: boolean; + specType: GroupingSpecificationTypes.Class; +} + +// @public +interface ClassInfo { + // (undocumented) + id: ClassId; + // (undocumented) + label: string; + // (undocumented) + name: string; +} + +// @public +interface ClassInfoJSON { + // (undocumented) + id: string; + // (undocumented) + label: string; + // (undocumented) + name: string; +} + +// @public +class Content { + contentSet: Array>; + descriptor: Readonly; + static fromJSON(json: ContentJSON | string | undefined): Content | undefined; + static reviver(key: string, value: any): any; +} + +// @public +enum ContentFlags { + DistinctValues = 16, + KeysOnly = 1, + MergeResults = 8, + NoFields = 32, + ShowImages = 2, + ShowLabels = 4 +} + +// @public +interface ContentInstancesOfSpecificClassesSpecification extends ContentSpecificationBase { + arePolymorphic?: boolean; + classes: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + instanceFilter?: string; + specType: RuleSpecificationTypes.ContentInstancesOfSpecificClasses; +} + +// @public +interface ContentJSON { + // (undocumented) + contentSet: ItemJSON[]; + // (undocumented) + descriptor: DescriptorJSON; +} + +// @public +interface ContentModifier extends RuleBase { + calculatedProperties?: CalculatedPropertiesSpecification[]; + class?: SingleSchemaClassSpecification; + propertiesDisplay?: PropertiesDisplaySpecification[]; + propertyEditors?: PropertyEditorsSpecification[]; + relatedProperties?: RelatedPropertiesSpecification[]; + ruleType: RuleTypes.ContentModifier; +} + +// @public +interface ContentRelatedInstancesSpecification extends ContentSpecificationBase { + instanceFilter?: string; + isRecursive?: boolean; + relatedClasses?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + relationships?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + requiredDirection?: RelationshipDirection; + skipRelatedLevel?: number; + specType: RuleSpecificationTypes.ContentRelatedInstances; +} + +// @public +interface ContentRequestOptions extends RequestOptions { +} + +// @public +interface ContentResponse { + // (undocumented) + content: Readonly; + // (undocumented) + size: number; +} + +// @public +interface ContentRule extends RuleBase, ConditionContainer { + condition?: string; + ruleType: RuleTypes.Content; + specifications: ContentSpecification[]; +} + +// @public +interface CustomNodeSpecification extends ChildNodeSpecificationBase { + description?: string; + imageId?: string; + label: string; + specType: RuleSpecificationTypes.CustomNode; + type: string; +} + +// @public +interface CustomQueryInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { + queries?: QuerySpecification[]; + specType: RuleSpecificationTypes.CustomQueryInstanceNodes; +} + +// WARNING: UNDEFINED has incomplete type information +// WARNING: GRID has incomplete type information +// WARNING: PROPERTY_PANE has incomplete type information +// WARNING: LIST has incomplete type information +// WARNING: VIEWPORT has incomplete type information +// @public +class DefaultContentDisplayTypes { +} + +// @public +class Descriptor { + connectionId: string; + contentFlags: number; + contentOptions: any; + // WARNING: The type "DescriptorOverrides" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + createDescriptorOverrides(): DescriptorOverrides; + // (undocumented) + createStrippedDescriptor(): Descriptor; + displayType: string; + fields: Field[]; + filterExpression?: string; + static fromJSON(json: DescriptorJSON | string | undefined): Descriptor | undefined; + getFieldByName(name: string, recurse?: boolean): Field | undefined; + inputKeysHash: string; + // (undocumented) + rebuildParentship(): void; + // (undocumented) + resetParentship(): void; + static reviver(key: string, value: any): any; + selectClasses: SelectClassInfo[]; + selectionInfo?: SelectionInfo; + sortDirection?: SortDirection; + sortingField?: Field; +} + +// @public +interface DescriptorJSON { + // (undocumented) + connectionId: string; + // (undocumented) + contentFlags: number; + // (undocumented) + contentOptions: any; + // (undocumented) + displayType: string; + // (undocumented) + fields: FieldJSON[]; + // (undocumented) + filterExpression?: string; + // (undocumented) + inputKeysHash: string; + // (undocumented) + selectClasses: SelectClassInfoJSON[]; + // (undocumented) + selectionInfo?: SelectionInfo; + // (undocumented) + sortDirection?: SortDirection; + // (undocumented) + sortingFieldName?: string; +} + +// @public (undocumented) +export function displayValueFromJSON(json: DisplayValueJSON): DisplayValue; + +// @public (undocumented) +interface DisplayValuesArray extends Array { +} + +// @public (undocumented) +export function displayValuesArrayFromJSON(json: DisplayValuesArrayJSON): DisplayValuesArray; + +// @public (undocumented) +interface DisplayValuesArrayJSON extends Array { +} + +// @public (undocumented) +interface DisplayValuesMap extends ValuesDictionary { +} + +// @public (undocumented) +export function displayValuesMapFromJSON(json: DisplayValuesMapJSON): DisplayValuesMap; + +// @public (undocumented) +interface DisplayValuesMapJSON extends ValuesDictionary { +} + +// @public +interface ECClassGroupingNodeKey extends GroupingNodeKey { + className: string; + // (undocumented) + type: StandardNodeTypes.ECClassGroupingNode; +} + +// @public +interface ECInstanceNodeKey extends BaseNodeKey { + instanceKey: InstanceKey; + // (undocumented) + type: StandardNodeTypes.ECInstanceNode; +} + +// @public +interface ECInstanceNodeKeyJSON extends BaseNodeKey { + // (undocumented) + instanceKey: InstanceKeyJSON; + // (undocumented) + type: StandardNodeTypes.ECInstanceNode; +} + +// @public +interface ECPropertyGroupingNodeKey extends GroupingNodeKey { + className: string; + groupingValue: any; + propertyName: string; + // (undocumented) + type: StandardNodeTypes.ECPropertyGroupingNode; +} + +// @public +interface ECPropertyValueQuerySpecification extends QuerySpecificationBase { + parentPropertyName: string; + specType: QuerySpecificationTypes.ECPropertyValue; +} + +// @public +interface EditorDescription { + name: string; + params: any; +} + +// @public +interface EnumerationChoice { + // (undocumented) + label: string; + // (undocumented) + value: string | number; +} + +// @public +interface EnumerationInfo { + // (undocumented) + choices: EnumerationChoice[]; + // (undocumented) + isStrict: boolean; +} + +// @public +class Field { + constructor(category: CategoryDescription, name: string, label: string, type: TypeDescription, isReadonly: boolean, priority: number, editor?: EditorDescription); + category: Readonly; + editor?: Readonly; + static fromJSON(json: FieldJSON | string | undefined): Field | undefined; + isNestedContentField(): this is NestedContentField; + isPropertiesField(): this is PropertiesField; + isReadonly: boolean; + label: string; + name: string; + // (undocumented) + readonly parent: Readonly | undefined; + priority: number; + // (undocumented) + rebuildParentship(parentField?: NestedContentField): void; + // (undocumented) + resetParentship(): void; + static reviver(key: string, value: any): any; + type: Readonly; +} + +// @public +interface GroupingRule extends RuleBase, ConditionContainer { + class: SingleSchemaClassSpecification; + condition?: string; + groups: GroupingSpecification[]; + ruleType: RuleTypes.Grouping; +} + +// @public +enum GroupingSpecificationTypes { + // (undocumented) + Class = "Class", + // (undocumented) + Property = "Property", + // (undocumented) + SameLabelInstance = "SameLabelInstance" +} + +// @public +interface HierarchyRequestOptions extends RequestOptions { +} + +// @public +interface IClientStateHolder { + // (undocumented) + key: string; + // (undocumented) + onStateChanged: BeEvent<() => void>; + // (undocumented) + state: TState | undefined; +} + +// @public +interface ImageIdOverride extends RuleBase, ConditionContainer { + condition?: string; + imageIdExpression: string; + ruleType: RuleTypes.ImageIdOverride; +} + +// @public +interface InstanceKey { + // (undocumented) + className: string; + // (undocumented) + id: InstanceId; +} + +// @public +interface InstanceKeyJSON { + // (undocumented) + className: string; + // (undocumented) + id: string; +} + +// @public +interface InstanceLabelOverride extends RuleBase { + class: SingleSchemaClassSpecification; + propertyNames: string[]; + ruleType: RuleTypes.InstanceLabelOverride; +} + +// @public +interface InstanceNodesOfSpecificClassesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { + arePolymorphic?: boolean; + classes: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + instanceFilter?: string; + specType: RuleSpecificationTypes.InstanceNodesOfSpecificClasses; +} + +// @public (undocumented) +export function isArray(v: Value | ValueJSON | DisplayValue | DisplayValueJSON): v is ValuesArray | ValuesArrayJSON | DisplayValuesArray | DisplayValuesArrayJSON; + +// @public (undocumented) +export function isMap(v: Value | ValueJSON | DisplayValue | DisplayValueJSON): v is ValuesMap | ValuesMapJSON | DisplayValuesMap | DisplayValuesMapJSON; + +// @public (undocumented) +export function isNestedContentValue(v: Value | ValueJSON): v is NestedContentValue[] | NestedContentValueJSON[]; + +// @public (undocumented) +export function isPrimitive(v: Value | DisplayValue): v is string | number | boolean | undefined; + +// @public +class Item { + constructor(primaryKeys: ec.InstanceKey[], label: string, imageId: string, classInfo: ec.ClassInfo | undefined, values: ValuesDictionary, displayValues: ValuesDictionary, mergedFieldNames: string[]); + classInfo?: Readonly; + displayValues: Readonly>; + static fromJSON(json: ItemJSON | string | undefined): Item | undefined; + imageId: string; + isFieldMerged(fieldName: string): boolean; + label: string; + mergedFieldNames: string[]; + primaryKeys: Array>; + static reviver(key: string, value: any): any; + values: Readonly>; +} + +// @public +interface ItemJSON { + // (undocumented) + classInfo?: ec.ClassInfoJSON; + // (undocumented) + displayValues: ValuesDictionary; + // (undocumented) + imageId: string; + // (undocumented) + label: string; + // (undocumented) + mergedFieldNames: string[]; + // (undocumented) + primaryKeys: ec.InstanceKeyJSON[]; + // (undocumented) + values: ValuesDictionary; +} + +// @public +class KeySet { + constructor(source?: Keys); + // WARNING: The type "Key" needs to be exported by the package (e.g. added to index.ts) + add(value: Keys | Key): KeySet; + clear(): KeySet; + // WARNING: The type "Key" needs to be exported by the package (e.g. added to index.ts) + delete(value: Keys | Key): KeySet; + readonly guid: GuidString; + // WARNING: The type "Key" needs to be exported by the package (e.g. added to index.ts) + has(value: Key): boolean; + hasAll(keys: Keys): boolean; + hasAny(keys: Keys): boolean; + readonly instanceKeys: Map>; + readonly instanceKeysCount: number; + readonly isEmpty: boolean; + readonly nodeKeys: Set; + readonly nodeKeysCount: number; + readonly size: number; + // WARNING: The type "KeySetJSON" needs to be exported by the package (e.g. added to index.ts) + toJSON(): KeySetJSON; +} + +// @public +interface KindOfQuantityInfo { + // (undocumented) + currentFormatId: string; + // (undocumented) + label: string; + // (undocumented) + name: string; + // (undocumented) + persistenceUnit: string; +} + +// @public +interface LabelGroupingNodeKey extends GroupingNodeKey { + label: string; + // (undocumented) + type: StandardNodeTypes.DisplayLabelGroupingNode; +} + +// @public +interface LabelOverride extends RuleBase, ConditionContainer { + condition?: string; + description?: string; + label?: string; + ruleType: RuleTypes.LabelOverride; +} + +// @public +enum LoggingNamespaces { + // (undocumented) + ECObjects = "ECObjects", + // (undocumented) + ECObjects_ECExpressions = "ECObjects.ECExpressions", + // (undocumented) + ECObjects_ECExpressions_Evaluate = "ECObjects.ECExpressions.Evaluate", + // (undocumented) + ECObjects_ECExpressions_Parse = "ECObjects.ECExpressions.Parse", + // (undocumented) + ECPresentation = "ECPresentation", + // (undocumented) + ECPresentation_Connections = "ECPresentation.Connections", + // (undocumented) + ECPresentation_RulesEngine = "ECPresentation.RulesEngine", + // (undocumented) + ECPresentation_RulesEngine_Content = "ECPresentation.RulesEngine.Content", + // (undocumented) + ECPresentation_RulesEngine_Localization = "ECPresentation.RulesEngine.Localization", + // (undocumented) + ECPresentation_RulesEngine_Navigation = "ECPresentation.RulesEngine.Navigation", + // (undocumented) + ECPresentation_RulesEngine_Navigation_Cache = "ECPresentation.RulesEngine.Navigation.Cache", + // (undocumented) + ECPresentation_RulesEngine_RulesetVariables = "ECPresentation.RulesEngine.RulesetVariables", + // (undocumented) + ECPresentation_RulesEngine_Threads = "ECPresentation.RulesEngine.Threads", + // (undocumented) + ECPresentation_RulesEngine_Update = "ECPresentation.RulesEngine.Update" +} + +// @public +interface MultiSchemaClassesSpecification { + classNames: string[]; + schemaName: string; +} + +// @public +class NestedContentField extends Field { + constructor(category: CategoryDescription, name: string, label: string, description: TypeDescription, isReadonly: boolean, priority: number, contentClassInfo: ec.ClassInfo, pathToPrimaryClass: ec.RelationshipPathInfo, nestedFields: Field[], editor?: EditorDescription); + contentClassInfo: ec.ClassInfo; + static fromJSON(json: NestedContentFieldJSON | string | undefined): NestedContentField | undefined; + nestedFields: Array>; + pathToPrimaryClass: ec.RelationshipPathInfo; + // (undocumented) + rebuildParentship(parentField?: NestedContentField): void; + // (undocumented) + resetParentship(): void; +} + +// @public +interface NestedContentFieldJSON extends BaseFieldJSON { + // (undocumented) + contentClassInfo: ec.ClassInfoJSON; + // (undocumented) + nestedFields: FieldJSON[]; + // (undocumented) + pathToPrimaryClass: ec.RelationshipPathInfoJSON; +} + +// @public +interface NestedContentValue { + // (undocumented) + displayValues: ValuesDictionary; + // (undocumented) + mergedFieldNames: string[]; + // (undocumented) + primaryKeys: InstanceKey[]; + // (undocumented) + values: ValuesDictionary; +} + +// @public (undocumented) +export function nestedContentValueFromJSON(json: NestedContentValueJSON): NestedContentValue; + +// @public +interface NestedContentValueJSON { + // (undocumented) + displayValues: ValuesDictionary; + // (undocumented) + mergedFieldNames: string[]; + // (undocumented) + primaryKeys: InstanceKeyJSON[]; + // (undocumented) + values: ValuesDictionary; +} + +// @public +interface Node { + backColor?: string; + description?: string; + // (undocumented) + fontStyle?: string; + foreColor?: string; + hasChildren?: boolean; + // (undocumented) + imageId?: string; + isCheckboxEnabled?: boolean; + isCheckboxVisible?: boolean; + isChecked?: boolean; + isEditable?: boolean; + isExpanded?: boolean; + isSelectionDisabled?: boolean; + key: NodeKey; + label: string; +} + +// @public +interface NodeJSON { + // (undocumented) + backColor?: string; + // (undocumented) + description?: string; + // (undocumented) + fontStyle?: string; + // (undocumented) + foreColor?: string; + // (undocumented) + hasChildren?: boolean; + // (undocumented) + imageId?: string; + // (undocumented) + isCheckboxEnabled?: boolean; + // (undocumented) + isCheckboxVisible?: boolean; + // (undocumented) + isChecked?: boolean; + // (undocumented) + isEditable?: boolean; + // (undocumented) + isExpanded?: boolean; + // (undocumented) + isSelectionDisabled?: boolean; + // (undocumented) + key: NodeKeyJSON; + // (undocumented) + label: string; +} + +// @public +interface NodePathElement { + // (undocumented) + children: NodePathElement[]; + // (undocumented) + filteringData?: NodePathFilteringData; + // (undocumented) + index: number; + // (undocumented) + isMarked: boolean; + // (undocumented) + node: Node; +} + +// @public +interface NodesResponse { + // (undocumented) + count: number; + // (undocumented) + nodes: ReadonlyArray; +} + +// @public +interface PageOptions { + size?: number; + start?: number; +} + +// @public +interface PersistentKeysContainer { + // (undocumented) + elements: Id64String[]; + // (undocumented) + models: Id64String[]; + // (undocumented) + nodes: NodeKey[]; +} + +// @public +class PresentationError extends BentleyError { + constructor(errorNumber: PresentationStatus, message?: string, log?: LogFunction, getMetaData?: GetMetaDataFunction); + protected _initName(): string; +} + +// @public +class PresentationRpcInterface extends RpcInterface { + // (undocumented) + computeSelection(_token: IModelToken, _options: SelectionScopeRpcRequestOptions, _keys: Readonly, _scopeId: string): PresentationRpcResponse; + getContent(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptorOrDisplayType: Readonly | string, _keys: Readonly): PresentationRpcResponse; + getContentAndSize(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptorOrDisplayType: Readonly | string, _keys: Readonly): PresentationRpcResponse; + getContentDescriptor(_token: IModelToken, _options: ContentRpcRequestOptions, _displayType: string, _keys: Readonly, _selection: Readonly | undefined): PresentationRpcResponse; + getContentSetSize(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptorOrDisplayType: Readonly | string, _keys: Readonly): PresentationRpcResponse; + getDistinctValues(_token: IModelToken, _options: ContentRpcRequestOptions, _descriptor: Readonly, _keys: Readonly, _fieldName: string, _maximumValueCount: number): PresentationRpcResponse; + getFilteredNodePaths(_token: IModelToken, _options: HierarchyRpcRequestOptions, _filterText: string): PresentationRpcResponse; + getNodePaths(_token: IModelToken, _options: HierarchyRpcRequestOptions, _paths: InstanceKey[][], _markedIndex: number): PresentationRpcResponse; + getNodes(_token: IModelToken, _options: Paged, _parentKey?: Readonly): PresentationRpcResponse; + getNodesAndCount(_token: IModelToken, _options: Paged, _parentKey?: Readonly): PresentationRpcResponse; + getNodesCount(_token: IModelToken, _options: HierarchyRpcRequestOptions, _parentKey?: Readonly): PresentationRpcResponse; + // (undocumented) + getSelectionScopes(_token: IModelToken, _options: SelectionScopeRpcRequestOptions): PresentationRpcResponse; + // (undocumented) + syncClientState(_token: IModelToken, _options: ClientStateSyncRequestOptions): PresentationRpcResponse; + static types: () => (typeof Field | typeof PropertiesField | typeof NestedContentField | typeof Descriptor | typeof Item | typeof Content)[]; + static version: string; +} + +// @public +enum PresentationStatus { + // (undocumented) + BackendOutOfSync = 65542, + // (undocumented) + Error = 65536, + // (undocumented) + InvalidArgument = 65539, + // (undocumented) + InvalidResponse = 65540, + // (undocumented) + NoContent = 65541, + // (undocumented) + NotInitialized = 65537, + // (undocumented) + Success = 0, + // (undocumented) + UseAfterDisposal = 65538 +} + +// @public +interface PrimitiveTypeDescription extends BaseTypeDescription { + // (undocumented) + valueFormat: PropertyValueFormat.Primitive; +} + +// @public +interface PropertiesDisplaySpecification { + isDisplayed?: boolean; + priority?: number; + propertyNames: string[]; +} + +// @public +class PropertiesField extends Field { + constructor(category: CategoryDescription, name: string, label: string, description: TypeDescription, isReadonly: boolean, priority: number, properties: Property[], editor?: EditorDescription); + static fromJSON(json: PropertiesFieldJSON | string | undefined): PropertiesField | undefined; + properties: Array>; +} + +// @public +interface PropertiesFieldJSON extends BaseFieldJSON { + // (undocumented) + properties: PropertyJSON[]; +} + +// @public +interface Property { + property: Readonly; + relatedClassPath: Readonly; +} + +// @public +interface PropertyEditorJsonParameters extends PropertyEditorParametersBase { + json: any; + paramsType: PropertyEditorParameterTypes.Json; +} + +// @public +interface PropertyEditorMultilineParameters extends PropertyEditorParametersBase { + height?: number; + paramsType: PropertyEditorParameterTypes.Multiline; +} + +// @public +enum PropertyEditorParameterTypes { + // (undocumented) + Json = "Json", + // (undocumented) + Multiline = "Multiline", + // (undocumented) + Range = "Range", + // (undocumented) + Slider = "Slider" +} + +// @public +interface PropertyEditorRangeParameters extends PropertyEditorParametersBase { + max?: number; + min?: number; + paramsType: PropertyEditorParameterTypes.Range; +} + +// @public +interface PropertyEditorSliderParameters extends PropertyEditorParametersBase { + intervalsCount?: number; + isVertical?: boolean; + max: number; + min: number; + paramsType: PropertyEditorParameterTypes.Slider; +} + +// @public +interface PropertyEditorsSpecification { + editorName: string; + parameters?: PropertyEditorParameters[]; + propertyName: string; +} + +// @public +interface PropertyGroup extends GroupingSpecificationBase { + createGroupForSingleItem?: boolean; + createGroupForUnspecifiedValues?: boolean; + groupingValue?: PropertyGroupingValue; + imageId?: string; + propertyName: string; + ranges?: PropertyRangeGroupSpecification[]; + sortingValue?: PropertyGroupingValue; + specType: GroupingSpecificationTypes.Property; +} + +// @public +enum PropertyGroupingValue { + DisplayLabel = "DisplayLabel", + PropertyValue = "PropertyValue" +} + +// @public +interface PropertyInfo { + // (undocumented) + classInfo: ClassInfo; + // (undocumented) + enumerationInfo?: EnumerationInfo; + // (undocumented) + kindOfQuantity?: KindOfQuantityInfo; + // (undocumented) + name: string; + // (undocumented) + type: string; +} + +// @public +interface PropertyInfoJSON { + // (undocumented) + classInfo: ClassInfoJSON; + // (undocumented) + enumerationInfo?: EnumerationInfo; + // (undocumented) + kindOfQuantity?: KindOfQuantityInfo; + // (undocumented) + name: string; + // (undocumented) + type: string; +} + +// @public +interface PropertyJSON { + // (undocumented) + property: ec.PropertyInfoJSON; + // (undocumented) + relatedClassPath: ec.RelationshipPathInfoJSON; +} + +// @public +interface PropertyRangeGroupSpecification { + fromValue: string; + imageId?: string; + label?: string; + toValue: string; +} + +// @public +enum PropertyValueFormat { + // (undocumented) + Array = "Array", + // (undocumented) + Primitive = "Primitive", + // (undocumented) + Struct = "Struct" +} + +// @public +enum QuerySpecificationTypes { + // (undocumented) + ECPropertyValue = "ECPropertyValue", + // (undocumented) + String = "String" +} + +// @public +class RegisteredRuleset implements IDisposable, Ruleset { + constructor(ruleset: Ruleset, uniqueIdentifier: string, disposeFunc: (ruleset: RegisteredRuleset) => void); + // (undocumented) + dispose(): void; + // (undocumented) + readonly id: string; + // (undocumented) + readonly rules: Rule[]; + // (undocumented) + readonly supplementationInfo: SupplementationInfo | undefined; + // (undocumented) + readonly supportedSchemas: SchemasSpecification | undefined; + // (undocumented) + toJSON(): Ruleset; + // (undocumented) + readonly uniqueIdentifier: string; + // (undocumented) + readonly vars: VariablesGroup[] | undefined; +} + +// @public +interface RelatedClassInfo { + isForwardRelationship: boolean; + isPolymorphicRelationship: boolean; + relationshipInfo: ClassInfo; + sourceClassInfo: ClassInfo; + targetClassInfo: ClassInfo; +} + +// @public +interface RelatedClassInfoJSON { + // (undocumented) + isForwardRelationship: boolean; + // (undocumented) + isPolymorphicRelationship: boolean; + // (undocumented) + relationshipInfo: ClassInfoJSON; + // (undocumented) + sourceClassInfo: ClassInfoJSON; + // (undocumented) + targetClassInfo: ClassInfoJSON; +} + +// @public +interface RelatedInstanceNodesSpecification extends ChildNodeSpecificationBase, DefaultGroupingPropertiesContainer { + instanceFilter?: string; + relatedClasses?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + relationships?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + requiredDirection?: RelationshipDirection; + skipRelatedLevel?: number; + specType: RuleSpecificationTypes.RelatedInstanceNodes; + supportedSchemas?: string[]; +} + +// @public +interface RelatedInstanceSpecification { + alias: string; + class: SingleSchemaClassSpecification; + isRequired?: boolean; + relationship: SingleSchemaClassSpecification; + requiredDirection: RelationshipDirection.Forward | RelationshipDirection.Backward; +} + +// @public +interface RelatedPropertiesSpecification { + isPolymorphic?: boolean; + nestedRelatedProperties?: RelatedPropertiesSpecification[]; + propertyNames?: string[] | RelatedPropertiesSpecialValues; + relatedClasses?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + relationshipMeaning?: RelationshipMeaning; + relationships?: MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]; + requiredDirection?: RelationshipDirection; +} + +// @public +enum RelationshipDirection { + Backward = "Backward", + Both = "Both", + Forward = "Forward" +} + +// @public +enum RelationshipMeaning { + RelatedInstance = "RelatedInstance", + SameInstance = "SameInstance" +} + +// @public +interface RequestOptions { + imodel: TIModel; + locale?: string; + rulesetId: string; +} + +// @public +interface RootNodeRule extends NavigationRuleBase { + autoExpand?: boolean; + ruleType: RuleTypes.RootNodes; +} + +// @public (undocumented) +interface RpcRequestOptions { + // (undocumented) + clientId?: string; + // (undocumented) + clientStateId?: string; +} + +// @public +class RpcRequestsHandler implements IDisposable { + // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) + constructor(props?: Props); + readonly clientId: string; + readonly clientStateId: string | undefined; + // (undocumented) + computeSelection(options: SelectionScopeRequestOptions, keys: EntityProps[], scopeId: string): Promise; + // (undocumented) + dispose(): void; + // (undocumented) + getContent(options: ContentRequestOptions, descriptorOrDisplayType: Readonly | string, keys: Readonly): Promise; + // (undocumented) + getContentAndSize(options: ContentRequestOptions, descriptorOrDisplayType: Readonly | string, keys: Readonly): Promise; + // (undocumented) + getContentDescriptor(options: ContentRequestOptions, displayType: string, keys: Readonly, selection: Readonly | undefined): Promise; + // (undocumented) + getContentSetSize(options: ContentRequestOptions, descriptorOrDisplayType: Readonly | string, keys: Readonly): Promise; + // (undocumented) + getDistinctValues(options: ContentRequestOptions, descriptor: Readonly, keys: Readonly, fieldName: string, maximumValueCount: number): Promise; + // (undocumented) + getFilteredNodePaths(options: HierarchyRequestOptions, filterText: string): Promise; + // (undocumented) + getNodePaths(options: HierarchyRequestOptions, paths: InstanceKey[][], markedIndex: number): Promise; + // (undocumented) + getNodes(options: Paged>, parentKey?: Readonly): Promise; + // (undocumented) + getNodesAndCount(options: Paged>, parentKey?: Readonly): Promise; + // (undocumented) + getNodesCount(options: HierarchyRequestOptions, parentKey?: Readonly): Promise; + // (undocumented) + getSelectionScopes(options: SelectionScopeRequestOptions): Promise; + // (undocumented) + registerClientStateHolder(holder: IClientStateHolder): void; + request(context: any, func: (token: IModelToken, options: Omit, ...args: TArg[]) => PresentationRpcResponse, options: TOptions, ...args: TArg[]): Promise; + sync(token: IModelToken): Promise; + // (undocumented) + unregisterClientStateHolder(holder: IClientStateHolder): void; +} + +// @public (undocumented) +interface RpcResponse { + // (undocumented) + errorMessage?: string; + // (undocumented) + result: TResult; + // (undocumented) + statusCode: PresentationStatus; +} + +// @public +interface Ruleset { + id: string; + rules: Rule[]; + supplementationInfo?: SupplementationInfo; + supportedSchemas?: SchemasSpecification; + vars?: VariablesGroup[]; +} + +// WARNING: Unsupported export: STATE_ID +// @public (undocumented) +module RulesetManagerState { +} + +// @public +class RulesetsFactory { + createSimilarInstancesRuleset: { + description: string; + ruleset: Ruleset; + } +} + +// @public (undocumented) +interface RulesetVariablesState { +} + +// @public +enum RuleSpecificationTypes { + // (undocumented) + AllInstanceNodes = "AllInstanceNodes", + // (undocumented) + AllRelatedInstanceNodes = "AllRelatedInstanceNodes", + // (undocumented) + ContentInstancesOfSpecificClasses = "ContentInstancesOfSpecificClasses", + // (undocumented) + ContentRelatedInstances = "ContentRelatedInstances", + // (undocumented) + CustomNode = "CustomNode", + // (undocumented) + CustomQueryInstanceNodes = "CustomQueryInstanceNodes", + // (undocumented) + InstanceNodesOfSpecificClasses = "InstanceNodesOfSpecificClasses", + // (undocumented) + RelatedInstanceNodes = "RelatedInstanceNodes", + // (undocumented) + SelectedNodeInstances = "SelectedNodeInstances" +} + +// @public +enum RuleTypes { + // (undocumented) + CheckBox = "CheckBox", + // (undocumented) + ChildNodes = "ChildNodes", + // (undocumented) + Content = "Content", + // (undocumented) + ContentModifier = "ContentModifier", + // (undocumented) + DisabledSorting = "DisabledSorting", + // (undocumented) + Grouping = "Grouping", + // (undocumented) + ImageIdOverride = "ImageIdOverride", + // (undocumented) + InstanceLabelOverride = "InstanceLabelOverride", + // (undocumented) + LabelOverride = "LabelOverride", + // (undocumented) + PropertySorting = "PropertySorting", + // (undocumented) + RootNodes = "RootNodes", + // (undocumented) + StyleOverride = "StyleOverride" +} + +// @public +interface SameLabelInstanceGroup extends GroupingSpecificationBase { + specType: GroupingSpecificationTypes.SameLabelInstance; +} + +// @public +interface SchemasSpecification { + isExclude?: boolean; + schemaNames: string[]; +} + +// @public +interface SelectClassInfo { + isSelectPolymorphic: boolean; + pathToPrimaryClass: ec.RelationshipPathInfo; + relatedPropertyPaths: ec.RelationshipPathInfo[]; + selectClassInfo: ec.ClassInfo; +} + +// @public +interface SelectClassInfoJSON { + // (undocumented) + isSelectPolymorphic: boolean; + // (undocumented) + pathToPrimaryClass: ec.RelationshipPathInfoJSON; + // (undocumented) + relatedPropertyPaths: ec.RelationshipPathInfoJSON[]; + // (undocumented) + selectClassInfo: ec.ClassInfoJSON; +} + +// @public +interface SelectedNodeInstancesSpecification extends ContentSpecificationBase { + acceptableClassNames?: string[]; + acceptablePolymorphically?: boolean; + acceptableSchemaName?: string; + onlyIfNotHandled?: boolean; + specType: RuleSpecificationTypes.SelectedNodeInstances; +} + +// @public +interface SelectionInfo { + // (undocumented) + level?: number; + // (undocumented) + providerName: string; +} + +// @public +interface SelectionScope { + // (undocumented) + description?: string; + // (undocumented) + id: string; + // (undocumented) + label: string; +} + +// @public +interface SelectionScopeRequestOptions { + imodel: TIModel; + locale?: string; +} + +// @public +interface SingleSchemaClassSpecification { + className: string; + schemaName: string; +} + +// @public +enum SortDirection { + // (undocumented) + Ascending = 0, + // (undocumented) + Descending = 1 +} + +// @public +enum StandardNodeTypes { + // (undocumented) + DisplayLabelGroupingNode = "DisplayLabelGroupingNode", + // (undocumented) + ECClassGroupingNode = "ECClassGroupingNode", + // (undocumented) + ECInstanceNode = "ECInstanceNode", + // (undocumented) + ECPropertyGroupingNode = "ECPropertyGroupingNode" +} + +// @public +interface StringQuerySpecification extends QuerySpecificationBase { + query: string; + specType: QuerySpecificationTypes.String; +} + +// @public +interface StructTypeDescription extends BaseTypeDescription { + // (undocumented) + members: StructFieldMemberDescription[]; + // (undocumented) + valueFormat: PropertyValueFormat.Struct; +} + +// @public +interface StyleOverride extends RuleBase, ConditionContainer { + backColor?: string; + condition?: string; + fontStyle?: string; + foreColor?: string; + ruleType: RuleTypes.StyleOverride; +} + +// @public +interface SubCondition extends ConditionContainer { + condition?: string; + specifications?: ChildNodeSpecification[]; + subConditions?: SubCondition[]; +} + +// @public +interface SupplementationInfo { + supplementationPurpose: string; +} + +// @public (undocumented) +export function valueFromJSON(json: ValueJSON): Value; + +// @public (undocumented) +interface ValuesArray extends Array { +} + +// @public (undocumented) +export function valuesArrayFromJSON(json: ValuesArrayJSON): ValuesArray; + +// @public (undocumented) +interface ValuesArrayJSON extends Array { +} + +// @public +interface ValuesDictionary { + // (undocumented) + [key: string]: T; +} + +// @public (undocumented) +interface ValuesMap extends ValuesDictionary { +} + +// @public (undocumented) +export function valuesMapFromJSON(json: ValuesMapJSON): ValuesMap; + +// @public (undocumented) +interface ValuesMapJSON extends ValuesDictionary { +} + +// @public +interface Variable { + defaultValue?: string; + id: string; + label: string; + type?: VariableValueType; +} + +// @public +interface VariablesGroup { + label: string; + nestedGroups?: VariablesGroup[]; + vars: Variable[]; +} + +// @public +enum VariableValueType { + Int = "IntValue", + ShowHide = "ShowHide", + String = "StringValue", + YesNo = "YesNo" +} + +// @public +enum VariableValueTypes { + Bool = "bool", + Id64 = "id64", + Id64Array = "id64[]", + Int = "int", + IntArray = "int[]", + String = "string" +} + +// WARNING: Unsupported export: Keys +// WARNING: Unsupported export: ClientStateSyncRequestOptions +// WARNING: Unsupported export: ContentRpcRequestOptions +// WARNING: Unsupported export: HierarchyRpcRequestOptions +// WARNING: Unsupported export: SelectionScopeRpcRequestOptions +// WARNING: Unsupported export: PresentationRpcResponse +// WARNING: Unsupported export: VariableValue +// WARNING: Unsupported export: FieldJSON +// WARNING: Unsupported export: TypeDescription +// WARNING: Unsupported export: Value +// WARNING: Unsupported export: DisplayValue +// WARNING: Unsupported export: NodeKey +// WARNING: Unsupported export: NodeKeyPath +// WARNING: Unsupported export: NodeKeyJSON +// WARNING: Unsupported export: nodeKeyFromJSON +// WARNING: Unsupported export: isInstanceNodeKey +// WARNING: Unsupported export: isClassGroupingNodeKey +// WARNING: Unsupported export: isPropertyGroupingNodeKey +// WARNING: Unsupported export: isLabelGroupingNodeKey +// WARNING: Unsupported export: isGroupingNodeKey +// WARNING: Unsupported export: SortingRule +// WARNING: Unsupported export: GroupingSpecification +// WARNING: Unsupported export: Rule +// WARNING: Unsupported export: ClassId +// WARNING: Unsupported export: InstanceId +// WARNING: Unsupported export: instanceKeyFromJSON +// WARNING: Unsupported export: InstanceKeysList +// WARNING: Unsupported export: classInfoFromJSON +// WARNING: Unsupported export: propertyInfoFromJSON +// WARNING: Unsupported export: relatedClassInfoFromJSON +// WARNING: Unsupported export: RelationshipPathInfo +// WARNING: Unsupported export: RelationshipPathInfoJSON +// WARNING: Unsupported export: ValueJSON +// WARNING: Unsupported export: DisplayValueJSON +// WARNING: Unsupported export: Paged +// WARNING: Unsupported export: Omit +// WARNING: Unsupported export: Subtract +// WARNING: Unsupported export: getInstancesCount +// (No @packagedocumentation comment for this package) diff --git a/common/api/presentation-components.api.ts b/common/api/presentation-components.api.ts index 7b52dc8..58b42a9 100644 --- a/common/api/presentation-components.api.ts +++ b/common/api/presentation-components.api.ts @@ -1,118 +1,121 @@ -// @public -class ContentBuilder { - static createPropertyDescription(field: Field): PropertyDescription; - static createPropertyRecord(field: Field, item: Item, path?: Field[]): PropertyRecord; -} - -// @public -class ContentDataProvider implements IContentDataProvider { - constructor(imodel: IModelConnection, ruleset: string | Ruleset, displayType: string); - protected configureContentDescriptor(descriptor: Readonly): Descriptor; - readonly displayType: string; - // (undocumented) - dispose(): void; - getContent: ((pageOptions?: PageOptions | undefined) => Promise | undefined>) & _.MemoizedFunction; - getContentDescriptor: (() => Promise | undefined>) & _.MemoizedFunction; - getContentSetSize: (() => Promise) & _.MemoizedFunction; - imodel: IModelConnection; - // WARNING: The type "CacheInvalidationProps" needs to be exported by the package (e.g. added to index.ts) - protected invalidateCache(props: CacheInvalidationProps): void; - protected isFieldHidden(_field: Field): boolean; - keys: Readonly; - rulesetId: string; - selectionInfo: Readonly | undefined; - protected shouldExcludeFromDescriptor(field: Field): boolean; -} - -// @public -class DataProvidersFactory { - constructor(props?: DataProvidersFactoryProps); - // WARNING: The type "PresentationTableDataProviderProps" needs to be exported by the package (e.g. added to index.ts) - createSimilarInstancesTableDataProvider(propertiesProvider: IPresentationPropertyDataProvider, record: PropertyRecord, props: Omit): Promise; -} - -// @public -interface DataProvidersFactoryProps { - // (undocumented) - rulesetsFactory?: RulesetsFactory; -} - -// @public -interface IPresentationTreeDataProvider extends ITreeDataProvider, IPresentationDataProvider { - getFilteredNodePaths(filter: string): Promise; - getNodeKey(node: TreeNodeItem): NodeKey; -} - -// @public -class PresentationPropertyDataProvider extends ContentDataProvider, implements IPresentationPropertyDataProvider { - constructor(imodel: IModelConnection, rulesetId: string); - // (undocumented) - protected configureContentDescriptor(descriptor: Readonly): Descriptor; - getData(): Promise; - protected getMemoizedData: (() => Promise) & _.MemoizedFunction; - includeFieldsWithNoValues: boolean; - // WARNING: The type "CacheInvalidationProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected invalidateCache(props: CacheInvalidationProps): void; - protected isFieldFavorite(_field: Field): boolean; - // (undocumented) - onDataChanged: PropertyDataChangeEvent; - protected shouldExcludeFromDescriptor(field: Field): boolean; - protected sortCategories(categories: CategoryDescription[]): void; - protected sortFields(_category: CategoryDescription, fields: Field[]): void; -} - -// @public -class PresentationTableDataProvider extends ContentDataProvider, implements IPresentationTableDataProvider { - // WARNING: The type "PresentationTableDataProviderProps" needs to be exported by the package (e.g. added to index.ts) - constructor(props: PresentationTableDataProviderProps); - protected configureContentDescriptor(descriptor: Readonly): Descriptor; - filterExpression: string | undefined; - getColumns: (() => Promise) & _.MemoizedFunction; - getLoadedRow(rowIndex: number): Readonly | undefined; - getRow(rowIndex: number): Promise; - getRowsCount(): Promise; - // WARNING: The type "CacheInvalidationProps" needs to be exported by the package (e.g. added to index.ts) - // (undocumented) - protected invalidateCache(props: CacheInvalidationProps): void; - // (undocumented) - onColumnsChanged: TableDataChangeEvent; - // (undocumented) - onRowsChanged: TableDataChangeEvent; - sort(columnIndex: number, sortDirection: UiSortDirection): Promise; - readonly sortColumn: Promise; - readonly sortColumnKey: string | undefined; - readonly sortDirection: UiSortDirection; -} - -// @public -class PresentationTreeDataProvider implements IPresentationTreeDataProvider { - constructor(imodel: IModelConnection, rulesetId: string); - getFilteredNodePaths: (filter: string) => Promise; - getNodeKey(node: TreeNodeItem): NodeKey; - getNodes: ((parentNode?: TreeNodeItem | undefined, pageOptions?: PageOptions | undefined) => Promise) & _.MemoizedFunction; - getNodesCount: ((parentNode?: TreeNodeItem | undefined) => Promise) & _.MemoizedFunction; - readonly imodel: IModelConnection; - readonly rulesetId: string; -} - -// @public -export function propertyGridWithUnifiedSelection

(PropertyGridComponent: React.ComponentType

): React.ComponentType & Props>; - -// @public -export function tableWithUnifiedSelection

(TableComponent: React.ComponentType

): React.ComponentType & Props>; - -// @public -export function treeWithFilteringSupport

(TreeComponent: React.ComponentType

): React.ComponentType

; - -// @public -export function treeWithUnifiedSelection

(TreeComponent: React.ComponentType

): React.ComponentType, Props> & Props>; - -// @public -export function viewWithUnifiedSelection

(ViewportComponent: React.ComponentType

): React.ComponentType

; - -// WARNING: Unsupported export: IPresentationPropertyDataProvider -// WARNING: Unsupported export: IPresentationTableDataProvider -// (No @packagedocumentation comment for this package) +// @public +class ContentBuilder { + static createPropertyDescription(field: Field): PropertyDescription; + static createPropertyRecord(field: Field, item: Item, path?: Field[]): PropertyRecord; +} + +// @public +class ContentDataProvider implements IContentDataProvider { + constructor(imodel: IModelConnection, ruleset: string | Ruleset, displayType: string); + protected configureContentDescriptor(descriptor: Readonly): Descriptor; + readonly displayType: string; + // (undocumented) + dispose(): void; + getContent(pageOptions?: PageOptions): Promise | undefined>; + getContentDescriptor: (() => Promise | undefined>) & _.MemoizedFunction; + getContentSetSize(): Promise; + imodel: IModelConnection; + // WARNING: The type "CacheInvalidationProps" needs to be exported by the package (e.g. added to index.ts) + protected invalidateCache(props: CacheInvalidationProps): void; + protected isFieldHidden(_field: Field): boolean; + keys: Readonly; + pagingSize: number | undefined; + rulesetId: string; + selectionInfo: Readonly | undefined; + protected shouldConfigureContentDescriptor(): boolean; + protected shouldExcludeFromDescriptor(field: Field): boolean; +} + +// @public +class DataProvidersFactory { + constructor(props?: DataProvidersFactoryProps); + // WARNING: The type "PresentationTableDataProviderProps" needs to be exported by the package (e.g. added to index.ts) + createSimilarInstancesTableDataProvider(propertiesProvider: IPresentationPropertyDataProvider, record: PropertyRecord, props: Omit): Promise; +} + +// @public +interface DataProvidersFactoryProps { + // (undocumented) + rulesetsFactory?: RulesetsFactory; +} + +// @public +interface IPresentationTreeDataProvider extends ITreeDataProvider, IPresentationDataProvider { + getFilteredNodePaths(filter: string): Promise; + getNodeKey(node: TreeNodeItem): NodeKey; +} + +// @public +class PresentationPropertyDataProvider extends ContentDataProvider, implements IPresentationPropertyDataProvider { + constructor(imodel: IModelConnection, rulesetId: string); + // (undocumented) + protected configureContentDescriptor(descriptor: Readonly): Descriptor; + getData(): Promise; + protected getMemoizedData: (() => Promise) & _.MemoizedFunction; + includeFieldsWithNoValues: boolean; + // WARNING: The type "CacheInvalidationProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected invalidateCache(props: CacheInvalidationProps): void; + protected isFieldFavorite(_field: Field): boolean; + // (undocumented) + onDataChanged: PropertyDataChangeEvent; + protected shouldExcludeFromDescriptor(field: Field): boolean; + protected sortCategories(categories: CategoryDescription[]): void; + protected sortFields(_category: CategoryDescription, fields: Field[]): void; +} + +// @public +class PresentationTableDataProvider extends ContentDataProvider, implements IPresentationTableDataProvider { + // WARNING: The type "PresentationTableDataProviderProps" needs to be exported by the package (e.g. added to index.ts) + constructor(props: PresentationTableDataProviderProps); + protected configureContentDescriptor(descriptor: Readonly): Descriptor; + filterExpression: string | undefined; + getColumns: (() => Promise) & _.MemoizedFunction; + getLoadedRow(rowIndex: number): Readonly | undefined; + getRow(rowIndex: number): Promise; + getRowsCount(): Promise; + // WARNING: The type "CacheInvalidationProps" needs to be exported by the package (e.g. added to index.ts) + // (undocumented) + protected invalidateCache(props: CacheInvalidationProps): void; + // (undocumented) + onColumnsChanged: TableDataChangeEvent; + // (undocumented) + onRowsChanged: TableDataChangeEvent; + sort(columnIndex: number, sortDirection: UiSortDirection): Promise; + readonly sortColumn: Promise; + readonly sortColumnKey: string | undefined; + readonly sortDirection: UiSortDirection; +} + +// @public +class PresentationTreeDataProvider implements IPresentationTreeDataProvider { + constructor(imodel: IModelConnection, rulesetId: string); + getFilteredNodePaths: (filter: string) => Promise; + getNodeKey(node: TreeNodeItem): NodeKey; + getNodes(parentNode?: TreeNodeItem, pageOptions?: PageOptions): Promise; + getNodesCount(parentNode?: TreeNodeItem): Promise; + readonly imodel: IModelConnection; + pagingSize: number | undefined; + readonly rulesetId: string; +} + +// @public +export function propertyGridWithUnifiedSelection

(PropertyGridComponent: React.ComponentType

): React.ComponentType & Props>; + +// @public +export function tableWithUnifiedSelection

(TableComponent: React.ComponentType

): React.ComponentType & Props>; + +// @public +export function treeWithFilteringSupport

(TreeComponent: React.ComponentType

): React.ComponentType

; + +// @public +export function treeWithUnifiedSelection

(TreeComponent: React.ComponentType

): React.ComponentType, Props> & Props>; + +// @public +export function viewWithUnifiedSelection

(ViewportComponent: React.ComponentType

): React.ComponentType

; + +// WARNING: Unsupported export: IPresentationPropertyDataProvider +// WARNING: Unsupported export: IPresentationTableDataProvider +// (No @packagedocumentation comment for this package) diff --git a/common/api/presentation-frontend.api.ts b/common/api/presentation-frontend.api.ts index 27d71af..8ca0427 100644 --- a/common/api/presentation-frontend.api.ts +++ b/common/api/presentation-frontend.api.ts @@ -1,137 +1,137 @@ -// @public -interface ISelectionProvider { - getSelection(imodel: IModelConnection, level: number): Readonly; - selectionChange: SelectionChangeEvent; -} - -// @public -class PersistenceHelper { - static createKeySet(imodel: IModelConnection, container: PersistentKeysContainer): Promise; - static createPersistentKeysContainer(imodel: IModelConnection, keyset: KeySet): Promise; -} - -// @public -class Presentation { - // (undocumented) - static i18n: I18N; - // WARNING: The type "PresentationManagerProps" needs to be exported by the package (e.g. added to index.ts) - static initialize(props?: PresentationManagerProps): void; - // (undocumented) - static presentation: PresentationManager; - // (undocumented) - static selection: SelectionManager; - static terminate(): void; -} - -// @public -class PresentationManager implements IDisposable { - activeLocale: string | undefined; - // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) - static create(props?: Props): PresentationManager; - // (undocumented) - dispose(): void; - getChildren(requestOptions: Paged>, parentKey: Readonly): Promise>>; - getChildrenCount(requestOptions: HierarchyRequestOptions, parentKey: Readonly): Promise; - getContent(requestOptions: Paged>, descriptor: Readonly, keys: Readonly): Promise>; - getContentDescriptor(requestOptions: ContentRequestOptions, displayType: string, keys: Readonly, selection: Readonly | undefined): Promise | undefined>; - getContentSetSize(requestOptions: ContentRequestOptions, descriptor: Readonly, keys: Readonly): Promise; - getDistinctValues(requestOptions: ContentRequestOptions, descriptor: Readonly, keys: Readonly, fieldName: string, maximumValueCount?: number): Promise; - getFilteredNodePaths(requestOptions: HierarchyRequestOptions, filterText: string): Promise; - getNodePaths(requestOptions: HierarchyRequestOptions, paths: InstanceKey[][], markedIndex: number): Promise; - getRootNodes(requestOptions: Paged>): Promise>>; - getRootNodesCount(requestOptions: HierarchyRequestOptions): Promise; - // (undocumented) - readonly rpcRequestsHandler: RpcRequestsHandler; - // WARNING: The type "RulesetManager" needs to be exported by the package (e.g. added to index.ts) - rulesets(): RulesetManager; - vars(rulesetId: string): RulesetVariablesManager; -} - -// @public (undocumented) -class RulesetVariablesManager implements IClientStateHolder { - constructor(rulesetId: string); - getBool(variableId: string): Promise; - getId64(variableId: string): Promise; - getId64s(variableId: string): Promise; - getInt(variableId: string): Promise; - getInts(variableId: string): Promise; - getString(variableId: string): Promise; - // (undocumented) - key: string; - // (undocumented) - onStateChanged: BeEvent<() => void>; - setBool(variableId: string, value: boolean): Promise; - setId64(variableId: string, value: Id64String): Promise; - setId64s(variableId: string, value: Id64String[]): Promise; - setInt(variableId: string, value: number): Promise; - setInts(variableId: string, value: number[]): Promise; - setString(variableId: string, value: string): Promise; - // (undocumented) - readonly state: RulesetVariablesState; -} - -// @public -class SelectionChangeEvent extends BeEvent { -} - -// @public -interface SelectionChangeEventArgs { - changeType: SelectionChangeType; - imodel: IModelConnection; - keys: Readonly; - level: number; - rulesetId?: string; - source: string; - timestamp: Date; -} - -// @public -enum SelectionChangeType { - Add = 0, - Clear = 3, - Remove = 1, - Replace = 2 -} - -// @public -class SelectionHandler implements IDisposable { - constructor(manager: SelectionManager, name: string, imodel: IModelConnection, rulesetId?: string, onSelect?: SelectionChangesListener); - addToSelection(keys: Keys, level?: number): void; - clearSelection(level?: number): void; - dispose(): void; - getSelection(level?: number): Readonly; - getSelectionLevels(): number[]; - // (undocumented) - imodel: IModelConnection; - // (undocumented) - name: string; - // (undocumented) - onSelect?: SelectionChangesListener; - protected onSelectionChanged: (evt: SelectionChangeEventArgs, provider: ISelectionProvider) => void; - removeFromSelection(keys: Keys, level?: number): void; - replaceSelection(keys: Keys, level?: number): void; - // (undocumented) - rulesetId?: string; - protected shouldHandle(evt: SelectionChangeEventArgs): boolean; -} - -// @public -class SelectionManager implements ISelectionProvider { - // WARNING: The type "SelectionManagerProps" needs to be exported by the package (e.g. added to index.ts) - constructor(props: SelectionManagerProps); - addToSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void; - addToSelectionWithScope(source: string, imodel: IModelConnection, keys: EntityProps | EntityProps[], scope: SelectionScope | string, level?: number, rulesetId?: string): Promise; - clearSelection(source: string, imodel: IModelConnection, level?: number, rulesetId?: string): void; - getSelection(imodel: IModelConnection, level?: number): Readonly; - getSelectionLevels(imodel: IModelConnection): number[]; - removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void; - removeFromSelectionWithScope(source: string, imodel: IModelConnection, keys: EntityProps | EntityProps[], scope: SelectionScope | string, level?: number, rulesetId?: string): Promise; - replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void; - replaceSelectionWithScope(source: string, imodel: IModelConnection, keys: EntityProps | EntityProps[], scope: SelectionScope | string, level?: number, rulesetId?: string): Promise; - // WARNING: The type "SelectionScopesManager" needs to be exported by the package (e.g. added to index.ts) - readonly scopes: SelectionScopesManager; - readonly selectionChange: SelectionChangeEvent; -} - -// WARNING: Unsupported export: SelectionChangesListener -// (No @packagedocumentation comment for this package) +// @public +interface ISelectionProvider { + getSelection(imodel: IModelConnection, level: number): Readonly; + selectionChange: SelectionChangeEvent; +} + +// @public +class PersistenceHelper { + static createKeySet(imodel: IModelConnection, container: PersistentKeysContainer): Promise; + static createPersistentKeysContainer(imodel: IModelConnection, keyset: KeySet): Promise; +} + +// @public +class Presentation { + // (undocumented) + static i18n: I18N; + // WARNING: The type "PresentationManagerProps" needs to be exported by the package (e.g. added to index.ts) + static initialize(props?: PresentationManagerProps): void; + // (undocumented) + static presentation: PresentationManager; + // (undocumented) + static selection: SelectionManager; + static terminate(): void; +} + +// @public +class PresentationManager implements IDisposable { + activeLocale: string | undefined; + // WARNING: The type "Props" needs to be exported by the package (e.g. added to index.ts) + static create(props?: Props): PresentationManager; + // (undocumented) + dispose(): void; + getContent(requestOptions: Paged>, descriptorOrDisplayType: Readonly | string, keys: Readonly): Promise>; + getContentAndSize(requestOptions: Paged>, descriptorOrDisplayType: Readonly | string, keys: Readonly): Promise>; + getContentDescriptor(requestOptions: ContentRequestOptions, displayType: string, keys: Readonly, selection: Readonly | undefined): Promise | undefined>; + getContentSetSize(requestOptions: ContentRequestOptions, descriptorOrDisplayType: Readonly | string, keys: Readonly): Promise; + getDistinctValues(requestOptions: ContentRequestOptions, descriptor: Readonly, keys: Readonly, fieldName: string, maximumValueCount?: number): Promise; + getFilteredNodePaths(requestOptions: HierarchyRequestOptions, filterText: string): Promise; + getNodePaths(requestOptions: HierarchyRequestOptions, paths: InstanceKey[][], markedIndex: number): Promise; + getNodes(requestOptions: Paged>, parentKey?: Readonly): Promise>>; + getNodesAndCount(requestOptions: Paged>, parentKey?: Readonly): Promise>; + getNodesCount(requestOptions: HierarchyRequestOptions, parentKey?: Readonly): Promise; + // (undocumented) + readonly rpcRequestsHandler: RpcRequestsHandler; + // WARNING: The type "RulesetManager" needs to be exported by the package (e.g. added to index.ts) + rulesets(): RulesetManager; + vars(rulesetId: string): RulesetVariablesManager; +} + +// @public (undocumented) +class RulesetVariablesManager implements IClientStateHolder { + constructor(rulesetId: string); + getBool(variableId: string): Promise; + getId64(variableId: string): Promise; + getId64s(variableId: string): Promise; + getInt(variableId: string): Promise; + getInts(variableId: string): Promise; + getString(variableId: string): Promise; + // (undocumented) + key: string; + // (undocumented) + onStateChanged: BeEvent<() => void>; + setBool(variableId: string, value: boolean): Promise; + setId64(variableId: string, value: Id64String): Promise; + setId64s(variableId: string, value: Id64String[]): Promise; + setInt(variableId: string, value: number): Promise; + setInts(variableId: string, value: number[]): Promise; + setString(variableId: string, value: string): Promise; + // (undocumented) + readonly state: RulesetVariablesState; +} + +// @public +class SelectionChangeEvent extends BeEvent { +} + +// @public +interface SelectionChangeEventArgs { + changeType: SelectionChangeType; + imodel: IModelConnection; + keys: Readonly; + level: number; + rulesetId?: string; + source: string; + timestamp: Date; +} + +// @public +enum SelectionChangeType { + Add = 0, + Clear = 3, + Remove = 1, + Replace = 2 +} + +// @public +class SelectionHandler implements IDisposable { + constructor(manager: SelectionManager, name: string, imodel: IModelConnection, rulesetId?: string, onSelect?: SelectionChangesListener); + addToSelection(keys: Keys, level?: number): void; + clearSelection(level?: number): void; + dispose(): void; + getSelection(level?: number): Readonly; + getSelectionLevels(): number[]; + // (undocumented) + imodel: IModelConnection; + // (undocumented) + name: string; + // (undocumented) + onSelect?: SelectionChangesListener; + protected onSelectionChanged: (evt: SelectionChangeEventArgs, provider: ISelectionProvider) => void; + removeFromSelection(keys: Keys, level?: number): void; + replaceSelection(keys: Keys, level?: number): void; + // (undocumented) + rulesetId?: string; + protected shouldHandle(evt: SelectionChangeEventArgs): boolean; +} + +// @public +class SelectionManager implements ISelectionProvider { + // WARNING: The type "SelectionManagerProps" needs to be exported by the package (e.g. added to index.ts) + constructor(props: SelectionManagerProps); + addToSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void; + addToSelectionWithScope(source: string, imodel: IModelConnection, keys: EntityProps | EntityProps[], scope: SelectionScope | string, level?: number, rulesetId?: string): Promise; + clearSelection(source: string, imodel: IModelConnection, level?: number, rulesetId?: string): void; + getSelection(imodel: IModelConnection, level?: number): Readonly; + getSelectionLevels(imodel: IModelConnection): number[]; + removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void; + removeFromSelectionWithScope(source: string, imodel: IModelConnection, keys: EntityProps | EntityProps[], scope: SelectionScope | string, level?: number, rulesetId?: string): Promise; + replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void; + replaceSelectionWithScope(source: string, imodel: IModelConnection, keys: EntityProps | EntityProps[], scope: SelectionScope | string, level?: number, rulesetId?: string): Promise; + // WARNING: The type "SelectionScopesManager" needs to be exported by the package (e.g. added to index.ts) + readonly scopes: SelectionScopesManager; + readonly selectionChange: SelectionChangeEvent; +} + +// WARNING: Unsupported export: SelectionChangesListener +// (No @packagedocumentation comment for this package) diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index d2a7d53..4041af4 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -14,6 +14,10 @@ "name": "@bentley/bwc", "allowedCategories": [ "internal" ] }, + { + "name": "@bentley/certa", + "allowedCategories": [ "frontend", "internal" ] + }, { "name": "@bentley/config-loader", "allowedCategories": [ "backend", "common", "frontend", "internal", "tools" ] @@ -144,7 +148,7 @@ }, { "name": "body-parser", - "allowedCategories": [ "backend", "internal" ] + "allowedCategories": [ "backend", "internal", "tools" ] }, { "name": "bunyan", @@ -266,6 +270,14 @@ "name": "delay-cli", "allowedCategories": [ "internal" ] }, + { + "name": "detect-port", + "allowedCategories": [ "tools" ] + }, + { + "name": "dom-testing-library", + "allowedCategories": [ "frontend" ] + }, { "name": "dotenv", "allowedCategories": [ "tools" ] @@ -276,7 +288,7 @@ }, { "name": "electron", - "allowedCategories": [ "backend", "internal" ] + "allowedCategories": [ "backend", "internal", "tools" ] }, { "name": "electron-chromedriver", @@ -308,7 +320,7 @@ }, { "name": "express", - "allowedCategories": [ "common", "internal" ] + "allowedCategories": [ "common", "internal", "tools" ] }, { "name": "express-session", @@ -348,7 +360,7 @@ }, { "name": "glob", - "allowedCategories": [ "backend", "common", "internal", "tools" ] + "allowedCategories": [ "backend", "common", "frontend", "internal", "tools" ] }, { "name": "highlight.js", @@ -396,7 +408,7 @@ }, { "name": "istanbul-instrumenter-loader", - "allowedCategories": [ "tools" ] + "allowedCategories": [ "internal", "tools" ] }, { "name": "istanbul-lib-hook", @@ -426,6 +438,14 @@ "name": "json5", "allowedCategories": [ "tools" ] }, + { + "name": "jsonc-parser", + "allowedCategories": [ "tools" ] + }, + { + "name": "jsonwebtoken", + "allowedCategories": [ "common" ] + }, { "name": "license-webpack-plugin", "allowedCategories": [ "tools" ] @@ -470,6 +490,10 @@ "name": "mocha", "allowedCategories": [ "backend", "common", "frontend", "internal", "tools" ] }, + { + "name": "mocha-headless-chrome", + "allowedCategories": [ "tools" ] + }, { "name": "mocha-junit-reporter", "allowedCategories": [ "tools" ] @@ -486,10 +510,6 @@ "name": "nock", "allowedCategories": [ "common" ] }, - { - "name": "node-glob", - "allowedCategories": [ "internal" ] - }, { "name": "node-gyp", "allowedCategories": [ "tools" ] @@ -558,6 +578,10 @@ "name": "proxy-agent", "allowedCategories": [ "common" ] }, + { + "name": "puppeteer", + "allowedCategories": [ "tools" ] + }, { "name": "qs", "allowedCategories": [ "common" ] @@ -700,7 +724,7 @@ }, { "name": "source-map-support", - "allowedCategories": [ "backend", "common", "frontend" ] + "allowedCategories": [ "backend", "common", "frontend", "tools" ] }, { "name": "style-loader", @@ -806,6 +830,10 @@ "name": "url-search-params", "allowedCategories": [ "common" ] }, + { + "name": "uuid", + "allowedCategories": [ "tools" ] + }, { "name": "wdio-chromedriver-service", "allowedCategories": [ "tools" ] @@ -888,7 +916,7 @@ }, { "name": "yargs", - "allowedCategories": [ "common", "internal", "tools" ] + "allowedCategories": [ "common", "frontend", "internal", "tools" ] } ] } diff --git a/common/config/rush/shrinkwrap.yaml b/common/config/rush/shrinkwrap.yaml index 8c5f776..5e4ce5a 100644 --- a/common/config/rush/shrinkwrap.yaml +++ b/common/config/rush/shrinkwrap.yaml @@ -1,19 +1,22 @@ dependencies: '@bentley/dev-cors-proxy-server': npm.bentley.com/@bentley/dev-cors-proxy-server/0.0.9 '@bentley/icons-generic-webfont': npm.bentley.com/@bentley/icons-generic-webfont/0.0.9 - '@bentley/imodeljs-native': npm.bentley.com/@bentley/imodeljs-native/0.99.0 + '@bentley/imodeljs-native': npm.bentley.com/@bentley/imodeljs-native/0.102.3 '@microsoft/api-extractor': 6.3.0 '@openid/appauth': 1.2.1 '@rush-temp/agent-test-app': 'file:projects/agent-test-app.tgz' '@rush-temp/bentleyjs-core': 'file:projects/bentleyjs-core.tgz' '@rush-temp/build-tools': 'file:projects/build-tools.tgz' + '@rush-temp/certa': 'file:projects/certa.tgz' '@rush-temp/config-loader': 'file:projects/config-loader.tgz' + '@rush-temp/core-integration-tests': 'file:projects/core-integration-tests.tgz' '@rush-temp/display-performance-test-app': 'file:projects/display-performance-test-app.tgz' '@rush-temp/display-test-app': 'file:projects/display-test-app.tgz' '@rush-temp/ecschema-metadata': 'file:projects/ecschema-metadata.tgz' '@rush-temp/electron-manager': 'file:projects/electron-manager.tgz' '@rush-temp/example-code-app': 'file:projects/example-code-app.tgz' '@rush-temp/example-code-snippets': 'file:projects/example-code-snippets.tgz' + '@rush-temp/export-obj': 'file:projects/export-obj.tgz' '@rush-temp/geometry-core': 'file:projects/geometry-core.tgz' '@rush-temp/imodel-from-geojson': 'file:projects/imodel-from-geojson.tgz' '@rush-temp/imodel-from-reality-model': 'file:projects/imodel-from-reality-model.tgz' @@ -34,9 +37,9 @@ dependencies: '@rush-temp/presentation-integration-tests': 'file:projects/presentation-integration-tests.tgz' '@rush-temp/presentation-test-app': 'file:projects/presentation-test-app.tgz' '@rush-temp/presentation-testing': 'file:projects/presentation-testing.tgz' + '@rush-temp/rpc-integration-tests': 'file:projects/rpc-integration-tests.tgz' '@rush-temp/test-apps-analysis-importer': 'file:projects/test-apps-analysis-importer.tgz' '@rush-temp/test-apps-synchro-schedule-importer': 'file:projects/test-apps-synchro-schedule-importer.tgz' - '@rush-temp/testbed': 'file:projects/testbed.tgz' '@rush-temp/ui-components': 'file:projects/ui-components.tgz' '@rush-temp/ui-core': 'file:projects/ui-core.tgz' '@rush-temp/ui-framework': 'file:projects/ui-framework.tgz' @@ -44,6 +47,7 @@ dependencies: '@rush-temp/ui-test-app': 'file:projects/ui-test-app.tgz' '@rush-temp/webpack-tools': 'file:projects/webpack-tools.tgz' '@rush-temp/webworker-test-app': 'file:projects/webworker-test-app.tgz' + '@svgdotjs/svg.js': 3.0.12 '@types/body-parser': 1.17.0 '@types/bunyan': 1.8.5 '@types/bunyan-seq': 0.2.1 @@ -56,6 +60,7 @@ dependencies: '@types/cpx': 1.5.0 '@types/deep-assign': 0.1.1 '@types/deep-equal': 1.0.1 + '@types/detect-port': 1.1.0 '@types/enzyme': 3.9.0 '@types/express': 4.16.1 '@types/express-session': 1.15.12 @@ -67,9 +72,10 @@ dependencies: '@types/i18next': 8.4.6 '@types/i18next-browser-languagedetector': 2.0.2 '@types/js-base64': 2.3.1 - '@types/jsdom': 12.2.2 + '@types/jsdom': 12.2.3 '@types/json5': 0.0.30 - '@types/lodash': 4.14.121 + '@types/jsonwebtoken': 8.3.1 + '@types/lodash': 4.14.122 '@types/lolex': 2.1.3 '@types/minimist': 1.2.0 '@types/mocha': 5.2.6 @@ -77,12 +83,13 @@ dependencies: '@types/nock': 9.3.1 '@types/node': 10.12.18 '@types/passport': 0.4.7 - '@types/qs': 6.5.1 + '@types/puppeteer': 1.3.0 + '@types/qs': 6.5.2 '@types/react': 16.7.22 '@types/react-data-grid': 4.0.2 '@types/react-dom': 16.0.11 '@types/react-highlight-words': 0.11.1 - '@types/react-redux': 7.0.1 + '@types/react-redux': 7.0.2 '@types/react-resize-detector': 3.1.1 '@types/react-router-dom': 4.3.1 '@types/react-virtualized': 9.18.12 @@ -94,9 +101,9 @@ dependencies: '@types/source-map-support': 0.4.2 '@types/superagent': 3.8.7 '@types/url-search-params': 0.10.2 + '@types/uuid': 3.4.4 '@types/webdriverio': 4.13.3 '@types/webpack': 3.8.17 - '@types/ws': 6.0.1 '@types/xmldom': 0.1.29 '@types/yargs': 12.0.9 app-root-path: 2.1.0 @@ -127,13 +134,15 @@ dependencies: cross-env: 5.2.0 cross-spawn: 6.0.5 css-loader: 0.28.11 - csstype: 2.6.2 + csstype: 2.6.3 debug: 2.6.9 deep-assign: 2.0.0 deep-equal: 1.0.1 delay-cli: 1.1.0 + detect-port: 1.3.0 + dom-testing-library: 3.16.8 dotenv: 6.2.0 - electron: 4.0.6 + electron: 4.0.7 electron-chromedriver: 2.0.0 enzyme: 3.9.0 enzyme-adapter-react-16: 1.10.0 @@ -146,12 +155,11 @@ dependencies: express-session: 1.15.6 faker: 4.1.0 file-loader: 1.1.11 - find-root: 1.1.0 fork-ts-checker-webpack-plugin: 0.4.15 form-data: 2.3.2 fs-extra: 6.0.1 fs-write-stream-atomic: 1.0.10 - fuse.js: 3.4.2 + fuse.js: 3.4.3 glob: 7.1.3 highlight.js: 9.14.2 html-webpack-plugin: 4.0.0-alpha.2 @@ -164,13 +172,13 @@ dependencies: imports-loader: 0.8.0 inspire-tree: 5.0.2 istanbul-instrumenter-loader: 3.0.1 - istanbul-lib-hook: 1.2.2 - istanbul-lib-instrument: 2.3.2 js-base64: 2.5.1 jsdom: 11.12.0 jsdom-global: 3.0.2 json-schema-faker: 0.5.0-rc16 json5: 2.1.0 + jsonc-parser: 2.0.3 + jsonwebtoken: 8.5.0 license-webpack-plugin: 1.5.0 lodash: 4.17.11 lolex: 2.7.5 @@ -185,7 +193,6 @@ dependencies: mocha-webpack: 2.0.0-beta.0 multiparty: 4.2.1 nock: 9.6.1 - node-glob: 1.2.0 node-gyp: 3.6.2 node-sass: 4.11.0 nodemon: 1.18.10 @@ -202,24 +209,25 @@ dependencies: postcss-flexbugs-fixes: 3.3.1 postcss-loader: 2.1.6 promise: 8.0.2 + puppeteer: 1.11.0 qs: 6.6.0 raf: 3.4.1 raf-schd: 4.0.0 raw-loader: 0.5.1 - react: 16.8.3 + react: 16.8.4 react-data-grid: 6.0.1 react-dev-utils: 6.1.1 react-dnd: 5.0.0 react-dnd-html5-backend: 5.0.1 react-dnd-test-backend: 5.0.1 - react-dom: 16.8.3 + react-dom: 16.8.4 react-highlight-words: 0.14.0 react-markdown: 3.6.0 react-redux: 5.1.1 react-resize-detector: 3.4.0 react-router-dom: 4.3.1 react-split-pane: 0.1.77 - react-test-renderer: 16.8.3 + react-test-renderer: 16.8.4 react-testing-library: 5.9.0 react-virtualized: 9.21.0 readline: 1.3.0 @@ -229,12 +237,11 @@ dependencies: request-promise: 4.2.4 request-promise-native: 1.0.7 resize-observer-polyfill: 1.5.1 - resolve: 1.10.0 rimraf: 2.6.3 sass-loader: 7.1.0 save: 2.3.3 semver: 5.6.0 - sinon: 7.2.5 + sinon: 7.2.7 sinon-chai: 3.3.0 source-map-loader: 0.2.4 source-map-support: 0.5.10 @@ -243,7 +250,6 @@ dependencies: superagent: 3.8.3 svg-react-loader: 0.4.6 svg-sprite-loader: 3.9.2 - svg.js: 2.7.1 sw-precache-webpack-plugin: 0.11.5 tooltip.js: 1.3.1 tree-kill: 1.2.1 @@ -252,8 +258,8 @@ dependencies: ts-node: 7.0.1 tsconfig-paths: 3.8.0 tslib: 1.9.3 - tslint: 5.13.0 - tslint-consistent-codestyle: 1.15.0 + tslint: 5.13.1 + tslint-consistent-codestyle: 1.15.1 tslint-loader: 3.6.0 tsutils: 3.8.0 typedoc: 0.11.1 @@ -265,13 +271,14 @@ dependencies: uglifyjs-webpack-plugin: 1.3.0 url-loader: 1.1.2 url-search-params: 1.1.0 + uuid: 3.3.2 wdio-chromedriver-service: 0.1.5 wdio-junit-reporter: 0.4.4 wdio-mocha-framework: 0.6.4 wdio-screenshot: 0.6.0 wdio-spec-reporter: 0.1.5 wdio-visual-regression-service: 0.9.0 - webdriverio: 4.14.2 + webdriverio: 4.14.3 webpack: 4.29.6 webpack-cli: 3.2.3 webpack-dev-server: 3.2.1 @@ -279,7 +286,6 @@ dependencies: webpack-merge: 4.2.1 webpack-node-externals: 1.7.2 whatwg-fetch: 2.0.4 - ws: 6.1.4 xmldom: 0.1.27 xmlhttprequest: 1.8.0 xpath: 0.0.27 @@ -292,22 +298,6 @@ packages: dev: false resolution: integrity: sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== - /@babel/code-frame/7.0.0-beta.51: - dependencies: - '@babel/highlight': 7.0.0-beta.51 - dev: false - resolution: - integrity: sha1-vXHZsZKvl435FYKdOdQJRFZDmgw= - /@babel/generator/7.0.0-beta.51: - dependencies: - '@babel/types': 7.0.0-beta.51 - jsesc: 2.5.2 - lodash: 4.17.11 - source-map: 0.5.7 - trim-right: 1.0.1 - dev: false - resolution: - integrity: sha1-bHV1/952HQdIXgS67cA5LG2eMPY= /@babel/generator/7.3.4: dependencies: '@babel/types': 7.3.4 @@ -318,14 +308,6 @@ packages: dev: false resolution: integrity: sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg== - /@babel/helper-function-name/7.0.0-beta.51: - dependencies: - '@babel/helper-get-function-arity': 7.0.0-beta.51 - '@babel/template': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - dev: false - resolution: - integrity: sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE= /@babel/helper-function-name/7.1.0: dependencies: '@babel/helper-get-function-arity': 7.0.0 @@ -340,24 +322,12 @@ packages: dev: false resolution: integrity: sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - /@babel/helper-get-function-arity/7.0.0-beta.51: - dependencies: - '@babel/types': 7.0.0-beta.51 - dev: false - resolution: - integrity: sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE= /@babel/helper-split-export-declaration/7.0.0: dependencies: '@babel/types': 7.3.4 dev: false resolution: integrity: sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== - /@babel/helper-split-export-declaration/7.0.0-beta.51: - dependencies: - '@babel/types': 7.0.0-beta.51 - dev: false - resolution: - integrity: sha1-imw/ZsTSZTUvwHdIT59ugKUauXg= /@babel/highlight/7.0.0: dependencies: chalk: 2.4.2 @@ -366,21 +336,6 @@ packages: dev: false resolution: integrity: sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== - /@babel/highlight/7.0.0-beta.51: - dependencies: - chalk: 2.4.2 - esutils: 2.0.2 - js-tokens: 3.0.2 - dev: false - resolution: - integrity: sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0= - /@babel/parser/7.0.0-beta.51: - dev: false - engines: - node: '>=6.0.0' - hasBin: true - resolution: - integrity: sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY= /@babel/parser/7.3.4: dev: false engines: @@ -394,15 +349,6 @@ packages: dev: false resolution: integrity: sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== - /@babel/template/7.0.0-beta.51: - dependencies: - '@babel/code-frame': 7.0.0-beta.51 - '@babel/parser': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - lodash: 4.17.11 - dev: false - resolution: - integrity: sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8= /@babel/template/7.2.2: dependencies: '@babel/code-frame': 7.0.0 @@ -411,21 +357,6 @@ packages: dev: false resolution: integrity: sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== - /@babel/traverse/7.0.0-beta.51: - dependencies: - '@babel/code-frame': 7.0.0-beta.51 - '@babel/generator': 7.0.0-beta.51 - '@babel/helper-function-name': 7.0.0-beta.51 - '@babel/helper-split-export-declaration': 7.0.0-beta.51 - '@babel/parser': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - debug: 3.2.6 - globals: 11.11.0 - invariant: 2.2.4 - lodash: 4.17.11 - dev: false - resolution: - integrity: sha1-mB2vLOw0emIx06odnhgDsDqqpKg= /@babel/traverse/7.3.4: dependencies: '@babel/code-frame': 7.0.0 @@ -440,14 +371,6 @@ packages: dev: false resolution: integrity: sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ== - /@babel/types/7.0.0-beta.51: - dependencies: - esutils: 2.0.2 - lodash: 4.17.11 - to-fast-properties: 2.0.0 - dev: false - resolution: - integrity: sha1-2AK3tUO1g2x3iqaReXq/APPZfqk= /@babel/types/7.3.4: dependencies: esutils: 2.0.2 @@ -468,12 +391,12 @@ packages: typescript: '>= 3.0.1 || >= 3.3.0-dev || >= 3.4.0-dev' resolution: integrity: sha512-gVTkJAOef5HtN6LPmrtt5fAUmBywwlgmObsU3FBhPoNeXPLaIl2zywXkJEtvvVLQnaFmtff3x+wIj5lHRCDE3Q== - /@fimbul/bifrost/0.17.0/tslint@5.13.0+typescript@3.2.4: + /@fimbul/bifrost/0.17.0/tslint@5.13.1+typescript@3.2.4: dependencies: '@fimbul/ymir': /@fimbul/ymir/0.17.0/tsutils@3.8.0+typescript@3.2.4 get-caller-file: 2.0.1 tslib: 1.9.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 tsutils: /tsutils/3.8.0/typescript@3.2.4 typescript: 3.2.4 dev: false @@ -510,6 +433,15 @@ packages: typescript: '>= 3.0.1 || >= 3.3.0-dev || >= 3.4.0-dev' resolution: integrity: sha512-xMXM9KTXRLHLVS6dnX1JhHNEkmWHcAVCQ/4+DA1KKwC/AFnGHzu/7QfQttEPgw3xplT+ILf9e3i64jrFwB3JtA== + /@jest/types/24.3.0: + dependencies: + '@types/istanbul-lib-coverage': 1.1.0 + '@types/yargs': 12.0.9 + dev: false + engines: + node: '>= 6' + resolution: + integrity: sha512-VoO1F5tU2n/93QN/zaZ7Q8SeV/Rj+9JJOgbvKbBwy4lenvmdj1iDaQEPXGTKrO6OSvDeb2drTFipZJYxgo6kIQ== /@microsoft/api-extractor/6.3.0: dependencies: '@microsoft/node-core-library': 3.7.0 @@ -588,21 +520,22 @@ packages: node: '>=4' resolution: integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - /@sinonjs/commons/1.3.0: + /@sinonjs/commons/1.4.0: dependencies: type-detect: 4.0.8 dev: false resolution: - integrity: sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA== - /@sinonjs/formatio/3.1.0: + integrity: sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw== + /@sinonjs/formatio/3.2.1: dependencies: + '@sinonjs/commons': 1.4.0 '@sinonjs/samsam': 3.2.0 dev: false resolution: - integrity: sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg== + integrity: sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== /@sinonjs/samsam/3.2.0: dependencies: - '@sinonjs/commons': 1.3.0 + '@sinonjs/commons': 1.4.0 array-from: 2.1.1 lodash: 4.17.11 dev: false @@ -612,6 +545,10 @@ packages: dev: false resolution: integrity: sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + /@svgdotjs/svg.js/3.0.12: + dev: false + resolution: + integrity: sha512-2oaomFz21tW5L+LwCVchIr+LiTsNeKH3RguryLr4QpRdilc2Rw1R8T7MyOC1GwyRCZr0Jejx7k72PnHWooSpIg== /@types/argparse/1.0.33: dev: false resolution: @@ -673,10 +610,12 @@ packages: dev: false resolution: integrity: sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== - /@types/cheerio/0.22.10: + /@types/cheerio/0.22.11: + dependencies: + '@types/node': 10.12.18 dev: false resolution: - integrity: sha512-fOM/Jhv51iyugY7KOBZz2ThfT1gwvsGCfWxpLpZDgkGjpEO4Le9cld07OdskikLjDUQJ43dzDaVRSFwQlpdqVg== + integrity: sha512-x0X3kPbholdJZng9wDMhb2swvUi3UYRNAuWAmIPIWlfgAJZp//cql/qblE7181Mg7SjWVwq6ldCPCLn5AY/e7w== /@types/classnames/2.2.7: dev: false resolution: @@ -709,9 +648,13 @@ packages: dev: false resolution: integrity: sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg== + /@types/detect-port/1.1.0: + dev: false + resolution: + integrity: sha1-BwddJk4uWkMmJLHn/8ETef5mvoo= /@types/enzyme/3.9.0: dependencies: - '@types/cheerio': 0.22.10 + '@types/cheerio': 0.22.11 '@types/react': 16.7.22 dev: false resolution: @@ -794,6 +737,12 @@ packages: dev: false resolution: integrity: sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q== + /@types/hoist-non-react-statics/3.3.0: + dependencies: + '@types/react': 16.7.22 + dev: false + resolution: + integrity: sha512-O2OGyW9wlO2bbDmZRH17MecArQfsIa1g//ve2IJk6BnmwEglFz5kdhP1BlgeqjVNH5IHIhsc83DWFo8StCe8+Q== /@types/i18next-browser-languagedetector/2.0.2: dev: false resolution: @@ -802,6 +751,10 @@ packages: dev: false resolution: integrity: sha512-ZiSCqW8j9/gQCYixz1nMhyCprSGh3rwdyX+FHAzEN+bMCmc7yCYjNutl6jvMYSxSIGeL0CLEXPM8Nlk2lE0t5w== + /@types/istanbul-lib-coverage/1.1.0: + dev: false + resolution: + integrity: sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ== /@types/jquery/3.3.29: dependencies: '@types/sizzle': 2.3.2 @@ -812,14 +765,14 @@ packages: dev: false resolution: integrity: sha512-4RKbhIDGC87s4EBy2Cp2/5S2O6kmCRcZnD5KRCq1q9z2GhBte1+BdsfVKCpG8yKpDGNyEE2G6IqFIh6W2YwWPA== - /@types/jsdom/12.2.2: + /@types/jsdom/12.2.3: dependencies: '@types/node': 10.12.18 '@types/tough-cookie': 2.3.5 parse5: 4.0.0 dev: false resolution: - integrity: sha512-+k4AsH9TXsuvucs6EiMxxPPWiXOGyM48P+jL+IPDYhtJ+L7Cl5xbN3Vig6z8tzvo9Lv7mjLGv54j3D/KExQl7Q== + integrity: sha512-CxYWGFsBs0VZ/lU9zxfWk7zYfOlQQuSs5yzk34KW/vQQJGE8OGOYxJnqj9kGHE1SBZGVJvhXs1TafIpZL8RvXw== /@types/json5/0.0.29: dev: false resolution: @@ -828,14 +781,20 @@ packages: dev: false resolution: integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA== + /@types/jsonwebtoken/8.3.1: + dependencies: + '@types/node': 10.12.18 + dev: false + resolution: + integrity: sha512-/ll9KWnKf6qvTtMTdBto5QgKS83pxvxRqRUnmHMpMVab3lOIyfMXNeuvP6t4SQ1aKhv3zuphPUVGRX4vi0pt2g== /@types/lodash/4.14.104: dev: false resolution: integrity: sha512-ufQcVg4daO8xQ5kopxRHanqFdL4AI7ondQkV+2f+7mz3gvp0LkBx2zBRC6hfs3T87mzQFmf5Fck7Fi145Ul6NQ== - /@types/lodash/4.14.121: + /@types/lodash/4.14.122: dev: false resolution: - integrity: sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ== + integrity: sha512-9IdED8wU93ty8gP06ninox+42SBSJHp2IAamsSYMUY76mshRTeUsid/gtbl8ovnOwy8im41ib4cxTiIYMXGKew== /@types/lolex/2.1.3: dev: false resolution: @@ -884,10 +843,10 @@ packages: dev: false resolution: integrity: sha512-8KmlRxwbKZfjUHFIt3q8TF5S2B+/E5BaAoo/3mgc5h6FJzqxXkCK/VMetO+IRDtwtU6HUvovHMBn+XRj7SV9Qg== - /@types/node/9.6.42: + /@types/node/9.6.45: dev: false resolution: - integrity: sha512-SpeVQJFekfnEaZZO1yl4je/36upII36L7gOT4DBx51B1GeAB45mmDb3a5OBQB+ZeFxVVOP37r8Owsl940G/fBg== + integrity: sha512-9scD7xI1kpIoMs3gVFMOWsWDyRIQ1AOZwe56i1CQPE6N/P4POYkn9UtW5F66t8C2AIoPtVfOFycQ2r11t3pcyg== /@types/passport/0.4.7: dependencies: '@types/express': 4.16.1 @@ -898,10 +857,17 @@ packages: dev: false resolution: integrity: sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg== - /@types/qs/6.5.1: + /@types/puppeteer/1.3.0: + dependencies: + '@types/events': 3.0.0 + '@types/node': 10.12.18 + dev: false + resolution: + integrity: sha512-kp1R8cTYymvYezTYWSECtSEDbxnCQaNe3i+fdsZh3dVz7umB8q6LATv0VdJp1DT0evS8YqCrFI5+DaDYJYo6Vg== + /@types/qs/6.5.2: dev: false resolution: - integrity: sha512-mNhVdZHdtKHMMxbqzNK3RzkBcN1cux3AvuCYGTvjEIQT2uheH3eCAyYsbMbh2Bq8nXkeOWs1kyDiF7geWRFQ4Q== + integrity: sha512-47kAAs3yV/hROraCTQYDMh4p/6zI9+gtssjD0kq9OWsGdLcBge59rl49FnCuJ+iWxEKiqFz6KXzeGH5DRVjNJA== /@types/range-parser/1.2.3: dev: false resolution: @@ -924,13 +890,14 @@ packages: dev: false resolution: integrity: sha512-zBrtCb0qhn6XqmkIPZhDzLjZ41k4ppeGoC5iaZotAwBEThGO0BrcpRTLWX69oWplnuBsbiNFvHj0IcT6gl9mdg== - /@types/react-redux/7.0.1: + /@types/react-redux/7.0.2: dependencies: + '@types/hoist-non-react-statics': 3.3.0 '@types/react': 16.7.22 redux: 4.0.1 dev: false resolution: - integrity: sha512-+DIH7TI2MT4Ke4lOrRMgNy//DzTDIzv5QwkJSD6AVrlsIgzf7yMM0JoWL5wJUXYwKQ2f1FgvwlvIVGD2QWQnew== + integrity: sha512-sIOvCQrR2fQBDwNmL+6YXKrqvjGvjdCTN4BxqCUsDYkhpXE7aAlrZaiTqH5r6u+r0o1MEx3J3oxZ0UQZp6lN1A== /@types/react-resize-detector/3.1.1: dependencies: '@types/react': 16.7.22 @@ -962,7 +929,7 @@ packages: /@types/react/16.7.22: dependencies: '@types/prop-types': 15.7.0 - csstype: 2.6.2 + csstype: 2.6.3 dev: false resolution: integrity: sha512-j/3tVoY09kHcTfbia4l67ofQn9xvktUvlC/4QN0KuBHAXlbU/wuGKMb8WfEb/vIcWxsOxHv559uYprkFDFfP8Q== @@ -1060,6 +1027,12 @@ packages: dev: false resolution: integrity: sha512-AaM3cTaHIbIJecuqf15ystbsUL3rtiJHZHhv6hTu1hBeKbvGwUNdHXfqNiY2LMWIT8ip6SqA+M9wYWIsQiMH2g== + /@types/uuid/3.4.4: + dependencies: + '@types/node': 10.12.18 + dev: false + resolution: + integrity: sha512-tPIgT0GUmdJQNSHxp0X2jnpQfBSTfGxUMc/2CXBU2mnyTFVYVa2ojpoQ74w0U2yn2vw3jnC640+77lkFFpdVDw== /@types/webdriverio/4.13.3: dependencies: '@types/node': 10.12.18 @@ -1075,13 +1048,6 @@ packages: dev: false resolution: integrity: sha512-tPw9kaDqwIufHhl6tctCCKCzyeZwXqheeOJ0DRJP5AvQIA7CxeWq4xdSUdcOYHTYOBDoVHYEsXqoo4/vxIVHWQ== - /@types/ws/6.0.1: - dependencies: - '@types/events': 3.0.0 - '@types/node': 10.12.18 - dev: false - resolution: - integrity: sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q== /@types/xmldom/0.1.29: dev: false resolution: @@ -1312,18 +1278,18 @@ packages: node: '>=4' resolution: integrity: sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w= - /ajv-errors/1.0.1/ajv@6.9.2: + /ajv-errors/1.0.1/ajv@6.10.0: dependencies: - ajv: 6.9.2 + ajv: 6.10.0 dev: false id: registry.npmjs.org/ajv-errors/1.0.1 peerDependencies: ajv: '>=5.0.0' resolution: integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - /ajv-keywords/3.4.0/ajv@6.9.2: + /ajv-keywords/3.4.0/ajv@6.10.0: dependencies: - ajv: 6.9.2 + ajv: 6.10.0 dev: false id: registry.npmjs.org/ajv-keywords/3.4.0 peerDependencies: @@ -1339,7 +1305,7 @@ packages: dev: false resolution: integrity: sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - /ajv/6.9.2: + /ajv/6.10.0: dependencies: fast-deep-equal: 2.0.1 fast-json-stable-stringify: 2.0.0 @@ -1347,7 +1313,7 @@ packages: uri-js: 4.2.2 dev: false resolution: - integrity: sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg== + integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== /alphanum-sort/1.0.2: dev: false resolution: @@ -1364,12 +1330,12 @@ packages: dev: false resolution: integrity: sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - /ansi-colors/3.2.3: + /ansi-colors/3.2.4: dev: false engines: node: '>=6' resolution: - integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== /ansi-escapes/3.2.0: dev: false engines: @@ -1439,14 +1405,6 @@ packages: node: '>= 4.0.0' resolution: integrity: sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo= - /append-transform/0.4.0: - dependencies: - default-require-extensions: 1.0.0 - dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-126/jKlNJ24keja61EpLdKthGZE= /aproba/1.2.0: dev: false resolution: @@ -1687,7 +1645,7 @@ packages: /autoprefixer/6.7.7: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30000939 + caniuse-db: 1.0.30000942 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 5.2.18 @@ -1698,7 +1656,7 @@ packages: /autoprefixer/8.6.5: dependencies: browserslist: 3.2.8 - caniuse-lite: 1.0.30000939 + caniuse-lite: 1.0.30000942 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 6.0.23 @@ -2032,13 +1990,13 @@ packages: integrity: sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= /browserify-zlib/0.2.0: dependencies: - pako: 1.0.8 + pako: 1.0.10 dev: false resolution: integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== /browserslist/1.7.7: dependencies: - caniuse-db: 1.0.30000939 + caniuse-db: 1.0.30000942 electron-to-chromium: 1.3.113 deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools. dev: false @@ -2047,7 +2005,7 @@ packages: integrity: sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= /browserslist/3.2.8: dependencies: - caniuse-lite: 1.0.30000939 + caniuse-lite: 1.0.30000942 electron-to-chromium: 1.3.113 dev: false hasBin: true @@ -2055,9 +2013,9 @@ packages: integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== /browserslist/4.1.1: dependencies: - caniuse-lite: 1.0.30000939 + caniuse-lite: 1.0.30000942 electron-to-chromium: 1.3.113 - node-releases: 1.1.8 + node-releases: 1.1.9 dev: false hasBin: true resolution: @@ -2077,6 +2035,10 @@ packages: dev: false resolution: integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + /buffer-equal-constant-time/1.0.1: + dev: false + resolution: + integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= /buffer-equal/0.0.1: dev: false engines: @@ -2269,29 +2231,29 @@ packages: node: '>=4' resolution: integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - /camelcase/5.0.0: + /camelcase/5.2.0: dev: false engines: node: '>=6' resolution: - integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + integrity: sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== /caniuse-api/1.6.1: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30000939 + caniuse-db: 1.0.30000942 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: false resolution: integrity: sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= - /caniuse-db/1.0.30000939: + /caniuse-db/1.0.30000942: dev: false resolution: - integrity: sha512-nB5tLf3hOs+biXl1lhKjHRgNC0J1I7H52h/t1FP7qxARKKwpB0z+P/JewJLYAlxCBP/q7rxJzQzHHrQMl0viKg== - /caniuse-lite/1.0.30000939: + integrity: sha512-HB+j2/Gywe+0JPtEMw8ioTi4ykIOco9nfSGspMGIBocqi4aMYZYALP992RmhVcUyB0oS5h8nrKGk9fCF9L1VXA== + /caniuse-lite/1.0.30000942: dev: false resolution: - integrity: sha512-oXB23ImDJOgQpGjRv1tCtzAvJr4/OvrHi5SO2vUgB0g0xpdZZoA/BxfImiWfdwoYdUTtQrPsXsvYU/dmCSM8gg== + integrity: sha512-wLf+IhZUy2rfz48tc40OH7jHjXjnvDFEYqBHluINs/6MgzoNLPf25zhE4NOVzqxLKndf+hau81sAW0RcGHIaBQ== /capture-stack-trace/1.0.1: dev: false engines: @@ -2501,7 +2463,7 @@ packages: normalize-path: 3.0.0 path-is-absolute: 1.0.1 readdirp: 2.2.1 - upath: 1.1.0 + upath: 1.1.1 dev: false optionalDependencies: fsevents: 1.2.7 @@ -2515,7 +2477,7 @@ packages: dependencies: '@types/core-js': 0.9.46 '@types/mkdirp': 0.3.29 - '@types/node': 9.6.42 + '@types/node': 9.6.45 '@types/rimraf': 0.0.28 is-wsl: 1.1.0 lighthouse-logger: 1.2.0 @@ -3265,10 +3227,10 @@ packages: dev: false resolution: integrity: sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A== - /csstype/2.6.2: + /csstype/2.6.3: dev: false resolution: - integrity: sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow== + integrity: sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg== /currently-unhandled/0.4.1: dependencies: array-find-index: 1.0.2 @@ -3418,7 +3380,7 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - /default-gateway/4.1.2: + /default-gateway/4.2.0: dependencies: execa: 1.0.0 ip-regex: 2.1.0 @@ -3426,15 +3388,7 @@ packages: engines: node: '>=6' resolution: - integrity: sha512-xhJUAp3u02JsBGovj0V6B6uYhKCUOmiNc8xGmReUwGu77NmvcpxPVB0pCielxMFumO7CmXBG02XjM8HB97k8Hw== - /default-require-extensions/1.0.0: - dependencies: - strip-bom: 2.0.0 - dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= + integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== /define-properties/1.1.3: dependencies: object-keys: 1.1.0 @@ -3556,6 +3510,16 @@ packages: hasBin: true resolution: integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + /detect-port/1.3.0: + dependencies: + address: 1.0.3 + debug: 2.6.9 + dev: false + engines: + node: '>= 4.2.1' + hasBin: true + resolution: + integrity: sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== /diff/3.5.0: dev: false engines: @@ -3631,7 +3595,7 @@ packages: dependencies: '@babel/runtime': 7.3.4 '@sheerun/mutationobserver-shim': 0.3.2 - pretty-format: 24.0.0 + pretty-format: 24.3.0 wait-for-expect: 1.1.0 dev: false engines: @@ -3749,6 +3713,12 @@ packages: dev: false resolution: integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + /ecdsa-sig-formatter/1.0.11: + dependencies: + safe-buffer: 5.1.2 + dev: false + resolution: + integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== /ee-first/1.1.1: dev: false resolution: @@ -3795,7 +3765,7 @@ packages: dev: false resolution: integrity: sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== - /electron/4.0.6: + /electron/4.0.7: dependencies: '@types/node': 10.12.18 electron-download: 4.1.1 @@ -3806,7 +3776,7 @@ packages: hasBin: true requiresBuild: true resolution: - integrity: sha512-r2ow/EmDibjoCNJp35mB1CcPs2xBF9fp2eoWuUOJmpVQyzdba6EnqsSD1BxwXzF9vQ5WkQ2UbfXBIvpomrdioQ== + integrity: sha512-KYQ9SJZFWNKqoq6XjKW1bLFHjmAGeSC3XNuhHK/Sd2MK5H5sO3iKjvZU/YhiBUtkB/cBSkOdQTVEaLcMwU8l3A== /elliptic/6.4.1: dependencies: bn.js: 4.11.8 @@ -3869,8 +3839,8 @@ packages: object.assign: 4.1.0 object.values: 1.1.0 prop-types: 15.7.2 - react-is: 16.8.3 - react-test-renderer: 16.8.3 + react-is: 16.8.4 + react-test-renderer: 16.8.4 dev: false peerDependencies: enzyme: ^3.0.0 @@ -3878,17 +3848,17 @@ packages: react-dom: ^16.0.0-0 resolution: integrity: sha512-0QqwEZcBv1xEEla+a3H7FMci+y4ybLia9cZzsdIrId7qcig4MK0kqqf6iiCILH1lsKS6c6AVqL3wGPhCevv5aQ== - /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715: + /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0: dependencies: enzyme: 3.9.0 - enzyme-adapter-utils: /enzyme-adapter-utils/1.10.0/react@16.8.3 + enzyme-adapter-utils: /enzyme-adapter-utils/1.10.0/react@16.8.4 object.assign: 4.1.0 object.values: 1.1.0 prop-types: 15.7.2 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-is: 16.8.3 - react-test-renderer: /react-test-renderer/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-is: 16.8.4 + react-test-renderer: /react-test-renderer/16.8.4/react@16.8.4 dev: false id: registry.npmjs.org/enzyme-adapter-react-16/1.10.0 peerDependencies: @@ -3909,13 +3879,13 @@ packages: react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0 resolution: integrity: sha512-VnIXJDYVTzKGbdW+lgK8MQmYHJquTQZiGzu/AseCZ7eHtOMAj4Rtvk8ZRopodkfPves0EXaHkXBDkVhPa3t0jA== - /enzyme-adapter-utils/1.10.0/react@16.8.3: + /enzyme-adapter-utils/1.10.0/react@16.8.4: dependencies: function.prototype.name: 1.1.0 object.assign: 4.1.0 object.fromentries: 2.0.0 prop-types: 15.7.2 - react: 16.8.3 + react: 16.8.4 semver: 5.6.0 dev: false id: registry.npmjs.org/enzyme-adapter-utils/1.10.0 @@ -4057,7 +4027,7 @@ packages: source-map: 0.6.1 resolution: integrity: sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== - /eslint-scope/4.0.0: + /eslint-scope/4.0.2: dependencies: esrecurse: 4.2.1 estraverse: 4.2.0 @@ -4065,7 +4035,7 @@ packages: engines: node: '>=4.0.0' resolution: - integrity: sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== + integrity: sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg== /esprima/1.0.4: dev: false engines: @@ -4611,10 +4581,6 @@ packages: dev: false resolution: integrity: sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= - /find-root/1.1.0: - dev: false - resolution: - integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== /find-up/1.1.2: dependencies: path-exists: 2.1.0 @@ -4727,7 +4693,7 @@ packages: webpack: ^2.3.0 || ^3.0.0 || ^4.0.0 resolution: integrity: sha512-qNYuygh2GxXehBvQZ5rI5YlQFn+7ZV6kmkyD9Sgs33dWl73NZdUOB5aCp8v0EXJn176AhPrZP8YCMT3h01fs+g== - /fork-ts-checker-webpack-plugin/0.4.15/7d74fab92916d4959c8fedd113bb5af2: + /fork-ts-checker-webpack-plugin/0.4.15/eac3ce3801d5581552f3b0dc4bf4f7c2: dependencies: babel-code-frame: 6.26.0 chalk: 2.4.2 @@ -4737,7 +4703,7 @@ packages: minimatch: 3.0.4 resolve: 1.10.0 tapable: 1.1.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 webpack: 4.29.6 dev: false @@ -4915,10 +4881,12 @@ packages: node: '>= 0.4' resolution: integrity: sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg== - /fuse.js/3.4.2: + /fuse.js/3.4.3: dev: false + engines: + node: '>=6' resolution: - integrity: sha512-WVbrm+cAxPtyMqdtL7cYhR7aZJPhtOfjNClPya8GKMVukKDYs7pEnPINeRVX1C9WmWgU8MdYGYbUPAP2AJXdoQ== + integrity: sha512-XhUzonuhVsxzoBMPQsax7Vzz1n9tnj0S0Ev/c1qzx4SUyd/LFWuSonhdEKtXsAaZzq96QYleWBPDvRiZ7onw8Q== /gauge/2.7.4: dependencies: aproba: 1.2.0 @@ -5256,7 +5224,7 @@ packages: integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= /har-validator/5.1.3: dependencies: - ajv: 6.9.2 + ajv: 6.10.0 har-schema: 2.0.0 dev: false engines: @@ -5410,7 +5378,7 @@ packages: integrity: sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== /hoist-non-react-statics/3.3.0: dependencies: - react-is: 16.8.3 + react-is: 16.8.4 dev: false resolution: integrity: sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== @@ -5513,7 +5481,7 @@ packages: domutils: 1.7.0 entities: 1.1.2 inherits: 2.0.3 - readable-stream: 3.1.1 + readable-stream: 3.2.0 dev: false resolution: integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -5839,7 +5807,7 @@ packages: integrity: sha512-G4uNWK04SOcLK6qtUaRNf15EvLP4h9Y+sm12qFPOvj6WY2nmflF5uF2CrTmV4R4aRKpGOY1Qn9scRlt3QRnVHg== /internal-ip/4.2.0: dependencies: - default-gateway: 4.1.2 + default-gateway: 4.2.0 ipaddr.js: 1.9.0 dev: false engines: @@ -6391,12 +6359,6 @@ packages: node: '>=6' resolution: integrity: sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw== - /istanbul-lib-hook/1.2.2: - dependencies: - append-transform: 0.4.0 - dev: false - resolution: - integrity: sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== /istanbul-lib-instrument/1.10.2: dependencies: babel-generator: 6.26.1 @@ -6409,20 +6371,6 @@ packages: dev: false resolution: integrity: sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - /istanbul-lib-instrument/2.3.2: - dependencies: - '@babel/generator': 7.0.0-beta.51 - '@babel/parser': 7.0.0-beta.51 - '@babel/template': 7.0.0-beta.51 - '@babel/traverse': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - istanbul-lib-coverage: 2.0.3 - semver: 5.6.0 - dev: false - engines: - node: '>=6' - resolution: - integrity: sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q== /istanbul-lib-instrument/3.1.0: dependencies: '@babel/generator': 7.3.4 @@ -6708,6 +6656,10 @@ packages: hasBin: true resolution: integrity: sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + /jsonc-parser/2.0.3: + dev: false + resolution: + integrity: sha512-WJi9y9ABL01C8CxTKxRRQkkSpY/x2bo4Gy0WuiZGrInxQqgxQpvkBCLNcDYcHOSdhx4ODgbFcgAvfL49C+PHgQ== /jsonfile/2.4.0: dev: false optionalDependencies: @@ -6740,6 +6692,24 @@ packages: requiresBuild: true resolution: integrity: sha512-HY5kSg82LHIs0r0h9gYBwpNc1w1qGY0qJ7al01W1bJltsN2lp+mjjA/a79gXWuvD6Xf8oPkD2d5uKMZQXTGzqA== + /jsonwebtoken/8.5.0: + dependencies: + jws: 3.2.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.1 + semver: 5.6.0 + dev: false + engines: + node: '>=4' + npm: '>=1.4.28' + resolution: + integrity: sha512-IqEycp0znWHNA11TpYi77bVgyBO/pGESDh7Ajhas+u0ttkGkKYIIAjniL4Bw5+oVejVF+SYkaI7XKfwCCyeTuA== /jsprim/1.4.1: dependencies: assert-plus: 1.0.0 @@ -6768,6 +6738,21 @@ packages: dev: false resolution: integrity: sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== + /jwa/1.4.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.1.2 + dev: false + resolution: + integrity: sha512-mt6IHaq0ZZWDBspg0Pheu3r9sVNMEZn+GJe1zcdYyhFcDSclp3J8xEdO4PjZolZ2i8xlaVU1LetHM0nJejYsEw== + /jws/3.2.1: + dependencies: + jwa: 1.4.0 + safe-buffer: 5.1.2 + dev: false + resolution: + integrity: sha512-bGA2omSrFUkd72dhh05bIAN832znP4wOU3lfuXtRBuGTbsmNmDXMQg28f0Vsxaxgk4myF5YkKQpz6qeRpMgX9g== /keyv/3.0.0: dependencies: json-buffer: 3.0.0 @@ -6972,10 +6957,6 @@ packages: dev: false resolution: integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - /lodash.clone/4.5.0: - dev: false - resolution: - integrity: sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= /lodash.clonedeep/4.5.0: dev: false resolution: @@ -6988,14 +6969,6 @@ packages: dev: false resolution: integrity: sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= - /lodash.fill/3.4.0: - dev: false - resolution: - integrity: sha1-o8dK5kDQU63w3CB5+HIHiOi/74U= - /lodash.flatten/4.4.0: - dev: false - resolution: - integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= /lodash.flattendeep/4.4.0: dev: false resolution: @@ -7004,38 +6977,46 @@ packages: dev: false resolution: integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - /lodash.intersection/4.4.0: + /lodash.includes/4.3.0: dev: false resolution: - integrity: sha1-ChG6Yx0OlcI8fy9Mu5ppLtF45wU= + integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + /lodash.isboolean/3.0.3: + dev: false + resolution: + integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= /lodash.isequal/4.5.0: dev: false resolution: integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA= - /lodash.memoize/4.1.2: + /lodash.isinteger/4.0.4: dev: false resolution: - integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - /lodash.merge/4.6.1: + integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + /lodash.isnumber/3.0.3: dev: false resolution: - integrity: sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== - /lodash.mergewith/4.6.1: + integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + /lodash.isplainobject/4.0.6: dev: false resolution: - integrity: sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== - /lodash.omit/4.5.0: + integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + /lodash.isstring/4.0.1: + dev: false + resolution: + integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + /lodash.memoize/4.1.2: dev: false resolution: - integrity: sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= - /lodash.partialright/4.2.1: + integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + /lodash.mergewith/4.6.1: dev: false resolution: - integrity: sha1-ATDYDoM2MmTUAHTzKbij56ihzEs= - /lodash.pick/4.4.0: + integrity: sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== + /lodash.once/4.1.1: dev: false resolution: - integrity: sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= /lodash.sortby/4.7.0: dev: false resolution: @@ -7590,11 +7571,11 @@ packages: react: ^0.13.0 || ^0.14.0 || ^15.0.0 || ^16.0.0 resolution: integrity: sha512-WC8yFlwvJ91hy8j6CrydAuFteUafcuvdITFQeHl3LRIf5ayfT/4W3M/byhEYD2BcJWejeXr8y4Rh2H26RunCRQ== - /mobx-react/5.4.3/mobx@5.9.0+react@16.8.3: + /mobx-react/5.4.3/mobx@5.9.0+react@16.8.4: dependencies: hoist-non-react-statics: 3.3.0 mobx: 5.9.0 - react: 16.8.3 + react: 16.8.4 react-lifecycles-compat: 3.0.4 dev: false id: registry.npmjs.org/mobx-react/5.4.3 @@ -7840,7 +7821,7 @@ packages: integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== /nise/1.4.10: dependencies: - '@sinonjs/formatio': 3.1.0 + '@sinonjs/formatio': 3.2.1 '@sinonjs/text-encoding': 0.7.1 just-extend: 4.0.2 lolex: 2.7.5 @@ -7933,26 +7914,17 @@ packages: hasBin: true resolution: integrity: sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - /node-jose/1.1.1: + /node-jose/1.1.2: dependencies: base64url: 3.0.1 es6-promise: 4.2.6 - lodash.assign: 4.2.0 - lodash.clone: 4.5.0 - lodash.fill: 3.4.0 - lodash.flatten: 4.4.0 - lodash.intersection: 4.4.0 - lodash.merge: 4.6.1 - lodash.omit: 4.5.0 - lodash.partialright: 4.2.1 - lodash.pick: 4.4.0 - lodash.uniq: 4.5.0 + lodash: 4.17.11 long: 4.0.0 node-forge: 0.8.1 uuid: 3.3.2 dev: false resolution: - integrity: sha512-GuMQE1UNZGoOX2mPoQ4pYYkynSrDNiq7CzY1YKoJBmFYBZMsAVoAmzpAKBz2uBLNnjet7A4idGXdE3Lck1gjqQ== + integrity: sha512-SotC7+9MGPSDcMlrLFcv09nv33Sw/WPT7qgZOLC0v6nY8E4n7dt7orGO13rGtb3kK163VEwJO06owkXY7LWjrQ== /node-libs-browser/2.2.0: dependencies: assert: 1.4.1 @@ -7981,12 +7953,12 @@ packages: dev: false resolution: integrity: sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== - /node-releases/1.1.8: + /node-releases/1.1.9: dependencies: semver: 5.6.0 dev: false resolution: - integrity: sha512-gQm+K9mGCiT/NXHy+V/ZZS1N/LOaGGqRAAJJs3X9Ah1g+CIbRcBgNyoNYQ+SEtcyAtB9KqDruu+fF7nWjsqRaA== + integrity: sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA== /node-resemble-js/0.0.5: dependencies: pngjs: 2.2.0 @@ -8419,7 +8391,7 @@ packages: got: 8.3.2 lodash: 4.17.11 lru-cache: 4.1.5 - node-jose: 1.1.1 + node-jose: 1.1.2 oidc-token-hash: 3.0.2 p-any: 1.1.0 dev: false @@ -8558,14 +8530,14 @@ packages: node: '>=4' resolution: integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - /p-limit/2.1.0: + /p-limit/2.2.0: dependencies: p-try: 2.0.0 dev: false engines: node: '>=6' resolution: - integrity: sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== + integrity: sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== /p-locate/2.0.0: dependencies: p-limit: 1.3.0 @@ -8576,7 +8548,7 @@ packages: integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= /p-locate/3.0.0: dependencies: - p-limit: 2.1.0 + p-limit: 2.2.0 dev: false engines: node: '>=6' @@ -8627,10 +8599,10 @@ packages: node: '>=4' resolution: integrity: sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - /pako/1.0.8: + /pako/1.0.10: dev: false resolution: - integrity: sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA== + integrity: sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== /parallel-transform/1.1.0: dependencies: cyclist: 0.2.2 @@ -9372,15 +9344,16 @@ packages: dev: false resolution: integrity: sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A== - /pretty-format/24.0.0: + /pretty-format/24.3.0: dependencies: + '@jest/types': 24.3.0 ansi-regex: 4.0.0 ansi-styles: 3.2.1 dev: false engines: node: '>= 6' resolution: - integrity: sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== + integrity: sha512-oz+EQc2uda3ql4JluWTWEQgegTo9cMkVcqXxBieSV1opZ4SE1TKuFBDoSk7jGOb08UgwQVHMkVSINB8jQyUFQg== /process-nextick-args/2.0.0: dev: false resolution: @@ -9430,7 +9403,7 @@ packages: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 16.8.3 + react-is: 16.8.4 dev: false resolution: integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -9453,6 +9426,10 @@ packages: dev: false resolution: integrity: sha1-snxJRunm1dutt1mKZDXTAUxM/Uk= + /proxy-from-env/1.0.0: + dev: false + resolution: + integrity: sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= /prr/1.0.1: dev: false resolution: @@ -9516,6 +9493,22 @@ packages: node: '>=6' resolution: integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /puppeteer/1.11.0: + dependencies: + debug: 4.1.1 + extract-zip: 1.6.7 + https-proxy-agent: 2.2.1 + mime: 2.4.0 + progress: 2.0.3 + proxy-from-env: 1.0.0 + rimraf: 2.6.3 + ws: 6.2.0 + dev: false + engines: + node: '>=6.4.0' + requiresBuild: true + resolution: + integrity: sha512-iG4iMOHixc2EpzqRV+pv7o3GgmU2dNYEMkvKwSaQO/vMZURakwSOn/EYJ6OIRFYOque1qorzIBvrytPIQB3YzQ== /q/1.5.1: dev: false engines: @@ -9679,10 +9672,10 @@ packages: react-dom: ^16.0.0 resolution: integrity: sha512-a4OGEjWTOCJ64GvXwTXEHDEQ8iXZ8Xk30izUKyAVmP5q+Q2AOTMq/qUcHQwpL+XJ81/vTPTIhR//ELjjzYGwFQ== - /react-data-grid/6.0.1/react-dom@16.8.3+react@16.8.3: + /react-data-grid/6.0.1/react-dom@16.8.4+react@16.8.4: dependencies: - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 dev: false id: registry.npmjs.org/react-data-grid/6.0.1 peerDependencies: @@ -9710,7 +9703,7 @@ packages: loader-utils: 1.1.0 opn: 5.4.0 pkg-up: 2.0.0 - react-error-overlay: 5.1.3 + react-error-overlay: 5.1.4 recursive-readdir: 2.2.2 shell-quote: 1.6.1 sockjs-client: 1.1.5 @@ -9750,14 +9743,14 @@ packages: react: '>= 16.3' resolution: integrity: sha1-xKF8cBCeRW2tiQa+g45u6PMrBrU= - /react-dnd/5.0.0/react@16.8.3: + /react-dnd/5.0.0/react@16.8.4: dependencies: dnd-core: 4.0.5 hoist-non-react-statics: 2.5.5 invariant: 2.2.4 lodash: 4.17.11 - react: 16.8.3 - recompose: /recompose/0.27.1/react@16.8.3 + react: 16.8.4 + recompose: /recompose/0.27.1/react@16.8.4 shallowequal: 1.1.0 dev: false id: registry.npmjs.org/react-dnd/5.0.0 @@ -9765,34 +9758,34 @@ packages: react: '>= 16.3' resolution: integrity: sha1-xKF8cBCeRW2tiQa+g45u6PMrBrU= - /react-dom/16.8.3: + /react-dom/16.8.4: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 prop-types: 15.7.2 - scheduler: 0.13.3 + scheduler: 0.13.4 dev: false peerDependencies: react: ^16.0.0 resolution: - integrity: sha512-ttMem9yJL4/lpItZAQ2NTFAbV7frotHk5DZEHXUOws2rMmrsvh1Na7ThGT0dTzUIl6pqTOi5tYREfL8AEna3lA== - /react-dom/16.8.3/react@16.8.3: + integrity: sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ== + /react-dom/16.8.4/react@16.8.4: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 prop-types: 15.7.2 - react: 16.8.3 - scheduler: 0.13.3 + react: 16.8.4 + scheduler: 0.13.4 dev: false - id: registry.npmjs.org/react-dom/16.8.3 + id: registry.npmjs.org/react-dom/16.8.4 peerDependencies: react: ^16.0.0 resolution: - integrity: sha512-ttMem9yJL4/lpItZAQ2NTFAbV7frotHk5DZEHXUOws2rMmrsvh1Na7ThGT0dTzUIl6pqTOi5tYREfL8AEna3lA== - /react-error-overlay/5.1.3: + integrity: sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ== + /react-error-overlay/5.1.4: dev: false resolution: - integrity: sha512-GoqeM3Xadie7XUApXOjkY3Qhs8RkwB/Za4WMedBGrOKH1eTuKGyoAECff7jiVonJchOx6KZ9i8ILO5XIoHB+Tg== + integrity: sha512-fp+U98OMZcnduQ+NSEiQa4s/XMsbp+5KlydmkbESOw4P69iWZ68ZMFM5a2BuE0FgqPBKApJyRuYHR95jM8lAmg== /react-highlight-words/0.14.0: dependencies: highlight-words-core: 1.2.2 @@ -9803,22 +9796,22 @@ packages: react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 resolution: integrity: sha512-DNp1zAIiNqs1nunFv5K67ca0KVSKihbmpZLNwqQj61yMK6zf8YHoGrpLlEt7WEqj1227FOm41FuXiv9KZgcwdA== - /react-highlight-words/0.14.0/react@16.8.3: + /react-highlight-words/0.14.0/react@16.8.4: dependencies: highlight-words-core: 1.2.2 memoize-one: 4.0.3 prop-types: 15.7.2 - react: 16.8.3 + react: 16.8.4 dev: false id: registry.npmjs.org/react-highlight-words/0.14.0 peerDependencies: react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 resolution: integrity: sha512-DNp1zAIiNqs1nunFv5K67ca0KVSKihbmpZLNwqQj61yMK6zf8YHoGrpLlEt7WEqj1227FOm41FuXiv9KZgcwdA== - /react-is/16.8.3: + /react-is/16.8.4: dev: false resolution: - integrity: sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA== + integrity: sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== /react-lifecycles-compat/3.0.4: dev: false resolution: @@ -9836,11 +9829,11 @@ packages: react: ^15.0.0 || ^16.0.0 resolution: integrity: sha512-TV0wQDHHPCEeKJHWXFfEAKJ8uSEsJ9LgrMERkXx05WV/3q6Ig+59KDNaTmjcoqlCpE/sH5PqqLMh4t0QWKrJ8Q== - /react-markdown/3.6.0/react@16.8.3: + /react-markdown/3.6.0/react@16.8.4: dependencies: mdast-add-list-metadata: 1.0.1 prop-types: 15.7.2 - react: 16.8.3 + react: 16.8.4 remark-parse: 5.0.0 unified: 6.2.0 unist-util-visit: 1.4.0 @@ -9858,7 +9851,7 @@ packages: invariant: 2.2.4 loose-envify: 1.4.0 prop-types: 15.7.2 - react-is: 16.8.3 + react-is: 16.8.4 react-lifecycles-compat: 3.0.4 dev: false peerDependencies: @@ -9866,15 +9859,15 @@ packages: redux: ^2.0.0 || ^3.0.0 || ^4.0.0-0 resolution: integrity: sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg== - /react-redux/5.1.1/react@16.8.3+redux@4.0.1: + /react-redux/5.1.1/react@16.8.4+redux@4.0.1: dependencies: '@babel/runtime': 7.3.4 hoist-non-react-statics: 3.3.0 invariant: 2.2.4 loose-envify: 1.4.0 prop-types: 15.7.2 - react: 16.8.3 - react-is: 16.8.3 + react: 16.8.4 + react-is: 16.8.4 react-lifecycles-compat: 3.0.4 redux: 4.0.1 dev: false @@ -9895,12 +9888,12 @@ packages: react: ^16.0.0 resolution: integrity: sha512-T96I8Iqa1hGWyooeFA2Sl6FdPoMhXWINfEKg2/EJLxhP37+/94VNuyuyz9CRqpmApD83IWRR+lbB3r0ADMoKJg== - /react-resize-detector/3.4.0/react@16.8.3: + /react-resize-detector/3.4.0/react@16.8.4: dependencies: lodash: 4.17.11 lodash-es: 4.17.11 prop-types: 15.7.2 - react: 16.8.3 + react: 16.8.4 resize-observer-polyfill: 1.5.1 dev: false id: registry.npmjs.org/react-resize-detector/3.4.0 @@ -9921,14 +9914,14 @@ packages: react: '>=15' resolution: integrity: sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA== - /react-router-dom/4.3.1/react@16.8.3: + /react-router-dom/4.3.1/react@16.8.4: dependencies: history: 4.7.2 invariant: 2.2.4 loose-envify: 1.4.0 prop-types: 15.7.2 - react: 16.8.3 - react-router: /react-router/4.3.1/react@16.8.3 + react: 16.8.4 + react-router: /react-router/4.3.1/react@16.8.4 warning: 4.0.3 dev: false id: registry.npmjs.org/react-router-dom/4.3.1 @@ -9950,7 +9943,7 @@ packages: react: '>=15' resolution: integrity: sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== - /react-router/4.3.1/react@16.8.3: + /react-router/4.3.1/react@16.8.4: dependencies: history: 4.7.2 hoist-non-react-statics: 2.5.5 @@ -9958,7 +9951,7 @@ packages: loose-envify: 1.4.0 path-to-regexp: 1.7.0 prop-types: 15.7.2 - react: 16.8.3 + react: 16.8.4 warning: 4.0.3 dev: false id: registry.npmjs.org/react-router/4.3.1 @@ -9980,30 +9973,30 @@ packages: dev: false resolution: integrity: sha512-ywYLSjNkxKHiZOqNlso9PZByNEY+FTyh3C+7uuziK0xFXu9xzdyfHwg4S9iyiRRoPCR4k2LqaBBsWVmSBwCWYQ== - /react-test-renderer/16.8.3: + /react-test-renderer/16.8.4: dependencies: object-assign: 4.1.1 prop-types: 15.7.2 - react-is: 16.8.3 - scheduler: 0.13.3 + react-is: 16.8.4 + scheduler: 0.13.4 dev: false peerDependencies: react: ^16.0.0 resolution: - integrity: sha512-rjJGYebduKNZH0k1bUivVrRLX04JfIQ0FKJLPK10TAb06XWhfi4gTobooF9K/DEFNW98iGac3OSxkfIJUN9Mdg== - /react-test-renderer/16.8.3/react@16.8.3: + integrity: sha512-jQ9Tf/ilIGSr55Cz23AZ/7H3ABEdo9oy2zF9nDHZyhLHDSLKuoILxw2ifpBfuuwQvj4LCoqdru9iZf7gwFH28A== + /react-test-renderer/16.8.4/react@16.8.4: dependencies: object-assign: 4.1.1 prop-types: 15.7.2 - react: 16.8.3 - react-is: 16.8.3 - scheduler: 0.13.3 + react: 16.8.4 + react-is: 16.8.4 + scheduler: 0.13.4 dev: false - id: registry.npmjs.org/react-test-renderer/16.8.3 + id: registry.npmjs.org/react-test-renderer/16.8.4 peerDependencies: react: ^16.0.0 resolution: - integrity: sha512-rjJGYebduKNZH0k1bUivVrRLX04JfIQ0FKJLPK10TAb06XWhfi4gTobooF9K/DEFNW98iGac3OSxkfIJUN9Mdg== + integrity: sha512-jQ9Tf/ilIGSr55Cz23AZ/7H3ABEdo9oy2zF9nDHZyhLHDSLKuoILxw2ifpBfuuwQvj4LCoqdru9iZf7gwFH28A== /react-testing-library/5.9.0: dependencies: '@babel/runtime': 7.3.4 @@ -10016,12 +10009,12 @@ packages: react-dom: '*' resolution: integrity: sha512-T303PJZvrLKeeiPpjmMD1wxVpzEg9yI0qteH/cUvpFqNHOzPe3yN+Pu+jo9JlxuTMvVGPAmCAcgZ3sEtEDpJUQ== - /react-testing-library/5.9.0/react-dom@16.8.3+react@16.8.3: + /react-testing-library/5.9.0/react-dom@16.8.4+react@16.8.4: dependencies: '@babel/runtime': 7.3.4 dom-testing-library: 3.16.8 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 dev: false engines: node: '>=8' @@ -10045,15 +10038,15 @@ packages: react-dom: ^15.3.0 || ^16.0.0-alpha resolution: integrity: sha512-duKD2HvO33mqld4EtQKm9H9H0p+xce1c++2D5xn59Ma7P8VT7CprfAe5hwjd1OGkyhqzOZiTMlTal7LxjH5yBQ== - /react-virtualized/9.21.0/react-dom@16.8.3+react@16.8.3: + /react-virtualized/9.21.0/react-dom@16.8.4+react@16.8.4: dependencies: babel-runtime: 6.26.0 classnames: 2.2.6 dom-helpers: 3.4.0 loose-envify: 1.4.0 prop-types: 15.7.2 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 react-lifecycles-compat: 3.0.4 dev: false id: registry.npmjs.org/react-virtualized/9.21.0 @@ -10062,17 +10055,17 @@ packages: react-dom: ^15.3.0 || ^16.0.0-alpha resolution: integrity: sha512-duKD2HvO33mqld4EtQKm9H9H0p+xce1c++2D5xn59Ma7P8VT7CprfAe5hwjd1OGkyhqzOZiTMlTal7LxjH5yBQ== - /react/16.8.3: + /react/16.8.4: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 prop-types: 15.7.2 - scheduler: 0.13.3 + scheduler: 0.13.4 dev: false engines: node: '>=0.10.0' resolution: - integrity: sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA== + integrity: sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg== /read-chunk/1.0.1: dev: false engines: @@ -10138,7 +10131,7 @@ packages: dev: false resolution: integrity: sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - /readable-stream/3.1.1: + /readable-stream/3.2.0: dependencies: inherits: 2.0.3 string_decoder: 1.2.0 @@ -10147,7 +10140,7 @@ packages: engines: node: '>= 6' resolution: - integrity: sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== + integrity: sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== /readdirp/2.2.1: dependencies: graceful-fs: 4.1.15 @@ -10183,13 +10176,13 @@ packages: react: ^0.14.0 || ^15.0.0 || ^16.0.0 resolution: integrity: sha512-p7xsyi/rfNjHfdP7vPU02uSFa+Q1eHhjKrvO+3+kRP4Ortj+MxEmpmd+UQtBGM2D2iNAjzNI5rCyBKp9Ob5McA== - /recompose/0.27.1/react@16.8.3: + /recompose/0.27.1/react@16.8.4: dependencies: babel-runtime: 6.26.0 change-emitter: 0.1.6 fbjs: 0.8.17 hoist-non-react-statics: 2.5.5 - react: 16.8.3 + react: 16.8.4 react-lifecycles-compat: 3.0.4 symbol-observable: 1.2.0 dev: false @@ -10731,13 +10724,13 @@ packages: dev: false resolution: integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - /scheduler/0.13.3: + /scheduler/0.13.4: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 dev: false resolution: - integrity: sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ== + integrity: sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA== /schema-utils/0.3.0: dependencies: ajv: 5.5.2 @@ -10748,8 +10741,8 @@ packages: integrity: sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8= /schema-utils/0.4.7: dependencies: - ajv: 6.9.2 - ajv-keywords: /ajv-keywords/3.4.0/ajv@6.9.2 + ajv: 6.10.0 + ajv-keywords: /ajv-keywords/3.4.0/ajv@6.10.0 dev: false engines: node: '>= 4' @@ -10757,9 +10750,9 @@ packages: integrity: sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== /schema-utils/1.0.0: dependencies: - ajv: 6.9.2 - ajv-errors: /ajv-errors/1.0.1/ajv@6.9.2 - ajv-keywords: /ajv-keywords/3.4.0/ajv@6.9.2 + ajv: 6.10.0 + ajv-errors: /ajv-errors/1.0.1/ajv@6.10.0 + ajv-keywords: /ajv-keywords/3.4.0/ajv@6.10.0 dev: false engines: node: '>= 4' @@ -10968,10 +10961,10 @@ packages: sinon: '>=4.0.0 <8.0.0' resolution: integrity: sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA== - /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5: + /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7: dependencies: chai: 4.2.0 - sinon: 7.2.5 + sinon: 7.2.7 dev: false id: registry.npmjs.org/sinon-chai/3.3.0 peerDependencies: @@ -10979,10 +10972,10 @@ packages: sinon: '>=4.0.0 <8.0.0' resolution: integrity: sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA== - /sinon/7.2.5: + /sinon/7.2.7: dependencies: - '@sinonjs/commons': 1.3.0 - '@sinonjs/formatio': 3.1.0 + '@sinonjs/commons': 1.4.0 + '@sinonjs/formatio': 3.2.1 '@sinonjs/samsam': 3.2.0 diff: 3.5.0 lolex: 3.1.0 @@ -10990,7 +10983,7 @@ packages: supports-color: 5.5.0 dev: false resolution: - integrity: sha512-1c2KK6g5NQr9XNYCEcUbeFtBpKZD1FXEw0VX7gNhWUBtkchguT2lNdS7XmS7y64OpQWfSNeeV/f8py3NNcQ63Q== + integrity: sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g== /slash/1.0.0: dev: false engines: @@ -11174,7 +11167,7 @@ packages: detect-node: 2.0.4 hpack.js: 2.1.6 obuf: 1.1.2 - readable-stream: 3.1.1 + readable-stream: 3.2.0 wbuf: 1.7.3 dev: false resolution: @@ -11991,7 +11984,7 @@ packages: dev: false resolution: integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - /tslint-consistent-codestyle/1.15.0: + /tslint-consistent-codestyle/1.15.1: dependencies: '@fimbul/bifrost': 0.17.0 tslib: 1.9.3 @@ -12001,21 +11994,21 @@ packages: tslint: ^5.0.0 typescript: '>=2.1.4 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >=3.1.0-dev || >=3.2.0-dev || >=3.3.0-dev || >=3.4.0-dev' resolution: - integrity: sha512-6BNDBbZh2K0ibRXe70Mkl9gfVttxQ3t3hqV1BRDfpIcjrUoOgD946iH4SrXp+IggDgeMs3dJORjD5tqL5j4jXg== - /tslint-consistent-codestyle/1.15.0/tslint@5.13.0+typescript@3.2.4: + integrity: sha512-38Y3Dz4zcABe/PlPAQSGNEWPGVq0OzcIQR7SEU6dNujp/SgvhxhJOhIhI9gY4r0I3/TNtvVQwARWor9O9LPZWg== + /tslint-consistent-codestyle/1.15.1/tslint@5.13.1+typescript@3.2.4: dependencies: - '@fimbul/bifrost': /@fimbul/bifrost/0.17.0/tslint@5.13.0+typescript@3.2.4 + '@fimbul/bifrost': /@fimbul/bifrost/0.17.0/tslint@5.13.1+typescript@3.2.4 tslib: 1.9.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 tsutils: /tsutils/2.29.0/typescript@3.2.4 typescript: 3.2.4 dev: false - id: registry.npmjs.org/tslint-consistent-codestyle/1.15.0 + id: registry.npmjs.org/tslint-consistent-codestyle/1.15.1 peerDependencies: tslint: ^5.0.0 typescript: '>=2.1.4 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >=3.1.0-dev || >=3.2.0-dev || >=3.3.0-dev || >=3.4.0-dev' resolution: - integrity: sha512-6BNDBbZh2K0ibRXe70Mkl9gfVttxQ3t3hqV1BRDfpIcjrUoOgD946iH4SrXp+IggDgeMs3dJORjD5tqL5j4jXg== + integrity: sha512-38Y3Dz4zcABe/PlPAQSGNEWPGVq0OzcIQR7SEU6dNujp/SgvhxhJOhIhI9gY4r0I3/TNtvVQwARWor9O9LPZWg== /tslint-loader/3.6.0: dependencies: loader-utils: 1.2.3 @@ -12028,21 +12021,21 @@ packages: tslint: '>=4.0.0' resolution: integrity: sha512-Me9Qf/87BOfCY8uJJw+J7VMF4U8WiMXKLhKKKugMydF0xMhMOt9wo2mjYTNhwbF9H7SHh8PAIwRG8roisTNekQ== - /tslint-loader/3.6.0/tslint@5.13.0: + /tslint-loader/3.6.0/tslint@5.13.1: dependencies: loader-utils: 1.2.3 mkdirp: 0.5.1 object-assign: 4.1.1 rimraf: 2.6.3 semver: 5.6.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 dev: false id: registry.npmjs.org/tslint-loader/3.6.0 peerDependencies: tslint: '>=4.0.0' resolution: integrity: sha512-Me9Qf/87BOfCY8uJJw+J7VMF4U8WiMXKLhKKKugMydF0xMhMOt9wo2mjYTNhwbF9H7SHh8PAIwRG8roisTNekQ== - /tslint/5.13.0: + /tslint/5.13.1: dependencies: babel-code-frame: 6.26.0 builtin-modules: 1.1.1 @@ -12064,8 +12057,8 @@ packages: peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' resolution: - integrity: sha512-ECOOQRxXCYnUUePG5h/+Z1Zouobk3KFpIHA9aKBB/nnMxs97S1JJPDGt5J4cGm1y9U9VmVlfboOxA8n1kSNzGw== - /tslint/5.13.0/typescript@3.2.4: + integrity: sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ== + /tslint/5.13.1/typescript@3.2.4: dependencies: babel-code-frame: 6.26.0 builtin-modules: 1.1.1 @@ -12085,11 +12078,11 @@ packages: engines: node: '>=4.8.0' hasBin: true - id: registry.npmjs.org/tslint/5.13.0 + id: registry.npmjs.org/tslint/5.13.1 peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' resolution: - integrity: sha512-ECOOQRxXCYnUUePG5h/+Z1Zouobk3KFpIHA9aKBB/nnMxs97S1JJPDGt5J4cGm1y9U9VmVlfboOxA8n1kSNzGw== + integrity: sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ== /tsutils/2.29.0: dependencies: tslib: 1.9.3 @@ -12192,6 +12185,15 @@ packages: typedoc: '>=0.7 <1.0' resolution: integrity: sha512-Erc0MyKDGYIN7kSlIjgifVieZEogg8YwOH8bjW6RXb0y44hVeTER0UoW6Rh+n8leg6rvlPdnH092aFfcd8kRlA== + /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1: + dependencies: + typedoc: 0.11.1 + dev: false + id: registry.npmjs.org/typedoc-plugin-external-module-name/1.1.3 + peerDependencies: + typedoc: '>=0.7 <1.0' + resolution: + integrity: sha512-/VMawTW4NnUUsgq0o8O37y9MmXFaOCDrH1dvDg7SZUS5ZSpUPSILVWwGJP+7g4I8vKZ5bBKZKHfPIEA4xUC+PQ== /typedoc-plugin-internal-external/1.0.10: dev: false peerDependencies: @@ -12483,12 +12485,13 @@ packages: node: '>=4' resolution: integrity: sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - /upath/1.1.0: + /upath/1.1.1: dev: false engines: node: '>=4' + yarn: '>=1' resolution: - integrity: sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== + integrity: sha512-D0yetkpIOKiZQquxjM2Syvy48Y1DbZ0SWxgsZiwd9GCWRpc75vN8ytzem14WDSg+oiX6+Qt31FpiS/ExODCrLg== /update-notifier/2.5.0: dependencies: boxen: 1.3.0 @@ -12803,7 +12806,7 @@ packages: webdriverio: ^4.0.7 resolution: integrity: sha1-+zJrGmuXUaE8LOpRH9cGLgW3Ok0= - /wdio-screenshot/0.6.0/webdriverio@4.14.2: + /wdio-screenshot/0.6.0/webdriverio@4.14.3: dependencies: babel-runtime: 6.26.0 debug: 2.6.9 @@ -12813,7 +12816,7 @@ packages: jimp: 0.2.28 lodash: 4.17.11 uuid: 3.3.2 - webdriverio: 4.14.2 + webdriverio: 4.14.3 which: 1.3.1 dev: false engines: @@ -12854,7 +12857,7 @@ packages: webdriverio: ^4.0.7 resolution: integrity: sha1-yspVBwEPAqIKC4PTIfKJ461WXl4= - /wdio-visual-regression-service/0.9.0/webdriverio@4.14.2: + /wdio-visual-regression-service/0.9.0/webdriverio@4.14.3: dependencies: babel-runtime: 6.26.0 debug: 2.6.9 @@ -12863,15 +12866,15 @@ packages: node-resemble-js: 0.0.5 nodeclient-spectre: 1.0.5 platform: 1.3.5 - wdio-screenshot: /wdio-screenshot/0.6.0/webdriverio@4.14.2 - webdriverio: 4.14.2 + wdio-screenshot: /wdio-screenshot/0.6.0/webdriverio@4.14.3 + webdriverio: 4.14.3 dev: false id: registry.npmjs.org/wdio-visual-regression-service/0.9.0 peerDependencies: webdriverio: ^4.0.7 resolution: integrity: sha1-yspVBwEPAqIKC4PTIfKJ461WXl4= - /webdriverio/4.14.2: + /webdriverio/4.14.3: dependencies: archiver: 2.1.1 babel-runtime: 6.26.0 @@ -12900,7 +12903,7 @@ packages: node: '>= 4.8.5' hasBin: true resolution: - integrity: sha512-eZXiu0ST6KBi6Pz8tDArw5bNgGu6aohrkA8GFADk1HzClSyf+3arcS16Q7n7SaUPz/ZemsLIw5nQO8eb6v8L3g== + integrity: sha512-CBp069g7b0oGvcdChYx2qyDm9WfGCAclK6J+PSK8Efj9Q059we7knBgeHZfwNwgvdQFitXwlLUGX3+Z9WHcpGA== /webidl-conversions/4.0.2: dev: false resolution: @@ -12949,7 +12952,7 @@ packages: webpack: 4.x.x resolution: integrity: sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q== - /webpack-dev-middleware/3.6.0: + /webpack-dev-middleware/3.6.1: dependencies: memory-fs: 0.4.1 mime: 2.4.0 @@ -12961,8 +12964,8 @@ packages: peerDependencies: webpack: ^4.0.0 resolution: - integrity: sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg== - /webpack-dev-middleware/3.6.0/webpack@4.29.6: + integrity: sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw== + /webpack-dev-middleware/3.6.1/webpack@4.29.6: dependencies: memory-fs: 0.4.1 mime: 2.4.0 @@ -12972,11 +12975,11 @@ packages: dev: false engines: node: '>= 6' - id: registry.npmjs.org/webpack-dev-middleware/3.6.0 + id: registry.npmjs.org/webpack-dev-middleware/3.6.1 peerDependencies: webpack: ^4.0.0 resolution: - integrity: sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg== + integrity: sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw== /webpack-dev-server/3.2.1: dependencies: ansi-html: 0.0.7 @@ -13006,7 +13009,7 @@ packages: strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack-dev-middleware: 3.6.0 + webpack-dev-middleware: 3.6.1 webpack-log: 2.0.0 yargs: 12.0.2 dev: false @@ -13047,7 +13050,7 @@ packages: supports-color: 6.1.0 url: 0.11.0 webpack: 4.29.6 - webpack-dev-middleware: /webpack-dev-middleware/3.6.0/webpack@4.29.6 + webpack-dev-middleware: /webpack-dev-middleware/3.6.1/webpack@4.29.6 webpack-log: 2.0.0 yargs: 12.0.2 dev: false @@ -13061,7 +13064,7 @@ packages: integrity: sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw== /webpack-log/2.0.0: dependencies: - ansi-colors: 3.2.3 + ansi-colors: 3.2.4 uuid: 3.3.2 dev: false engines: @@ -13119,11 +13122,11 @@ packages: '@webassemblyjs/wasm-parser': 1.8.5 acorn: 6.1.1 acorn-dynamic-import: /acorn-dynamic-import/4.0.0/acorn@6.1.1 - ajv: 6.9.2 - ajv-keywords: /ajv-keywords/3.4.0/ajv@6.9.2 + ajv: 6.10.0 + ajv-keywords: /ajv-keywords/3.4.0/ajv@6.10.0 chrome-trace-event: 1.0.0 enhanced-resolve: 4.1.0 - eslint-scope: 4.0.0 + eslint-scope: 4.0.2 json-parse-better-errors: 1.0.2 loader-runner: 2.4.0 loader-utils: 1.2.3 @@ -13270,12 +13273,12 @@ packages: dev: false resolution: integrity: sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - /ws/6.1.4: + /ws/6.2.0: dependencies: async-limiter: 1.0.0 dev: false resolution: - integrity: sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== + integrity: sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w== /x-is-string/0.1.0: dev: false resolution: @@ -13409,7 +13412,7 @@ packages: integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== /yargs-parser/11.1.1: dependencies: - camelcase: 5.0.0 + camelcase: 5.2.0 decamelize: 1.2.0 dev: false resolution: @@ -13553,14 +13556,14 @@ packages: openid-client: 2.4.5 passport: 0.4.0 path: 0.12.7 - react: 16.8.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + react: 16.8.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typemoq: 2.1.0 typescript: 3.2.4 dev: false name: '@rush-temp/agent-test-app' resolution: - integrity: sha512-w5m3H94Z7b3lY2/oyBhU1GbFVW6ypnOcZk03UIIEw8fwDmdKrPXYC72NiFV65lv5wnNe7gI9wbtqt3pnf+VxaQ== + integrity: sha512-y1CCGn8c/uNnXHAfsvzfk2THJd4bOAZXdneXrGuJTtQCHpcXxzD2AJyjaxZW4DcoMpC75upIZyFRnDFOYdXppA== tarball: 'file:projects/agent-test-app.tgz' version: 0.0.0 'file:projects/bentleyjs-core.tgz': @@ -13573,13 +13576,14 @@ packages: nyc: 13.3.0 rimraf: 2.6.3 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/bentleyjs-core' resolution: - integrity: sha512-V8xmcGg10YatNkjbY8sds0NiGytdBZyilv+KFob3tBlEzHJau8v3qu1qaWVK7lFi4GQHiN6nlJ/8IibVWb6V6g== + integrity: sha512-R4M4h1ugvEGMyXSbzK5BZkHvD36T5liQ5KnU8MHpP4atJxGo1QtIWPXJUs9sfYFljE+wy0WwcltgifUJ49l1QA== tarball: 'file:projects/bentleyjs-core.tgz' version: 0.0.0 'file:projects/build-tools.tgz': @@ -13615,8 +13619,8 @@ packages: ts-node: 7.0.1 tsconfig-paths: 3.8.0 tslib: 1.9.3 - tslint: /tslint/5.13.0/typescript@3.2.4 - tslint-consistent-codestyle: /tslint-consistent-codestyle/1.15.0/tslint@5.13.0+typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 + tslint-consistent-codestyle: /tslint-consistent-codestyle/1.15.1/tslint@5.13.1+typescript@3.2.4 tsutils: /tsutils/3.8.0/typescript@3.2.4 typedoc: 0.11.1 typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.1/typedoc@0.11.1 @@ -13632,6 +13636,38 @@ packages: integrity: sha512-RqRNFP4o6Fx6LuzIdwCZNiQbsXF0BBoiRQr37Z22PvYGVL681iu3NxKeRYA10zUJ3Dt1WiQJuaqDoogrgBcTzw== tarball: 'file:projects/build-tools.tgz' version: 0.0.0 + 'file:projects/certa.tgz': + dependencies: + '@types/chai': 4.1.7 + '@types/detect-port': 1.1.0 + '@types/express': 4.16.1 + '@types/lodash': 4.14.122 + '@types/mocha': 5.2.6 + '@types/node': 10.12.18 + '@types/puppeteer': 1.3.0 + '@types/uuid': 3.4.4 + '@types/yargs': 12.0.9 + cpx: 1.5.0 + detect-port: 1.3.0 + electron: 4.0.7 + express: 4.16.4 + jsonc-parser: 2.0.3 + lodash: 4.17.11 + mocha: 5.2.0 + nyc: 13.3.0 + puppeteer: 1.11.0 + rimraf: 2.6.3 + source-map-support: 0.5.10 + tslint: /tslint/5.13.1/typescript@3.2.4 + typescript: 3.2.4 + uuid: 3.3.2 + yargs: 12.0.5 + dev: false + name: '@rush-temp/certa' + resolution: + integrity: sha512-KoaHgFp1QRImdORn5LmWq6MCbiF+amuqJn4V1Vyq1XTGVu1UWRXdxJGUM93GFuvMswvRPFgaEeMoZLMr+vm5kA== + tarball: 'file:projects/certa.tgz' + version: 0.0.0 'file:projects/config-loader.tgz': dependencies: '@types/json5': 0.0.30 @@ -13639,14 +13675,40 @@ packages: chalk: 2.4.2 json5: 2.1.0 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 dev: false name: '@rush-temp/config-loader' resolution: - integrity: sha512-EXiYhQhWQ4hZ6TwrSHQEBHuCo31duHtnNRa/1/vJtTCKfoTmmmXxCHRjuSITdjesQ99xBwLXm9tvm0kQqQpqNQ== + integrity: sha512-D5rHktl+RZ3K+IOP69sklPOTVPJGekOrdS5iE32uhZureYO9fW7/s5zZPcsgUtJOK//EbBHC28LlvlKpTMwSaA== tarball: 'file:projects/config-loader.tgz' version: 0.0.0 + 'file:projects/core-integration-tests.tgz': + dependencies: + '@types/chai': 4.1.7 + '@types/express': 4.16.1 + '@types/mocha': 5.2.6 + '@types/node': 10.12.18 + '@types/webpack': 3.8.17 + chai: 4.2.0 + cpx: 1.5.0 + electron: 4.0.7 + express: 4.16.4 + glob: 7.1.3 + istanbul-instrumenter-loader: /istanbul-instrumenter-loader/3.0.1/webpack@4.29.6 + null-loader: 0.1.1 + nyc: 13.3.0 + rimraf: 2.6.3 + source-map-loader: 0.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 + typescript: 3.2.4 + webpack: 4.29.6 + dev: false + name: '@rush-temp/core-integration-tests' + resolution: + integrity: sha512-Tj51p4jX/DnN+je/1RQnm9XnA59zji2lAjrHcALcK1cHE9Rczi3f9hIVpEa49P1Q6PWh02HehDfGSmMQKqqQMw== + tarball: 'file:projects/core-integration-tests.tgz' + version: 0.0.0 'file:projects/display-performance-test-app.tgz': dependencies: '@types/body-parser': 1.17.0 @@ -13655,7 +13717,7 @@ packages: body-parser: 1.18.3 child_process: 1.0.2 chrome-launcher: 0.10.5 - electron: 4.0.6 + electron: 4.0.7 express: 4.16.4 node-glob: 1.2.0 npm-run-all: 4.1.5 @@ -13663,12 +13725,12 @@ packages: popper.js: 1.14.7 rimraf: 2.6.3 tooltip.js: 1.3.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 dev: false name: '@rush-temp/display-performance-test-app' resolution: - integrity: sha512-mgJ3jWEfF/Noghat/kI+tzV6Xk/9NBn+wjuHLOp8rFUHr9B1zgZPFNbt/xTstaxyGnt17SjKf/mKaOVfqssUaA== + integrity: sha512-7W6ORMVy4LlsmhU2RTGD+T6yI50YDZhyMxCVucegvFDNyJboEkXCSYMtpr/s0qIjA4Ocu/jPgH2jF6Xz7COBsQ== tarball: 'file:projects/display-performance-test-app.tgz' version: 0.0.0 'file:projects/display-test-app.tgz': @@ -13679,7 +13741,7 @@ packages: body-parser: 1.18.3 child_process: 1.0.2 cpx: 1.5.0 - electron: 4.0.6 + electron: 4.0.7 express: 4.16.4 fs-extra: 6.0.1 node-glob: 1.2.0 @@ -13688,12 +13750,13 @@ packages: popper.js: 1.14.7 rimraf: 2.6.3 tooltip.js: 1.3.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 + webpack: 4.29.6 dev: false name: '@rush-temp/display-test-app' resolution: - integrity: sha512-hGu/kQLBT2ni5pCtaSNC7NDOfmR6OPQRx0IzdgwSIJ2wm4r6615hizcdRAIHgAf3ShaJ+TtyWEDN8OnjYzOg2w== + integrity: sha512-sJbFhnAYXUjszbIZwO5I0KLLqDEloWvDosnRded1XBhJh9nSY+VPQG9XxTu1WZ2h64t1kZlOZgkn9DgwGGQ5xg== tarball: 'file:projects/display-test-app.tgz' version: 0.0.0 'file:projects/ecschema-metadata.tgz': @@ -13712,29 +13775,30 @@ packages: mocha: 5.2.0 nyc: 13.3.0 rimraf: 2.6.3 - sinon: 7.2.5 + sinon: 7.2.7 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/ecschema-metadata' resolution: - integrity: sha512-oQ9i5XkNYoDQa3NeuYchAXgt/wB0UkLaABHzscua5JnoXujPaHx83rXAHys95Fn1A7J9wK0kZUSWCfsyHZfuzw== + integrity: sha512-kSSbOkxIgs17haz8UlU4cMsJ9BgNdNEJnavGnaHWdwebFse1f9pAk39B2pao0px/dIDQil12oVv+pQD0Nc2JVA== tarball: 'file:projects/ecschema-metadata.tgz' version: 0.0.0 'file:projects/electron-manager.tgz': dependencies: '@types/node': 10.12.18 - electron: 4.0.6 + electron: 4.0.7 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/electron-manager' resolution: - integrity: sha512-XNsLTDh+kqvzVjlqUHH2m22MZ9lEJb7CoOdoY5+1xSpmYosmWVVHlyAGTX/UJXDAcG21eJKFxJCeLM2S0uTHUA== + integrity: sha512-I8MZikTDxOus25Ru/F87MVyHOQwBSD5xtVOdp6284JvKx5upx/+XmiRc2/YZiawP+RA+48bQWM6bwmZS3z0V7Q== tarball: 'file:projects/electron-manager.tgz' version: 0.0.0 'file:projects/example-code-app.tgz': @@ -13753,10 +13817,10 @@ packages: chai: 4.2.0 commander: 2.19.0 cpx: 1.5.0 - electron: 4.0.6 + electron: 4.0.7 express: 4.16.4 fs-extra: 6.0.1 - fuse.js: 3.4.2 + fuse.js: 3.4.3 i18next: 10.6.0 i18next-browser-languagedetector: 2.2.4 i18next-xhr-backend: 2.0.1 @@ -13766,14 +13830,14 @@ packages: mocha: 5.2.0 rimraf: 2.6.3 save: 2.3.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 webpack: 4.29.6 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/example-code-app' resolution: - integrity: sha512-jKV6FdAp5BaaxqTNOuCSQQsPFNdyBwsyBIDOu91MVZRNMjc4sL5vwyNBGk5D4l2PLgv4g5jsish7a9veHEjvRQ== + integrity: sha512-oZqwjFIM+zWPk7CH8zme1bW200UcR3ISjdnQ2UxbmVKhSCRqKQVXzNwQSiKlpcgv5NAKXBsLX5NveL+J5P3oVw== tarball: 'file:projects/example-code-app.tgz' version: 0.0.0 'file:projects/example-code-snippets.tgz': @@ -13792,10 +13856,10 @@ packages: chai: 4.2.0 commander: 2.19.0 cpx: 1.5.0 - electron: 4.0.6 + electron: 4.0.7 express: 4.16.4 fs-extra: 6.0.1 - fuse.js: 3.4.2 + fuse.js: 3.4.3 i18next: 10.6.0 i18next-browser-languagedetector: 2.2.4 i18next-xhr-backend: 2.0.1 @@ -13803,15 +13867,29 @@ packages: mocha: 5.2.0 rimraf: 2.6.3 save: 2.3.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 webpack: 4.29.6 dev: false name: '@rush-temp/example-code-snippets' resolution: - integrity: sha512-8F1qCJA8sPg3OsAqGT8v8Gx1VTY3oDos2aIYasknVL4TVyzaCsRDEP44MTR/OxduVI8tHB95iXDf4U5jZsdetg== + integrity: sha512-umhqJQ6+1mKX3mns/Zr2iHjXXMfHnY1uou5Tisw8Vu0qFfkKVjU/GvA80MlU5mVz+7yjbK1SEn2XgFuO7f++IQ== tarball: 'file:projects/example-code-snippets.tgz' version: 0.0.0 + 'file:projects/export-obj.tgz': + dependencies: + '@types/node': 10.12.18 + '@types/yargs': 12.0.9 + rimraf: 2.6.3 + tslint: /tslint/5.13.1/typescript@3.2.4 + typescript: 3.2.4 + yargs: 12.0.5 + dev: false + name: '@rush-temp/export-obj' + resolution: + integrity: sha512-hcdnkVFrPremNTvK34HLAAsilFOtxRakZ7QAPqC7qWjzmHGaxZ/ppQ5jrMC+bq0MJZOTGCA/U4rWLNcgAfwmIg== + tarball: 'file:projects/export-obj.tgz' + version: 0.0.0 'file:projects/geometry-core.tgz': dependencies: '@types/chai': 4.1.7 @@ -13825,36 +13903,37 @@ packages: rimraf: 2.6.3 semver: 5.6.0 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/geometry-core' resolution: - integrity: sha512-OYrXYRXphy6MzVk/elmU1dIU7xrxWamUJ/IDJlsFde4/hu7atcDxPkksoQaL9WDRcubNTW85UL32CduHEQQXBQ== + integrity: sha512-eu5C5xywrCDKh36m6ruZ4P3mi67MS58z8xT52jGVeEkUkD1i54eOzb4HhwYx938dkLBr1acP+V6FAz52+LgIHw== tarball: 'file:projects/geometry-core.tgz' version: 0.0.0 'file:projects/imodel-from-geojson.tgz': dependencies: '@types/fs-extra': 4.0.8 - '@types/lodash': 4.14.121 + '@types/lodash': 4.14.122 '@types/node': 10.12.18 '@types/yargs': 12.0.9 fs-extra: 6.0.1 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 yargs: 12.0.5 dev: false name: '@rush-temp/imodel-from-geojson' resolution: - integrity: sha512-Jm16ak5DoZ1tL2LrHXWkRoHY8cST9sHhtQmdpthcyfHvLKOGgAom3Iu/KFQ6MdL3TuExZFxa0FEUgagZ50+oVQ== + integrity: sha512-rRrbGAttvaY/1BkKhVFfMT2x8ubaA0IrHwSyvUR9v76zbHanRHlaGCMWfZOPJXUG7jWgsYGkj98+PRJR5oFenw== tarball: 'file:projects/imodel-from-geojson.tgz' version: 0.0.0 'file:projects/imodel-from-reality-model.tgz': dependencies: '@types/fs-extra': 4.0.8 - '@types/lodash': 4.14.121 + '@types/lodash': 4.14.122 '@types/node': 10.12.18 '@types/request-promise-native': 1.0.15 '@types/yargs': 12.0.9 @@ -13862,18 +13941,18 @@ packages: request: 2.88.0 request-promise-native: /request-promise-native/1.0.7/request@2.88.0 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 yargs: 12.0.5 dev: false name: '@rush-temp/imodel-from-reality-model' resolution: - integrity: sha512-saKQPjEkL4FWKtEmO8LFr50iJ+7lqLArjEwCwO+BJRTuFYuNTJlQnLKNfEv+61n9M9oYYvZR/fKORoP8fSKjmg== + integrity: sha512-e4PlPjVSNprz+HIBjDT9UQLvoyN1IfsN/ljqCzbiPeIeMW1SnQfsL8kA8Fja4qN9rgztf34tXpsEDmJtrpZS6g== tarball: 'file:projects/imodel-from-reality-model.tgz' version: 0.0.0 'file:projects/imodeljs-backend.tgz': dependencies: - '@bentley/imodeljs-native': npm.bentley.com/@bentley/imodeljs-native/0.99.0 + '@bentley/imodeljs-native': npm.bentley.com/@bentley/imodeljs-native/0.102.3 '@types/body-parser': 1.17.0 '@types/chai': 4.1.7 '@types/express': 4.16.1 @@ -13900,15 +13979,16 @@ packages: semver: 5.6.0 source-map-support: 0.5.10 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 webpack: 4.29.6 dev: false name: '@rush-temp/imodeljs-backend' resolution: - integrity: sha512-FY9gPXA2+JYhZtiHPnrY1ogFNe4h83mb9ZOpqmB6G9xdqD4HLDQLP2ut62YwPvY021AUSp4Rqwb4dyO+Ty8IMQ== + integrity: sha512-D/lvzK1pl01SO49pJrIpTA51DBoLo1j7SqDEMFVmL+1YS0VgSVdqaZSRfNuLU5Xzd3WrDcjfk4TJIrokZaX+Cg== tarball: 'file:projects/imodeljs-backend.tgz' version: 0.0.0 'file:projects/imodeljs-clients-backend.tgz': @@ -13918,6 +13998,7 @@ packages: '@types/deep-assign': 0.1.1 '@types/fs-extra': 4.0.8 '@types/js-base64': 2.3.1 + '@types/jsonwebtoken': 8.3.1 '@types/mocha': 5.2.6 '@types/nock': 9.3.1 '@types/node': 10.12.18 @@ -13928,6 +14009,7 @@ packages: fs-write-stream-atomic: 1.0.10 https-proxy-agent: 2.2.1 js-base64: 2.5.1 + jsonwebtoken: 8.5.0 mocha: 5.2.0 nock: 9.6.1 nyc: 13.3.0 @@ -13935,13 +14017,14 @@ packages: rimraf: 2.6.3 source-map-support: 0.5.10 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/imodeljs-clients-backend' resolution: - integrity: sha512-G8OFPwgCw/FfE43irTVmmEGJeDQ/d31mw0OnikugeKdbzq0Svim5JuaimyHJCfYiLRnLGh0GOR0usqeLB2jpeg== + integrity: sha512-JZPCggyY8jC2yH7wetNslIX5Iia9F8Fe6sddac7z7I+tbPfLtOngd3h4mLNlG6czH66ncywBR5vzoCcNvmFBTw== tarball: 'file:projects/imodeljs-clients-backend.tgz' version: 0.0.0 'file:projects/imodeljs-clients.tgz': @@ -13952,7 +14035,7 @@ packages: '@types/mocha': 5.2.6 '@types/nock': 9.3.1 '@types/node': 10.12.18 - '@types/qs': 6.5.1 + '@types/qs': 6.5.2 '@types/superagent': 3.8.7 '@types/xmldom': 0.1.29 chai: 4.2.0 @@ -13967,15 +14050,16 @@ packages: rimraf: 2.6.3 superagent: 3.8.3 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 xmldom: 0.1.27 xpath: 0.0.27 dev: false name: '@rush-temp/imodeljs-clients' resolution: - integrity: sha512-YSH2VMUmijnb/eI+giGvTNr4wfw6Gs5Vq+FeA/KNshruaimTe4civ1ypsixaA2ZvVJSFrZsCDDSeq723ngn4rA== + integrity: sha512-12voQSi/WOXk8AkdbGE4qA87noIEaP01Xna31byWqNCCGdDYlG46wKzApZykNWiDIQ/S1W54H0nWjpI2qMsvoQ== tarball: 'file:projects/imodeljs-clients.tgz' version: 0.0.0 'file:projects/imodeljs-common.tgz': @@ -13990,33 +14074,43 @@ packages: rimraf: 2.6.3 semver: 5.6.0 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 url-search-params: 1.1.0 dev: false name: '@rush-temp/imodeljs-common' resolution: - integrity: sha512-hGf2fHddozC8GbkJpx4RlI6FRnFD3wVsjJ2R4SBgu9MHkNq3qh8PjEbuMvbQbGJLTII4iBJS/ZHzY9G3t61THg== + integrity: sha512-A62g11GZsTkujwy/p9fD89OjSsqvQn1gPdwEu4vIEs34WIUkiTRurTstSF09xL9AYuXaOCDxymXZBkGgKStxPg== tarball: 'file:projects/imodeljs-common.tgz' version: 0.0.0 'file:projects/imodeljs-frontend.tgz': dependencies: + '@types/chai': 4.1.7 '@types/js-base64': 2.3.1 + '@types/mocha': 5.2.6 '@types/node': 10.12.18 '@types/semver': 5.5.0 - fuse.js: 3.4.2 + chai: 4.2.0 + fuse.js: 3.4.3 + glob: 7.1.3 js-base64: 2.5.1 + mocha: 5.2.0 + nyc: 13.3.0 oidc-client: 1.6.1 rimraf: 2.6.3 semver: 5.6.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + source-map-loader: 0.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 + webpack: 4.29.6 dev: false name: '@rush-temp/imodeljs-frontend' resolution: - integrity: sha512-s2akIztBE1ogoZmfFVfMQvfislE+ujmSlQ/GNiESjOujWuVz6Srs6QhmbtiC55AdnOAx3INouoZZfzbh52IUnw== + integrity: sha512-2UG/2S/fvLPt3eIcOuIiNDOB9nb4jMPjNJn5FuQI6a2UJhCxDlPBo1a7JCyjHgP0BByOR8xtbODfufNJIYLaQQ== tarball: 'file:projects/imodeljs-frontend.tgz' version: 0.0.0 'file:projects/imodeljs-i18n.tgz': @@ -14028,13 +14122,14 @@ packages: i18next-browser-languagedetector: 2.2.4 i18next-xhr-backend: 2.0.1 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/imodeljs-i18n' resolution: - integrity: sha512-xpemO9G/b88XWB5LxT9lCi0YJ+u7+B9nti6IKJRPqn+upG2Xxsow5sPsQL2AxcYAG53Fa5BZTL7fatomrvtH4Q== + integrity: sha512-tnWfwYVWcdeXOfuD55Rc2pLn2BenBe84d+GgAX/HBkAttXgRSSn5Uk0i1y6sNzbfyOP/28gMZS/J5ybVsltBeQ== tarball: 'file:projects/imodeljs-i18n.tgz' version: 0.0.0 'file:projects/imodeljs-quantity.tgz': @@ -14050,15 +14145,15 @@ packages: mocha: 5.2.0 nyc: 13.3.0 rimraf: 2.6.3 - sinon: 7.2.5 + sinon: 7.2.7 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/imodeljs-quantity' resolution: - integrity: sha512-RaSYyW83SLDRjsg87rWBQ2VUipS/RCyvMAUcX8+Gi0u+YOZN4ogHS3jo+G7+Hxr88h/CGUoKbfulK2hHqTZVsw== + integrity: sha512-IZ7EXUuhS0JJy/HPoUd5ydsNsoPoRHou6X0d4W3AGh3xnCODMGxQU62l1YIVCiMWQWz20giSzwxGhFDFFp9h9Q== tarball: 'file:projects/imodeljs-quantity.tgz' version: 0.0.0 'file:projects/imodeljs-webserver.tgz': @@ -14070,14 +14165,15 @@ packages: express: 4.16.4 rimraf: 2.6.3 tree-kill: 1.2.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 yargs: 12.0.5 dev: false name: '@rush-temp/imodeljs-webserver' resolution: - integrity: sha512-2f4jAp2eAWXrXWy6iQk4ccpFaJ87ByCnn7HarSwVJhzPlwWKwyehcDVG6aVQpMrNeXv0Hf7hoB5sh4xTPNFigQ== + integrity: sha512-rzVa1UcztTWLoXsRMxpF+AI7pClSDQ/mdOXFt2CB+j+Ya9FyZtcb6OWw7HRQqI78cq3LHi3MZn0OI0TM4IdrtQ== tarball: 'file:projects/imodeljs-webserver.tgz' version: 0.0.0 'file:projects/logger-config.tgz': @@ -14090,30 +14186,31 @@ packages: request: 2.88.0 request-promise: /request-promise/4.2.4/request@2.88.0 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/logger-config' resolution: - integrity: sha512-vEdPPTGyOtcVd5b71bHJkdJqnq6p6YTpkVS3RWpFGRSfG8L9yTmu+5HHOIwsN2Cd//KuqFmaqIGFDonQQSKKUA== + integrity: sha512-Ij2qImcYNv23biGNXnDstKdySofj+T8/y8Z0B3FNiUEJRfqD1xAfUEZg+fVDcdV3NGfQ7VyH5MiuB1TlYwzlYA== tarball: 'file:projects/logger-config.tgz' version: 0.0.0 'file:projects/plugin-markup.tgz': dependencies: + '@svgdotjs/svg.js': 3.0.12 '@types/node': 10.12.18 chai: 4.2.0 mocha: 5.2.0 rimraf: 2.6.3 svg.js: 2.7.1 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 typescript: 3.2.4 dev: false name: '@rush-temp/plugin-markup' resolution: - integrity: sha512-sSTlA0pXiCjw/LO+1xTt7O1uy5hXS025JbYuwwj1thvl2Ep8agu1ynMVq5Pr8Q/U9tAzZFu/XKQvZV+ag/PICQ== + integrity: sha512-GmRs9paGXOGm0zwsAibnDonMiCTCKP2KZ5inniXBcJdKlvArRUsKiCgXgkf5lB45bF5PtSyndvUK1NRzQ62UKA== tarball: 'file:projects/plugin-markup.tgz' version: 0.0.0 'file:projects/presentation-backend.tgz': @@ -14138,16 +14235,17 @@ packages: mocha: 5.2.0 nyc: 13.3.0 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 - tslint: /tslint/5.13.0/typescript@3.2.4 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 dev: false name: '@rush-temp/presentation-backend' resolution: - integrity: sha512-PJsXVufnM7gypxRyTyWGTZbCmzoDBC2WfYZSkr8OfnyGtDrnjcUKnT+baEH6KYVjFtHcCIIPA/F5QHd5v4RLNA== + integrity: sha512-vLwoWXcMwVAiKOlYUyn4KikgFA1l+jaDuRwq+4AEll2IQnFM+Zb7l9tSePxuV/uas4ivGecIi4RhsvyiE35Ttg== tarball: 'file:projects/presentation-backend.tgz' version: 0.0.0 'file:projects/presentation-common.tgz': @@ -14172,11 +14270,12 @@ packages: mocha: 5.2.0 nyc: 13.3.0 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 - tslint: /tslint/5.13.0/typescript@3.2.4 - tslint-consistent-codestyle: /tslint-consistent-codestyle/1.15.0/tslint@5.13.0+typescript@3.2.4 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 + tslint: /tslint/5.13.1/typescript@3.2.4 + tslint-consistent-codestyle: /tslint-consistent-codestyle/1.15.1/tslint@5.13.1+typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 typescript-json-schema: 0.28.0 @@ -14184,7 +14283,7 @@ packages: dev: false name: '@rush-temp/presentation-common' resolution: - integrity: sha512-8MbKaN0rk2axSWR3gsWvP+UnMK6bB0dMejE5HUvN9xDVCC0vAWY9iluKFeZKK3APtVgokS6d8/g16k4JwzSOSA== + integrity: sha512-+cc1VCrc5U4ZxQ3vduPZnt1dzaBRNij0HI9iWgRD4VvOfxiQKZJuTOyU7ktoqT4/rpHVvkjahl3yayI84aIIbA== tarball: 'file:projects/presentation-common.tgz' version: 0.0.0 'file:projects/presentation-components.tgz': @@ -14194,7 +14293,7 @@ packages: '@types/chai-jest-snapshot': 1.3.4 '@types/enzyme': 3.9.0 '@types/faker': 4.1.5 - '@types/lodash': 4.14.121 + '@types/lodash': 4.14.122 '@types/mocha': 5.2.6 '@types/react': 16.7.22 '@types/react-dom': 16.0.11 @@ -14206,27 +14305,28 @@ packages: cpx: 1.5.0 cross-env: 5.2.0 enzyme: 3.9.0 - enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715 + enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0 enzyme-to-json: /enzyme-to-json/3.3.5/enzyme@3.9.0 faker: 4.1.0 ignore-styles: 5.0.1 lodash: 4.17.11 mocha: 5.2.0 nyc: 13.3.0 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 - tslint: /tslint/5.13.0/typescript@3.2.4 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/presentation-components' resolution: - integrity: sha512-Qk5EFk4uVcHFHQQVtW4TNyscHkZ/W2FvPvkIbpJWlo/coBysXyj7fXNroXU0N+Mo9b2ApQvyUU2WOvo5DYkIQA== + integrity: sha512-NxS44hDYhCuUUs7au877QBFTzdWBeVwoa5tqYfCbp9dts+t86ivv9pEhBywQxRD7ez8A2ZKbFjlrNIPmbnJMIg== tarball: 'file:projects/presentation-components.tgz' version: 0.0.0 'file:projects/presentation-frontend.tgz': @@ -14250,17 +14350,18 @@ packages: mocha: 5.2.0 nyc: 13.3.0 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 - tslint: /tslint/5.13.0/typescript@3.2.4 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/presentation-frontend' resolution: - integrity: sha512-qqAWIB2LgNfpHo1zSEM66EfvoRvwRv1BboMJ00L3D7udAZNN3FOY9MEhT+uZ2BH0Uce4cjl2jN2Igd0QRmzrjw== + integrity: sha512-AkIUC/MpzY42S80UUnLZFEFyVoT6D8LAHqqVu/hjMDipOvIHd3aGB9tIqtvjm5wWCIr+equHLWKfbJbYj7vNuQ== tarball: 'file:projects/presentation-frontend.tgz' version: 0.0.0 'file:projects/presentation-integration-tests.tgz': @@ -14287,17 +14388,17 @@ packages: jsdom-global: 3.0.2 mocha: 5.2.0 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 ts-node: 7.0.1 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typemoq: 2.1.0 typescript: 3.2.4 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/presentation-integration-tests' resolution: - integrity: sha512-hzLZREJ8h4az8l7GzFMeD+bw3yy9FDBRKtbr1YdU8vxB4ZwUQfNdq1WdeThl7RoG1n1HwlpdKaYVOTnv24PUvA== + integrity: sha512-Tr3f8gVbtxiX1SpXir6/UOuT+qwS3hQtMGccYv00z548t0nJUi9jDuYc6Hf5LcVkLy7pWumFrNazPjdzhuTCbQ== tarball: 'file:projects/presentation-integration-tests.tgz' version: 0.0.0 'file:projects/presentation-test-app.tgz': @@ -14310,23 +14411,23 @@ packages: '@types/react-dom': 16.0.11 autoprefixer: 8.6.5 body-parser: 1.18.3 - electron: 4.0.6 + electron: 4.0.7 electron-chromedriver: 2.0.0 express: 4.16.4 immutable: 3.8.2 npm-run-all: 4.1.5 postcss-flexbugs-fixes: 3.3.1 postcss-loader: 2.1.6 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 rimraf: 2.6.3 semver: 5.6.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 dev: false name: '@rush-temp/presentation-test-app' resolution: - integrity: sha512-J6rwSVzNg1dgAPyaONCJpkuc/9en0QpOXjpdreOvLZ+7kX7jcG2IzsbZxm7d0mH2bId+y5LcALylDjrrf2fIng== + integrity: sha512-5vCZ2kUAk9vVDlXGm0/ptXQfiJ2USehZWssPrMrMtpfEBDMrgoNPyDV3X7vJhVlIu26KRJWHma/a+xIGQ+Xrrw== tarball: 'file:projects/presentation-test-app.tgz' version: 0.0.0 'file:projects/presentation-testing.tgz': @@ -14334,7 +14435,7 @@ packages: '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 '@types/chai-jest-snapshot': 1.3.4 - '@types/jsdom': 12.2.2 + '@types/jsdom': 12.2.3 '@types/mocha': 5.2.6 '@types/rimraf': 2.0.2 '@types/sinon': 5.0.7 @@ -14348,17 +14449,43 @@ packages: mocha: 5.2.0 nyc: 13.3.0 rimraf: 2.6.3 - sinon: 7.2.5 - tslint: /tslint/5.13.0/typescript@3.2.4 + sinon: 7.2.7 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 typemoq: 2.1.0 typescript: 3.2.4 dev: false name: '@rush-temp/presentation-testing' resolution: - integrity: sha512-WjtCmBZlMQpuyEwteLNLWMjPT1oqROjPsIDbREDYHQQnGX1RZj4ga9JW7/BRk9xew0dfBt64M4slHktq+URIbQ== + integrity: sha512-VYTgls/bro1ryXRD9vpSo75LL9q2DGnEpPBWyMTywME/kuQt9yxC4heBDAhmOaTlbl14EHgv3rtUBR2O+NUDpw== tarball: 'file:projects/presentation-testing.tgz' version: 0.0.0 + 'file:projects/rpc-integration-tests.tgz': + dependencies: + '@types/chai': 4.1.7 + '@types/express': 4.16.1 + '@types/mocha': 5.2.6 + '@types/node': 10.12.18 + '@types/semver': 5.5.0 + '@types/webpack': 3.8.17 + chai: 4.2.0 + cpx: 1.5.0 + electron: 4.0.7 + express: 4.16.4 + glob: 7.1.3 + null-loader: 0.1.1 + rimraf: 2.6.3 + semver: 5.6.0 + source-map-loader: 0.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 + typescript: 3.2.4 + webpack: 4.29.6 + dev: false + name: '@rush-temp/rpc-integration-tests' + resolution: + integrity: sha512-iEnr5eaA+5AhwpHUcO56MoJ0C4SgzpQkluwNJry/xjHn/0uv13CVmyfXQRs7Av7DJIZKUl88MLBWZNNkZKSnIw== + tarball: 'file:projects/rpc-integration-tests.tgz' + version: 0.0.0 'file:projects/test-apps-analysis-importer.tgz': dependencies: '@types/body-parser': 1.17.0 @@ -14372,82 +14499,32 @@ packages: null-loader: 0.1.1 popper.js: 1.14.7 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 dev: false name: '@rush-temp/test-apps-analysis-importer' resolution: - integrity: sha512-pDqFWqJvn4UAxwN29lA77zTwKUoyrI1Dj85iAE2jzkRPYex3Tm42vgRKn1G8N22ab/lN+eJZBIXiiPTX2QjiGg== + integrity: sha512-n+Ake4IiNWkV7yHUmAnUw4CPy2zVxXhO7L++6rEB153U9WdgUnGNm0Z7+4laLKHOg8sRyDwnqWu3+lDViHtiRw== tarball: 'file:projects/test-apps-analysis-importer.tgz' version: 0.0.0 'file:projects/test-apps-synchro-schedule-importer.tgz': dependencies: '@types/fs-extra': 4.0.8 - '@types/lodash': 4.14.121 + '@types/lodash': 4.14.122 '@types/node': 10.12.18 '@types/yargs': 12.0.9 cpx: 1.5.0 fs-extra: 6.0.1 rimraf: 2.6.3 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 yargs: 12.0.5 dev: false name: '@rush-temp/test-apps-synchro-schedule-importer' resolution: - integrity: sha512-O6iev7poymV7smXRLiHthQbrADIR2Jsohf68i4q4v88BQaVVLn4nGmPzxXDHe9+AxRvD0RE225LtsJtqLWpVQQ== + integrity: sha512-3QTtkLNFCZzHHMB40bkA9CYC8lND7fWfh5z5rflqieA3QxGA+t9/lb6mn2RUe+URxnkrW8gbObbqPunx1KcoCw== tarball: 'file:projects/test-apps-synchro-schedule-importer.tgz' version: 0.0.0 - 'file:projects/testbed.tgz': - dependencies: - '@types/body-parser': 1.17.0 - '@types/chai': 4.1.7 - '@types/express': 4.16.1 - '@types/fs-extra': 4.0.8 - '@types/i18next': 8.4.6 - '@types/i18next-browser-languagedetector': 2.0.2 - '@types/js-base64': 2.3.1 - '@types/mocha': 5.2.6 - '@types/node': 10.12.18 - '@types/semver': 5.5.0 - '@types/webpack': 3.8.17 - '@types/ws': 6.0.1 - body-parser: 1.18.3 - chai: 4.2.0 - commander: 2.19.0 - cpx: 1.5.0 - electron: 4.0.6 - express: 4.16.4 - find-root: 1.1.0 - fs-extra: 6.0.1 - fuse.js: 3.4.2 - glob: 7.1.3 - i18next: 10.6.0 - i18next-browser-languagedetector: 2.2.4 - i18next-xhr-backend: 2.0.1 - istanbul-lib-hook: 1.2.2 - istanbul-lib-instrument: 2.3.2 - js-base64: 2.5.1 - mocha: 5.2.0 - node-glob: 1.2.0 - null-loader: 0.1.1 - nyc: 13.3.0 - object-assign: 4.1.1 - resolve: 1.10.0 - rimraf: 2.6.3 - save: 2.3.3 - semver: 5.6.0 - source-map-loader: 0.2.4 - tslint: /tslint/5.13.0/typescript@3.2.4 - typescript: 3.2.4 - webpack: 4.29.6 - ws: 6.1.4 - dev: false - name: '@rush-temp/testbed' - resolution: - integrity: sha512-j9RVEvFp0653rAmWPnND9TY6l3hZQHFNQq+NyPNez+7RY9EuGHvMHvMqW4/AVD4TlspLrHbJdXN3fsjWGuNAyw== - tarball: 'file:projects/testbed.tgz' - version: 0.0.0 'file:projects/ui-components.tgz': dependencies: '@bentley/icons-generic-webfont': npm.bentley.com/@bentley/icons-generic-webfont/0.0.9 @@ -14459,7 +14536,7 @@ packages: '@types/classnames': 2.2.7 '@types/enzyme': 3.9.0 '@types/faker': 4.1.5 - '@types/lodash': 4.14.121 + '@types/lodash': 4.14.122 '@types/mocha': 5.2.6 '@types/react': 16.7.22 '@types/react-data-grid': 4.0.2 @@ -14478,7 +14555,7 @@ packages: classnames: 2.2.6 cross-env: 5.2.0 enzyme: 3.9.0 - enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715 + enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0 enzyme-to-json: /enzyme-to-json/3.3.5/enzyme@3.9.0 eventemitter2: 5.0.1 faker: 4.1.0 @@ -14490,32 +14567,33 @@ packages: mocha: 5.2.0 nyc: 13.3.0 raf: 3.4.1 - react: 16.8.3 - react-data-grid: /react-data-grid/6.0.1/react-dom@16.8.3+react@16.8.3 - react-dnd: /react-dnd/5.0.0/react@16.8.3 + react: 16.8.4 + react-data-grid: /react-data-grid/6.0.1/react-dom@16.8.4+react@16.8.4 + react-dnd: /react-dnd/5.0.0/react@16.8.4 react-dnd-html5-backend: 5.0.1 react-dnd-test-backend: 5.0.1 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-highlight-words: /react-highlight-words/0.14.0/react@16.8.3 - react-resize-detector: /react-resize-detector/3.4.0/react@16.8.3 - react-testing-library: /react-testing-library/5.9.0/react-dom@16.8.3+react@16.8.3 - react-virtualized: /react-virtualized/9.21.0/react-dom@16.8.3+react@16.8.3 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-highlight-words: /react-highlight-words/0.14.0/react@16.8.4 + react-resize-detector: /react-resize-detector/3.4.0/react@16.8.4 + react-testing-library: /react-testing-library/5.9.0/react-dom@16.8.4+react@16.8.4 + react-virtualized: /react-virtualized/9.21.0/react-dom@16.8.4+react@16.8.4 resize-observer-polyfill: 1.5.1 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 ts-key-enum: 2.0.0 ts-node: 7.0.1 tsconfig-paths: 3.8.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/ui-components' resolution: - integrity: sha512-jejtULJs2WE62Y4VIak2xVskUZDfb2Tfq28TveifSoSfBdBfBULon4NTbazfJkte2YlqvROjXa1+kZL2/ZyfUQ== + integrity: sha512-AopBlBHLrC8eUc3KL7KN0qn3fRAe7zIbgCkzkzLc91IbW3Jqegxu7TWDQGJAAPtY23TR4Twc/0KHLM83bLpK8g== tarball: 'file:projects/ui-components.tgz' version: 0.0.0 'file:projects/ui-core.tgz': @@ -14539,9 +14617,9 @@ packages: chai-spies: /chai-spies/1.0.0/chai@4.2.0 classnames: 2.2.6 cross-env: 5.2.0 - csstype: 2.6.2 + csstype: 2.6.3 enzyme: 3.9.0 - enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715 + enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0 enzyme-to-json: /enzyme-to-json/3.3.5/enzyme@3.9.0 ignore-styles: 5.0.1 jsdom: 11.12.0 @@ -14549,22 +14627,23 @@ packages: mocha: 5.2.0 nyc: 13.3.0 raf: 3.4.1 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-testing-library: /react-testing-library/5.9.0/react-dom@16.8.3+react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-testing-library: /react-testing-library/5.9.0/react-dom@16.8.4+react@16.8.4 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 ts-node: 7.0.1 tsconfig-paths: 3.8.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typescript: 3.2.4 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/ui-core' resolution: - integrity: sha512-Jn/bwlB2RA2wa6HGsPMVD/lDKQvSiYMOzrrM51+QH5bGw3zKXUr5x50ceqcPjzo2OBSdlVhVx4v8u4ikNZGMIA== + integrity: sha512-/pZpOmGsVhOvvq8u6MGKB82lpZn2COuoHRdIsTRRWk94AyGblpwOYu3CyhOOYqxbya4ikLuyraxQuBraOXWUrg== tarball: 'file:projects/ui-core.tgz' version: 0.0.0 'file:projects/ui-framework.tgz': @@ -14576,11 +14655,11 @@ packages: '@types/chai-spies': 1.0.0 '@types/classnames': 2.2.7 '@types/enzyme': 3.9.0 - '@types/lodash': 4.14.121 + '@types/lodash': 4.14.122 '@types/mocha': 5.2.6 '@types/react': 16.7.22 '@types/react-dom': 16.0.11 - '@types/react-redux': 7.0.1 + '@types/react-redux': 7.0.2 '@types/rimraf': 2.0.2 '@types/sinon': 5.0.7 '@types/sinon-chai': 3.2.2 @@ -14590,8 +14669,9 @@ packages: chai-spies: /chai-spies/1.0.0/chai@4.2.0 classnames: 2.2.6 cross-env: 5.2.0 + dom-testing-library: 3.16.8 enzyme: 3.9.0 - enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715 + enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0 enzyme-to-json: /enzyme-to-json/3.3.5/enzyme@3.9.0 ignore-styles: 5.0.1 immutable: 3.8.2 @@ -14602,28 +14682,29 @@ packages: nyc: 13.3.0 oidc-client: 1.6.1 raf: 3.4.1 - react: 16.8.3 - react-dnd: /react-dnd/5.0.0/react@16.8.3 + react: 16.8.4 + react-dnd: /react-dnd/5.0.0/react@16.8.4 react-dnd-html5-backend: 5.0.1 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-redux: /react-redux/5.1.1/react@16.8.3+redux@4.0.1 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-redux: /react-redux/5.1.1/react@16.8.4+redux@4.0.1 react-split-pane: 0.1.77 - react-testing-library: /react-testing-library/5.9.0/react-dom@16.8.3+react@16.8.3 + react-testing-library: /react-testing-library/5.9.0/react-dom@16.8.4+react@16.8.4 redux: 4.0.1 rimraf: 2.6.3 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 ts-node: 7.0.1 tsconfig-paths: 3.8.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 xmlhttprequest: 1.8.0 dev: false name: '@rush-temp/ui-framework' resolution: - integrity: sha512-eycJxMRlrTpdEHGftnctelz3VGlOQVBaTUUL3Dzq1CDoy+Z5BoQlkcxgqAmijhzeXnLkBW1QQp9tbE8gF2uCDQ== + integrity: sha512-K+4GZ5akngRlaNQEXQ24p85atE0oOG4uumHI5dlCzuWyMnyz4HyYEKYSxvnuk406VFvayhBo5zij4//xQObk8w== tarball: 'file:projects/ui-framework.tgz' version: 0.0.0 'file:projects/ui-ninezone.tgz': @@ -14650,7 +14731,7 @@ packages: cross-env: 5.2.0 css-loader: 0.28.11 enzyme: 3.9.0 - enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715 + enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0 enzyme-to-json: /enzyme-to-json/3.3.5/enzyme@3.9.0 highlight.js: 9.14.2 html-webpack-plugin: /html-webpack-plugin/4.0.0-alpha.2/webpack@4.29.6 @@ -14662,23 +14743,24 @@ packages: raf: 3.4.1 raf-schd: 4.0.0 raw-loader: 0.5.1 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-markdown: /react-markdown/3.6.0/react@16.8.3 - react-router-dom: /react-router-dom/4.3.1/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-markdown: /react-markdown/3.6.0/react@16.8.4 + react-router-dom: /react-router-dom/4.3.1/react@16.8.4 rimraf: 2.6.3 sass-loader: /sass-loader/7.1.0/webpack@4.29.6 - sinon: 7.2.5 - sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.5 + sinon: 7.2.7 + sinon-chai: /sinon-chai/3.3.0/chai@4.2.0+sinon@7.2.7 source-map-loader: 0.2.4 style-loader: 0.21.0 svg-react-loader: 0.4.6 ts-loader: 4.5.0 ts-node: 7.0.1 tsconfig-paths: 3.8.0 - tslint: /tslint/5.13.0/typescript@3.2.4 - tslint-loader: /tslint-loader/3.6.0/tslint@5.13.0 + tslint: /tslint/5.13.1/typescript@3.2.4 + tslint-loader: /tslint-loader/3.6.0/tslint@5.13.1 typedoc: 0.11.1 + typedoc-plugin-external-module-name: /typedoc-plugin-external-module-name/1.1.3/typedoc@0.11.1 typemoq: 2.1.0 typescript: 3.2.4 url-loader: /url-loader/1.1.2/webpack@4.29.6 @@ -14689,7 +14771,7 @@ packages: dev: false name: '@rush-temp/ui-ninezone' resolution: - integrity: sha512-PhoZFUqDLcQEbN0MzEPolKxnHB2lIVvfEJZQhRwGXVVBjVHa7ei05aeBCizR8UcXlW+35LTt9b8XX1E6roRHgw== + integrity: sha512-HElPiB7Vx50iihPbQawtb21diK69ehJLyt/224kLR/mGjKHvynrR9EcZiHyvyyMzK8mtSWcJyJT/8UWIt6ktLw== tarball: 'file:projects/ui-ninezone.tgz' version: 0.0.0 'file:projects/ui-test-app.tgz': @@ -14699,24 +14781,24 @@ packages: '@types/express': 4.16.1 '@types/react': 16.7.22 '@types/react-dom': 16.0.11 - '@types/react-redux': 7.0.1 + '@types/react-redux': 7.0.2 '@types/semver': 5.5.0 autoprefixer: 8.6.5 body-parser: 1.18.3 css-loader: 0.28.11 - electron: 4.0.6 + electron: 4.0.7 electron-chromedriver: 2.0.0 express: 4.16.4 file-loader: /file-loader/1.1.11/webpack@4.29.6 immutable: 3.8.2 mobx: 5.9.0 - mobx-react: /mobx-react/5.4.3/mobx@5.9.0+react@16.8.3 + mobx-react: /mobx-react/5.4.3/mobx@5.9.0+react@16.8.4 npm-run-all: 4.1.5 postcss-flexbugs-fixes: 3.3.1 postcss-loader: 2.1.6 - react: 16.8.3 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-test-renderer: /react-test-renderer/16.8.3/react@16.8.3 + react: 16.8.4 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-test-renderer: /react-test-renderer/16.8.4/react@16.8.4 redux: 4.0.1 rimraf: 2.6.3 sass-loader: /sass-loader/7.1.0/webpack@4.29.6 @@ -14724,7 +14806,7 @@ packages: style-loader: 0.21.0 svg-sprite-loader: 3.9.2 tsconfig-paths: 3.8.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 uglifyjs-webpack-plugin: /uglifyjs-webpack-plugin/1.3.0/webpack@4.29.6 url-loader: /url-loader/1.1.2/webpack@4.29.6 @@ -14732,7 +14814,7 @@ packages: dev: false name: '@rush-temp/ui-test-app' resolution: - integrity: sha512-qGq9WcNpm2ZIKFtoijlHK7ToJMN8Er3MSZMCT6GikWze4Wl58hgyb+C3SEGcax0u/ofrcfnBvrgOZgs539yY8A== + integrity: sha512-IAPp22WPSytiEOVcpDdsgpNhtrTB7w2SkqnESLP+IaSyAgu6OdqiWMdK+vhjC5n+bwN1O5ccKI7NQMxAdyIUsg== tarball: 'file:projects/ui-test-app.tgz' version: 0.0.0 'file:projects/webpack-tools.tgz': @@ -14759,12 +14841,12 @@ packages: css-loader: 0.28.11 dotenv: 6.2.0 enzyme: 3.9.0 - enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ca330bebd2626bd9cb8e393ae8a11715 + enzyme-adapter-react-16: /enzyme-adapter-react-16/1.10.0/ddd35428a279abc5dafbf791bd3f4bc0 enzyme-to-json: /enzyme-to-json/3.3.5/enzyme@3.9.0 escape-string-regexp: 1.0.5 exports-loader: 0.7.0 file-loader: /file-loader/1.1.11/webpack@4.29.6 - fork-ts-checker-webpack-plugin: /fork-ts-checker-webpack-plugin/0.4.15/7d74fab92916d4959c8fedd113bb5af2 + fork-ts-checker-webpack-plugin: /fork-ts-checker-webpack-plugin/0.4.15/eac3ce3801d5581552f3b0dc4bf4f7c2 fs-extra: 6.0.1 glob: 7.1.3 html-webpack-plugin: /html-webpack-plugin/4.0.0-alpha.2/webpack@4.29.6 @@ -14786,32 +14868,32 @@ packages: postcss-flexbugs-fixes: 3.3.1 postcss-loader: 2.1.6 promise: 8.0.2 - react: 16.8.3 + react: 16.8.4 react-dev-utils: 6.1.1 - react-dom: /react-dom/16.8.3/react@16.8.3 - react-test-renderer: /react-test-renderer/16.8.3/react@16.8.3 + react-dom: /react-dom/16.8.4/react@16.8.4 + react-test-renderer: /react-test-renderer/16.8.4/react@16.8.4 readline: 1.3.0 rimraf: 2.6.3 sass-loader: /sass-loader/7.1.0/webpack@4.29.6 - sinon: 7.2.5 + sinon: 7.2.7 source-map-loader: 0.2.4 style-loader: 0.21.0 svg-sprite-loader: 3.9.2 sw-precache-webpack-plugin: /sw-precache-webpack-plugin/0.11.5/webpack@4.29.6 tree-kill: 1.2.1 ts-loader: 4.5.0 - tslint: /tslint/5.13.0/typescript@3.2.4 - tslint-loader: /tslint-loader/3.6.0/tslint@5.13.0 + tslint: /tslint/5.13.1/typescript@3.2.4 + tslint-loader: /tslint-loader/3.6.0/tslint@5.13.1 typescript: 3.2.4 uglifyjs-webpack-plugin: /uglifyjs-webpack-plugin/1.3.0/webpack@4.29.6 url-loader: /url-loader/1.1.2/webpack@4.29.6 wdio-chromedriver-service: 0.1.5 wdio-junit-reporter: 0.4.4 wdio-mocha-framework: 0.6.4 - wdio-screenshot: /wdio-screenshot/0.6.0/webdriverio@4.14.2 + wdio-screenshot: /wdio-screenshot/0.6.0/webdriverio@4.14.3 wdio-spec-reporter: 0.1.5 - wdio-visual-regression-service: /wdio-visual-regression-service/0.9.0/webdriverio@4.14.2 - webdriverio: 4.14.2 + wdio-visual-regression-service: /wdio-visual-regression-service/0.9.0/webdriverio@4.14.3 + webdriverio: 4.14.3 webpack: 4.29.6 webpack-dev-server: /webpack-dev-server/3.2.1/webpack@4.29.6 webpack-manifest-plugin: /webpack-manifest-plugin/2.0.3/webpack@4.29.6 @@ -14823,19 +14905,19 @@ packages: dev: false name: '@rush-temp/webpack-tools' resolution: - integrity: sha512-NLqqZ70QuCXtDwn7Zo8buFsafYoaMjME/OSGYGmKUS20g+s2ZX6qth+z287KeHcFTkGZ+j68nqw2oS4Lx+fqxw== + integrity: sha512-NJXgi+81TnCQ6QnMiugs8JS08gqrcy/nFYwHh5is0HPuU85vf66Z+N4MLFyQjKkupQLv6nAA+0IiJnoMmbpw/Q== tarball: 'file:projects/webpack-tools.tgz' version: 0.0.0 'file:projects/webworker-test-app.tgz': dependencies: rimraf: 2.6.3 tsconfig-paths: 3.8.0 - tslint: /tslint/5.13.0/typescript@3.2.4 + tslint: /tslint/5.13.1/typescript@3.2.4 typescript: 3.2.4 dev: false name: '@rush-temp/webworker-test-app' resolution: - integrity: sha512-6Qn1G1Zp/OPmdPRSaOxiOg8C+P2dXI53UDC7k9lMeL/y3CWEFGTVZDUtaozHKuRpw0E5d/5V46FWtD2QSGREpw== + integrity: sha512-4b7sDQcDHhCzUTRx2qtVa5iyDeBx7ZLvqvMlE49bjtWXrhZQ68hW8mOhC38G51WU2bE7R2Z0TTAyBD90vEbLjw== tarball: 'file:projects/webworker-test-app.tgz' version: 0.0.0 npm.bentley.com/@bentley/dev-cors-proxy-server/0.0.9: @@ -14861,34 +14943,37 @@ packages: registry: 'https://npm.bentley.com/npm/npm/' tarball: 'https://npm.bentley.com/npm/npm/@bentley/icons-generic-webfont/-/icons-generic-webfont-0.0.9.tgz' version: 0.0.9 - npm.bentley.com/@bentley/imodeljs-native/0.99.0: + npm.bentley.com/@bentley/imodeljs-native/0.102.3: dev: false name: '@bentley/imodeljs-native' requiresBuild: true resolution: - integrity: sha1-2ZZdlq9Hdoe+gTESP8lq5ymoqRQ= + integrity: sha1-55Yj8n8HcaHnXHuPGQrNCYK2vL4= registry: 'https://npm.bentley.com/npm/npm/' - tarball: 'https://npm.bentley.com/npm/npm/@bentley/imodeljs-native/-/imodeljs-native-0.99.0.tgz' - version: 0.99.0 + tarball: 'https://npm.bentley.com/npm/npm/@bentley/imodeljs-native/-/imodeljs-native-0.102.3.tgz' + version: 0.102.3 registry: 'https://registry.npmjs.org/' shrinkwrapMinorVersion: 9 shrinkwrapVersion: 3 specifiers: '@bentley/dev-cors-proxy-server': 0.0.9 '@bentley/icons-generic-webfont': ^0.0.9 - '@bentley/imodeljs-native': ~0.99.0 + '@bentley/imodeljs-native': ~0.102.3 '@microsoft/api-extractor': ^6.3.0 '@openid/appauth': ^1.1.1 '@rush-temp/agent-test-app': 'file:./projects/agent-test-app.tgz' '@rush-temp/bentleyjs-core': 'file:./projects/bentleyjs-core.tgz' '@rush-temp/build-tools': 'file:./projects/build-tools.tgz' + '@rush-temp/certa': 'file:./projects/certa.tgz' '@rush-temp/config-loader': 'file:./projects/config-loader.tgz' + '@rush-temp/core-integration-tests': 'file:./projects/core-integration-tests.tgz' '@rush-temp/display-performance-test-app': 'file:./projects/display-performance-test-app.tgz' '@rush-temp/display-test-app': 'file:./projects/display-test-app.tgz' '@rush-temp/ecschema-metadata': 'file:./projects/ecschema-metadata.tgz' '@rush-temp/electron-manager': 'file:./projects/electron-manager.tgz' '@rush-temp/example-code-app': 'file:./projects/example-code-app.tgz' '@rush-temp/example-code-snippets': 'file:./projects/example-code-snippets.tgz' + '@rush-temp/export-obj': 'file:./projects/export-obj.tgz' '@rush-temp/geometry-core': 'file:./projects/geometry-core.tgz' '@rush-temp/imodel-from-geojson': 'file:./projects/imodel-from-geojson.tgz' '@rush-temp/imodel-from-reality-model': 'file:./projects/imodel-from-reality-model.tgz' @@ -14909,9 +14994,9 @@ specifiers: '@rush-temp/presentation-integration-tests': 'file:./projects/presentation-integration-tests.tgz' '@rush-temp/presentation-test-app': 'file:./projects/presentation-test-app.tgz' '@rush-temp/presentation-testing': 'file:./projects/presentation-testing.tgz' + '@rush-temp/rpc-integration-tests': 'file:./projects/rpc-integration-tests.tgz' '@rush-temp/test-apps-analysis-importer': 'file:./projects/test-apps-analysis-importer.tgz' '@rush-temp/test-apps-synchro-schedule-importer': 'file:./projects/test-apps-synchro-schedule-importer.tgz' - '@rush-temp/testbed': 'file:./projects/testbed.tgz' '@rush-temp/ui-components': 'file:./projects/ui-components.tgz' '@rush-temp/ui-core': 'file:./projects/ui-core.tgz' '@rush-temp/ui-framework': 'file:./projects/ui-framework.tgz' @@ -14919,6 +15004,7 @@ specifiers: '@rush-temp/ui-test-app': 'file:./projects/ui-test-app.tgz' '@rush-temp/webpack-tools': 'file:./projects/webpack-tools.tgz' '@rush-temp/webworker-test-app': 'file:./projects/webworker-test-app.tgz' + '@svgdotjs/svg.js': ~3.0.12 '@types/body-parser': ^1.17.0 '@types/bunyan': ^1.8.4 '@types/bunyan-seq': ^0.2.0 @@ -14931,6 +15017,7 @@ specifiers: '@types/cpx': '1.5' '@types/deep-assign': ^0.1.0 '@types/deep-equal': ^1 + '@types/detect-port': ~1.1.0 '@types/enzyme': ^3.1.12 '@types/express': ^4.16.1 '@types/express-session': ^1.15.11 @@ -14944,6 +15031,7 @@ specifiers: '@types/js-base64': ^2.3.1 '@types/jsdom': ^12.2.0 '@types/json5': 0.0.30 + '@types/jsonwebtoken': ^8.3.1 '@types/lodash': ^4.14.0 '@types/lolex': ^2.1.2 '@types/minimist': ^1.2.0 @@ -14952,6 +15040,7 @@ specifiers: '@types/nock': ^9.1.2 '@types/node': 10.12.18 '@types/passport': ^0.4.6 + '@types/puppeteer': 1.3.0 '@types/qs': ^6.5.0 '@types/react': 16.7.22 '@types/react-data-grid': ^4.0.0 @@ -14969,9 +15058,9 @@ specifiers: '@types/source-map-support': ^0.4.0 '@types/superagent': ^3.5.6 '@types/url-search-params': ^0.10.2 + '@types/uuid': ~3.4.4 '@types/webdriverio': ^4.8.6 '@types/webpack': ^3.8.5 - '@types/ws': ^6.0.1 '@types/xmldom': ^0.1.29 '@types/yargs': ^12.0.5 app-root-path: ^2.0.1 @@ -15007,6 +15096,8 @@ specifiers: deep-assign: ^2.0.0 deep-equal: ^1 delay-cli: ^1.1.0 + detect-port: ~1.3.0 + dom-testing-library: ^3.16.6 dotenv: ^6.0.0 electron: ^4.0.1 electron-chromedriver: ^2.0.0 @@ -15021,7 +15112,6 @@ specifiers: express-session: ^1.15.6 faker: ^4.1.0 file-loader: ^1.1.11 - find-root: 1.1.0 fork-ts-checker-webpack-plugin: ^0.4.9 form-data: 2.3.2 fs-extra: ^6.0.1 @@ -15039,13 +15129,13 @@ specifiers: imports-loader: ^0.8.0 inspire-tree: ^5.0.1 istanbul-instrumenter-loader: ^3.0.1 - istanbul-lib-hook: ^1.2.2 - istanbul-lib-instrument: ^2.3.2 js-base64: ^2.4.5 jsdom: ^11.12.0 jsdom-global: 3.0.2 json-schema-faker: ^0.5.0-rc15 json5: ^2.1.0 + jsonc-parser: ~2.0.3 + jsonwebtoken: ^8.5.0 license-webpack-plugin: ^1.3.1 lodash: ^4.17.10 lolex: ^2.7.1 @@ -15060,7 +15150,6 @@ specifiers: mocha-webpack: ^2.0.0-beta.0 multiparty: ^4.2.1 nock: ^9.2.3 - node-glob: ^1.2.0 node-gyp: 3.6.2 node-sass: ^4.9.2 nodemon: ^1.18.3 @@ -15077,6 +15166,7 @@ specifiers: postcss-flexbugs-fixes: ^3.3.1 postcss-loader: ^2.1.6 promise: ^8.0.1 + puppeteer: ~1.11.0 qs: ^6.5.1 raf: ^3.4.0 raf-schd: ^4.0.0 @@ -15095,7 +15185,7 @@ specifiers: react-router-dom: ^4.2.2 react-split-pane: 0.1.77 react-test-renderer: ^16.4.2 - react-testing-library: ^5.2.3 + react-testing-library: ^5.8.0 react-virtualized: ^9.21.0 readline: ^1.3.0 recursive-readdir: ^2.2.2 @@ -15104,7 +15194,6 @@ specifiers: request-promise: ^4.2.0 request-promise-native: ^1.0.5 resize-observer-polyfill: ^1.5.0 - resolve: ^1.1.7 rimraf: ^2.6.2 sass-loader: ^7.1.0 save: ^2.3.3 @@ -15118,7 +15207,6 @@ specifiers: superagent: ^3.7.0 svg-react-loader: ^0.4.5 svg-sprite-loader: ^3.8.0 - svg.js: ~2.7.1 sw-precache-webpack-plugin: ^0.11.5 tooltip.js: ^1.2.0 tree-kill: ^1.2.0 @@ -15140,6 +15228,7 @@ specifiers: uglifyjs-webpack-plugin: ^1.2.5 url-loader: ^1.0.1 url-search-params: ^1.1.0 + uuid: ~3.3.2 wdio-chromedriver-service: ^0.1.2 wdio-junit-reporter: ^0.4.3 wdio-mocha-framework: ^0.6.2 @@ -15154,7 +15243,6 @@ specifiers: webpack-merge: ^4.1.4 webpack-node-externals: ^1.7.2 whatwg-fetch: 2.0.4 - ws: ^6.0.0 xmldom: ^0.1.27 xmlhttprequest: ^1.8.0 xpath: 0.0.27 diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 37408ce..65153bf 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -2,7 +2,7 @@ { "policyName": "prerelease-monorepo-lockStep", "definitionName": "lockStepVersion", - "version": "0.189.0", + "version": "0.190.0", "nextBump": "prerelease" } ] diff --git a/core/backend/CHANGELOG.json b/core/backend/CHANGELOG.json index 54ecbc5..46b4187 100644 --- a/core/backend/CHANGELOG.json +++ b/core/backend/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@bentley/imodeljs-backend", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-backend_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Added IModelDb.exportGraphics" + }, + { + "comment": "fix issue for ios" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-backend_v0.189.0", diff --git a/core/backend/CHANGELOG.md b/core/backend/CHANGELOG.md index 1107cce..eecc494 100644 --- a/core/backend/CHANGELOG.md +++ b/core/backend/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @bentley/imodeljs-backend -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Added IModelDb.exportGraphics +- fix issue for ios ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/backend/package.json b/core/backend/package.json index 3ec61be..f99232d 100644 --- a/core/backend/package.json +++ b/core/backend/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-backend", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js backend components", "main": "lib/imodeljs-backend.js", "typings": "lib/imodeljs-backend", @@ -39,24 +39,24 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", "@types/body-parser": "^1.17.0", "@types/chai": "^4.1.4", "@types/express": "^4.16.1", @@ -83,7 +83,7 @@ "asn1": "0.2.3" }, "dependencies": { - "@bentley/imodeljs-native": "~0.99.0", + "@bentley/imodeljs-native": "~0.102.3", "body-parser": "^1.18.2", "fs-extra": "^6.0.1", "glob": "^7.1.2", diff --git a/core/backend/src/ECDb.ts b/core/backend/src/ECDb.ts index 756686c..44f7765 100644 --- a/core/backend/src/ECDb.ts +++ b/core/backend/src/ECDb.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ /** @module ECDb */ -import { IModelError, IModelStatus, PageOptions, kPagingDefaultOptions, PagableECSql } from "@bentley/imodeljs-common"; +import { IModelError, IModelStatus, PageOptions, kPagingDefaultOptions, PageableECSql } from "@bentley/imodeljs-common"; import { IModelJsNative } from "./IModelJsNative"; import { ECSqlStatement, ECSqlStatementCache } from "./ECSqlStatement"; import { SqliteStatement, SqliteStatementCache, CachedSqliteStatement } from "./SqliteStatement"; @@ -21,7 +21,7 @@ export enum ECDbOpenMode { } /** An ECDb file */ -export class ECDb implements IDisposable, PagableECSql { +export class ECDb implements IDisposable, PageableECSql { private _nativeDb?: IModelJsNative.ECDb; private readonly _statementCache: ECSqlStatementCache = new ECSqlStatementCache(); private readonly _sqliteStatementCache: SqliteStatementCache = new SqliteStatementCache(); @@ -107,7 +107,7 @@ export class ECDb implements IDisposable, PagableECSql { }); } - /** Execute a pagable query. + /** Execute a pageable query. * The result of the query is async iterator over the rows. The iterator will get next page automatically once rows in current page has been read. * [ECSQL row]($docs/learning/ECSQLRowFormat). * diff --git a/core/backend/src/ExportGraphics.ts b/core/backend/src/ExportGraphics.ts new file mode 100644 index 0000000..f8edbe6 --- /dev/null +++ b/core/backend/src/ExportGraphics.ts @@ -0,0 +1,58 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module iModels */ + +import { Id64Array, Id64String } from "@bentley/bentleyjs-core"; + +/** A triangulated mesh with unified indices, suitable for direct use with graphics APIs. + * See [IModelDb.exportGraphics]($imodeljs-backend) + * @beta Waiting for feedback from community before finalizing. + */ +export interface ExportGraphicsMesh { + /** Zero-indexed vertex indices, every three indices represent a triangle */ + indices: Int32Array; + /** Vertices for this mesh, laid out in the pattern XYZXYZ */ + points: Float64Array; + /** Normals for this mesh, laid out in the pattern XYZXYZ */ + normals: Float32Array; + /** Parameters (uvs) for this mesh, laid out in the pattern XYXY */ + params: Float32Array; +} + +/** Info provided to ExportGraphicFunction about graphics. + * See [IModelDb.exportGraphics]($imodeljs-backend) + * @beta Waiting for feedback from community before finalizing. + */ +export interface ExportGraphicsInfo { + /** The element ID for the element the graphics originated from */ + elementId: Id64String; + /** The color and transparency for these graphics, laid out in TBGR format, see [ColorDef]($imodeljs-common) */ + color: number; + /** The mesh for these graphics */ + mesh: ExportGraphicsMesh; +} + +/** A callback function that receives generated graphics. + * Return true to continue exporting graphics or false to abort. + * See [IModelDb.exportGraphics]($imodeljs-backend) + * @beta Waiting for feedback from community before finalizing. + */ +export type ExportGraphicsFunction = (info: ExportGraphicsInfo) => boolean; + +/** Parameters for [IModelDb.exportGraphics]($imodeljs-backend) + * @beta Waiting for feedback from community before finalizing. + */ +export interface ExportGraphicsProps { + /** The source elements for the exported graphics */ + elementIdArray: Id64Array; + /** A function to call for each unique element ID and color combination */ + onGraphics: ExportGraphicsFunction; + /** Max distance from a face to the original geometry, see [StrokeOptions]($geometry-core) */ + chordTol?: number; + /** Max angle difference in approximated face, see [StrokeOptions]($geometry-core) */ + angleTol?: number; + /** Max length of any edge in generated faces, see [StrokeOptions]($geometry-core) */ + maxEdgeLength?: number; +} diff --git a/core/backend/src/ExpressServer.ts b/core/backend/src/ExpressServer.ts index cccc553..1844605 100644 --- a/core/backend/src/ExpressServer.ts +++ b/core/backend/src/ExpressServer.ts @@ -28,6 +28,7 @@ export class IModelJsExpressServer { protected _configureMiddleware() { this._app.use(bodyParser.text()); + this._app.use(bodyParser.raw()); } protected _configureHeaders() { diff --git a/core/backend/src/IModelDb.ts b/core/backend/src/IModelDb.ts index 90ffcfb..122cbff 100644 --- a/core/backend/src/IModelDb.ts +++ b/core/backend/src/IModelDb.ts @@ -10,7 +10,7 @@ import { ElementLoadProps, ElementProps, EntityMetaData, EntityProps, EntityQueryParams, FilePropertyProps, FontMap, FontMapProps, FontProps, IModel, IModelError, IModelNotFoundResponse, IModelProps, IModelStatus, IModelToken, IModelVersion, ModelProps, ModelSelectorProps, PropertyCallback, SheetProps, SnapRequestProps, SnapResponseProps, ThumbnailProps, TileTreeProps, ViewDefinitionProps, ViewQueryParams, - ViewStateProps, IModelCoordinatesResponseProps, GeoCoordinatesResponseProps, PageOptions, kPagingDefaultOptions, PagableECSql, + ViewStateProps, IModelCoordinatesResponseProps, GeoCoordinatesResponseProps, PageOptions, kPagingDefaultOptions, PageableECSql, } from "@bentley/imodeljs-common"; import * as path from "path"; import * as os from "os"; @@ -22,6 +22,7 @@ import { ECSqlStatement, ECSqlStatementCache } from "./ECSqlStatement"; import { Element, Subject } from "./Element"; import { ElementAspect } from "./ElementAspect"; import { Entity } from "./Entity"; +import { ExportGraphicsProps } from "./ExportGraphics"; import { IModelJsNative } from "./IModelJsNative"; import { Model } from "./Model"; import { Relationship, RelationshipProps, Relationships } from "./Relationship"; @@ -114,7 +115,7 @@ export class OpenParams { * IModelDb raises a set of events to allow apps and subsystems to track IModelDb object life cycle, including [[onOpen]] and [[onOpened]]. * @see [learning about IModelDb]($docs/learning/backend/IModelDb.md) */ -export class IModelDb extends IModel implements PagableECSql { +export class IModelDb extends IModel implements PageableECSql { public static readonly defaultLimit = 1000; // default limit for batching queries public static readonly maxLimit = 10000; // maximum limit for batching queries /** Event called after a changeset is applied to this IModelDb. */ @@ -500,7 +501,7 @@ export class IModelDb extends IModel implements PagableECSql { }); } - /** Execute a pagable query. + /** Execute a pageable query. * The result of the query is async iterator over the rows. The iterator will get next page automatically once rows in current page has been read. * [ECSQL row]($docs/learning/ECSQLRowFormat). * @@ -1059,6 +1060,43 @@ export class IModelDb extends IModel implements PagableECSql { return JSON.parse(resultString) as GeoCoordinatesResponseProps; } + /** Export meshes suitable for graphics APIs from arbitrary geometry in elements in this IModelDb. + * * Requests can be slow when processing many elements so it is expected that this function be used on a dedicated backend. + * * Vertices are exported in the IModelDb's world coordinate system, which is right-handed with Z pointing up. + * * The results of changing [ExportGraphicsProps]($imodeljs-backend) during the [ExportGraphicsProps.onGraphics]($imodeljs-backend) callback are not defined. + * + * Example that prints the mesh for element 1 to stdout in [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file) + * ``` + * const onGraphics: ExportGraphicsFunction = (info: ExportGraphicsInfo) => { + * const mesh: ExportGraphicsMesh = info.mesh; + * for (let i = 0; i < mesh.points.length; i += 3) { + * process.stdout.write(`v ${mesh.points[i]} ${mesh.points[i + 1]} ${mesh.points[i + 2]}\n`); + * process.stdout.write(`vn ${mesh.normals[i]} ${mesh.normals[i + 1]} ${mesh.normals[i + 2]}\n`); + * } + * + * for (let i = 0; i < mesh.params.length; i += 2) { + * process.stdout.write(`vt ${mesh.params[i]} ${mesh.params[i + 1]}\n`); + * } + * + * for (let i = 0; i < mesh.indices.length; i += 3) { + * const p1 = mesh.indices[i]; + * const p2 = mesh.indices[i + 1]; + * const p3 = mesh.indices[i + 2]; + * process.stdout.write(`f ${p1}/${p1}/${p1} ${p2}/${p2}/${p2} ${p3}/${p3}/${p3}\n`); + * } + * + * return true; + * }; + * + * iModel.exportGraphics(({ onGraphics, elementIdArray: ["0x1"] })); + * ``` + * @returns 0 if successful, status otherwise + * @beta Waiting for feedback from community before finalizing. + */ + public exportGraphics(exportProps: ExportGraphicsProps): DbResult { + return this.nativeDb.exportGraphics(exportProps); + } + } export namespace IModelDb { diff --git a/core/backend/src/IModelHost.ts b/core/backend/src/IModelHost.ts index 4a580b7..dd07f76 100644 --- a/core/backend/src/IModelHost.ts +++ b/core/backend/src/IModelHost.ts @@ -6,7 +6,7 @@ import { BeEvent, Logger, IModelStatus } from "@bentley/bentleyjs-core"; import { Config, IModelClient, UrlDiscoveryClient } from "@bentley/imodeljs-clients"; -import { BentleyStatus, IModelError } from "@bentley/imodeljs-common"; +import { BentleyStatus, IModelError, MobileRpcConfiguration } from "@bentley/imodeljs-common"; import * as path from "path"; import { BisCore } from "./BisCore"; import { BriefcaseManager } from "./BriefcaseManager"; @@ -118,8 +118,9 @@ export class IModelHost { if (IModelHost.configuration) throw new IModelError(BentleyStatus.ERROR, "startup may only be called once", Logger.logError, loggingCategory, () => (configuration)); - this.validateNodeJsVersion(); - + if (!MobileRpcConfiguration.isMobileBackend) { + this.validateNodeJsVersion(); + } this.backendVersion = require("../package.json").version; initializeRpcBackend(); diff --git a/core/backend/src/IModelJsNative.ts b/core/backend/src/IModelJsNative.ts index 45283e4..c3edf88 100644 --- a/core/backend/src/IModelJsNative.ts +++ b/core/backend/src/IModelJsNative.ts @@ -7,6 +7,7 @@ import { IDisposable, IModelStatus, Logger, OpenMode, RepositoryStatus, StatusCodeWithMessage, } from "@bentley/bentleyjs-core"; import { ElementProps, ChangedElements } from "@bentley/imodeljs-common"; +import { ExportGraphicsProps } from "./ExportGraphics"; import { IModelDb } from "./IModelDb"; // tslint:disable:prefer-get @@ -84,6 +85,7 @@ export declare namespace IModelJsNative { public enableTxnTesting(): void; public endMultiTxnOperation(): DbResult; public executeTest(testName: string, params: string): string; + public exportGraphics(exportProps: ExportGraphicsProps): DbResult; public extractBriefcaseManagerResourcesRequest(reqOut: BriefcaseManagerResourcesRequest, reqIn: BriefcaseManagerResourcesRequest, locks: boolean, codes: boolean): void; public extractBulkResourcesRequest(req: BriefcaseManagerResourcesRequest, locks: boolean, codes: boolean): void; public extractChangeSummary(changeCacheFile: ECDb, changesetFilePath: string): ErrorStatusOrResult; diff --git a/core/backend/src/imodeljs-backend.ts b/core/backend/src/imodeljs-backend.ts index 81250dd..44273ba 100644 --- a/core/backend/src/imodeljs-backend.ts +++ b/core/backend/src/imodeljs-backend.ts @@ -16,6 +16,7 @@ export * from "./Element"; export * from "./ElementAspect"; export * from "./ElementPropertyFormatter"; export * from "./Entity"; +export * from "./ExportGraphics"; export * from "./ExpressServer"; export * from "./IModelJsFs"; export * from "./IModelHost"; diff --git a/core/bentley/CHANGELOG.json b/core/bentley/CHANGELOG.json index 37fcbfd..eca19e1 100644 --- a/core/bentley/CHANGELOG.json +++ b/core/bentley/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/bentleyjs-core", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/bentleyjs-core_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/bentleyjs-core_v0.189.0", diff --git a/core/bentley/CHANGELOG.md b/core/bentley/CHANGELOG.md index aa0b983..8bc22b8 100644 --- a/core/bentley/CHANGELOG.md +++ b/core/bentley/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/bentleyjs-core -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/bentley/package.json b/core/bentley/package.json index 3d76961..c957887 100644 --- a/core/bentley/package.json +++ b/core/bentley/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/bentleyjs-core", - "version": "0.189.0", + "version": "0.190.0", "description": "Bentley JavaScript core components", "main": "lib/bentleyjs-core.js", "typings": "lib/bentleyjs-core", @@ -39,8 +39,8 @@ }, "dependencies": {}, "devDependencies": { - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/mocha": "^5.2.5", "@types/node": "10.12.18", diff --git a/core/clients-backend/CHANGELOG.json b/core/clients-backend/CHANGELOG.json index 48b034b..5c83452 100644 --- a/core/clients-backend/CHANGELOG.json +++ b/core/clients-backend/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@bentley/imodeljs-clients-backend", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-clients-backend_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Add missing peerDependencies on @bentley/geometry-core and @bentley/imodeljs-clients" + }, + { + "comment": "Allow mobile webpack to skip node dependent module" + }, + { + "comment": "Replaced OidcAgentClient with OidcAgentClientV2." + }, + { + "comment": "Reverted changes to OidcAgentClient. " + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-clients-backend_v0.189.0", diff --git a/core/clients-backend/CHANGELOG.md b/core/clients-backend/CHANGELOG.md index aa0b308..6d52d20 100644 --- a/core/clients-backend/CHANGELOG.md +++ b/core/clients-backend/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @bentley/imodeljs-clients-backend -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Add missing peerDependencies on @bentley/geometry-core and @bentley/imodeljs-clients +- Allow mobile webpack to skip node dependent module +- Replaced OidcAgentClient with OidcAgentClientV2. +- Reverted changes to OidcAgentClient. ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/clients-backend/package.json b/core/clients-backend/package.json index c8d8f68..4ce5dc2 100644 --- a/core/clients-backend/package.json +++ b/core/clients-backend/package.json @@ -1,8 +1,11 @@ { "name": "@bentley/imodeljs-clients-backend", - "version": "0.189.0", + "version": "0.190.0", "description": "Clients for various Bentley Services used by iModel.js at the backend", "main": "lib/imodeljs-clients-backend.js", + "browser": { + "./lib/imodeljs-clients-backend.js": "./lib/imodeljs-clients-backend-mobile.js" + }, "typings": "lib/imodeljs-clients-backend", "license": "MIT", "engines": { @@ -35,16 +38,20 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/config-loader": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", "@types/chai": "^4.1.4", "@types/mocha": "^5.2.5", "@types/nock": "^9.1.2", @@ -52,6 +59,7 @@ "@types/deep-assign": "^0.1.0", "@types/fs-extra": "^4.0.7", "@types/js-base64": "^2.3.1", + "@types/jsonwebtoken": "^8.3.1", "chai": "^4.1.2", "cpx": "^1.5.0", "nock": "^9.2.3", @@ -65,14 +73,14 @@ "typescript": "~3.2.2" }, "dependencies": { - "@bentley/imodeljs-clients": "0.189.0", "openid-client": "^2.3.1", "@openid/appauth": "^1.1.1", "https-proxy-agent": "^2.2.1", "deep-assign": "^2.0.0", "fs-extra": "^6.0.1", "js-base64": "^2.4.5", - "fs-write-stream-atomic": "^1.0.10" + "fs-write-stream-atomic": "^1.0.10", + "jsonwebtoken": "^8.5.0" }, "nyc": { "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc" diff --git a/ui/core/src/ui-core/table/index.scss b/core/clients-backend/src/imodeljs-clients-backend-mobile.ts similarity index 86% rename from ui/core/src/ui-core/table/index.scss rename to core/clients-backend/src/imodeljs-clients-backend-mobile.ts index 6c35d83..faffe04 100644 --- a/ui/core/src/ui-core/table/index.scss +++ b/core/clients-backend/src/imodeljs-clients-backend-mobile.ts @@ -1,5 +1,5 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -@import "./variables"; +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +export * from "./imodelhub/IOSAzureFileHandler"; diff --git a/core/clients/CHANGELOG.json b/core/clients/CHANGELOG.json index d282587..40069f7 100644 --- a/core/clients/CHANGELOG.json +++ b/core/clients/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@bentley/imodeljs-clients", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-clients_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Add missing peerDependency on @bentley/geometry-core" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-clients_v0.189.0", diff --git a/core/clients/CHANGELOG.md b/core/clients/CHANGELOG.md index 2967385..6c90e8e 100644 --- a/core/clients/CHANGELOG.md +++ b/core/clients/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @bentley/imodeljs-clients -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Add missing peerDependency on @bentley/geometry-core ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/clients/package.json b/core/clients/package.json index 083d533..998eeea 100644 --- a/core/clients/package.json +++ b/core/clients/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-clients", - "version": "0.189.0", + "version": "0.190.0", "description": "Clients for various Bentley Services used by iModel.js", "main": "lib/imodeljs-clients.js", "typings": "lib/imodeljs-clients", @@ -48,18 +48,19 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", - "@bentley/geometry-core": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/config-loader": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/deep-assign": "^0.1.0", "@types/js-base64": "^2.3.1", diff --git a/core/clients/src/UserInfo.ts b/core/clients/src/UserInfo.ts index 1c02b34..519a255 100644 --- a/core/clients/src/UserInfo.ts +++ b/core/clients/src/UserInfo.ts @@ -27,7 +27,7 @@ export class UserInfo { public static fromJson(jsonObj: any): UserInfo { const id: string = jsonObj.sub; const email: any = jsonObj.email ? { id: jsonObj.email, isVerified: jsonObj.email_verified } : undefined; - const profile: any = jsonObj.name ? { name: jsonObj.name, preferredUserName: jsonObj.preferred_username, firstName: jsonObj.given_name, lastName: jsonObj.family_name } : undefined; + const profile: any = jsonObj.given_name ? { name: jsonObj.name, preferredUserName: jsonObj.preferred_username, firstName: jsonObj.given_name, lastName: jsonObj.family_name } : undefined; const organization: any = jsonObj.org ? { id: jsonObj.org, name: jsonObj.org_name } : undefined; const featureTracking: any = jsonObj.feature_tracking ? { ultimateSite: jsonObj.ultimate_site, usageCountryIso: jsonObj.usage_country_iso } : undefined; return new UserInfo(id, email, profile, organization, featureTracking); diff --git a/core/common/CHANGELOG.json b/core/common/CHANGELOG.json index a66d816..43eca85 100644 --- a/core/common/CHANGELOG.json +++ b/core/common/CHANGELOG.json @@ -1,6 +1,24 @@ { "name": "@bentley/imodeljs-common", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-common_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Cleaned up documentation related to the display system." + }, + { + "comment": "Rename PagableECSql interface to PageableECSql to fix spelling error" + }, + { + "comment": "Documentation for Skybox" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-common_v0.189.0", diff --git a/core/common/CHANGELOG.md b/core/common/CHANGELOG.md index 5fd8194..81c0a01 100644 --- a/core/common/CHANGELOG.md +++ b/core/common/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log - @bentley/imodeljs-common -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Cleaned up documentation related to the display system. +- Rename PagableECSql interface to PageableECSql to fix spelling error +- Documentation for Skybox ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/common/package.json b/core/common/package.json index 14cacec..46a4184 100644 --- a/core/common/package.json +++ b/core/common/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-common", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js components common to frontend and backend", "license": "MIT", "main": "lib/imodeljs-common.js", @@ -52,20 +52,20 @@ "NOTE: peerDependencies are a standard way for npm to perform a module compatibility check" ], "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0" }, "//devDependencies": [ "NOTE: Must include modules mentioned in peerDependencies since those are not auto-installed", "NOTE: Must include modules used by the scripts section of package.json" ], "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/semver": "^5.5.0", "@types/url-search-params": "^0.10.2", "rimraf": "^2.6.2", diff --git a/core/common/src/Paging.ts b/core/common/src/Paging.ts index f1f8d34..d015a0d 100644 --- a/core/common/src/Paging.ts +++ b/core/common/src/Paging.ts @@ -15,13 +15,13 @@ export interface PageOptions { } /** Default option used when caller does not provide one */ export const kPagingDefaultOptions: PageOptions = { start: 0, size: 512 }; -export interface PagableECSql { +export interface PageableECSql { /** Compute number of rows that would be returned by the ECSQL. */ queryRowCount(ecsql: string, bindings?: any[] | object): Promise; /** Execute a query agaisnt this ECDb */ queryPage(ecsql: string, bindings?: any[] | object, options?: PageOptions): Promise; - /** Execute a pagable query. */ + /** Execute a pageable query. */ query(ecsql: string, bindings?: any[] | object, options?: PageOptions): AsyncIterableIterator; } diff --git a/core/common/src/TileProps.ts b/core/common/src/TileProps.ts index c8b8e5a..d552a9f 100644 --- a/core/common/src/TileProps.ts +++ b/core/common/src/TileProps.ts @@ -24,7 +24,7 @@ export interface TileProps { transformToRoot?: TransformProps; } -/** @hidden */ +/** @internal */ export interface TileTreeProps { /** The unique identifier of this TileTree within the iModel */ id: string; @@ -38,4 +38,6 @@ export interface TileTreeProps { yAxisUp?: boolean; /** Optional - if defined and true, this TileTree contains only terrain tiles. */ isTerrain?: boolean; + /** Optionally specifies the maximum tile format version supported. */ + formatVersion?: number; } diff --git a/core/common/src/ViewProps.ts b/core/common/src/ViewProps.ts index 3d16ab9..bead520 100644 --- a/core/common/src/ViewProps.ts +++ b/core/common/src/ViewProps.ts @@ -156,7 +156,7 @@ export interface GroundPlaneProps { belowColor?: ColorDefProps; } -/** Enumerates the supported types of [[SkyBox]] images. +/** Enumerates the supported types of [SkyBox]($frontend) images. * @public */ export const enum SkyBoxImageType { @@ -173,11 +173,17 @@ export const enum SkyBoxImageType { * @public */ export interface SkyCubeProps { + /** Id of a persistent texture element stored in the iModel to use for the front side of the skybox cube. */ front?: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the back side of the skybox cube. */ back?: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the top of the skybox cube. */ top?: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the bottom of the skybox cube. */ bottom?: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the right side of the skybox cube. */ right?: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the left side of the skybox cube. */ left?: Id64String; } @@ -187,32 +193,32 @@ export interface SkyCubeProps { export interface SkyBoxImageProps { /** The type of skybox image. */ type?: SkyBoxImageType; - /** For [[SkyBoxImageType.Spherical]], the element ID of the texture to be drawn as the "sky". */ + /** For [[SkyBoxImageType.Spherical]], the Id of a persistent texture element stored in the iModel to be drawn as the "sky". */ texture?: Id64String; - /** For [[SkyBoxImageType.Cube]], the IDs of the texture elements drawn on each face of the cube. */ + /** For [[SkyBoxImageType.Cube]], the Ids of persistent texture elements stored in the iModel drawn on each face of the cube. */ textures?: SkyCubeProps; } -/** JSON representation of a [[SkyBox]]. +/** JSON representation of a [SkyBox]($frontend). * @public */ export interface SkyBoxProps { /** Whether or not the skybox should be displayed. Defaults to false. */ display?: boolean; - /** @hidden ###TODO Figure out how this is used... */ + /** For a [[SkyGradient]], if true, a 2-color gradient skybox is used instead of a 4-color. Defaults to false. */ twoColor?: boolean; - /** @hidden ###TODO Figure out how this is used... */ - groundExponent?: number; - /** @hidden ###TODO Figure out how this is used... */ - skyExponent?: number; - /** For a [[SkyGradient]], the color of the ground. */ + /** For a 4-color [[SkyGradient]], the color of the sky at the horizon. For a 2-color [[SkyGradient]], the color of the sky. */ + skyColor?: ColorDefProps; + /** For a 4-color [[SkyGradient]], the color of the ground at the horizon. For a 2-color [[SkyGradient]], the color of the ground. */ groundColor?: ColorDefProps; - /** @hidden ###TODO Figure out how this is used... */ + /** For a 4-color [[SkyGradient]], the color of the sky when looking straight up. */ zenithColor?: ColorDefProps; - /** @hidden ###TODO Figure out how this is used... */ + /** For a 4-color [[SkyGradient]], the color of the ground when looking straight down. */ nadirColor?: ColorDefProps; - /** For a [[SkyGradient]], the color of the sky. */ - skyColor?: ColorDefProps; + /** For a 4-color [[SkyGradient]], controls speed of change from sky color to zenith color. */ + skyExponent?: number; + /** For a 4-color [[SkyGradient]], controls speed of change from ground color to nadir color. */ + groundExponent?: number; /** For a [[SkySphere]] or [[SkyCube]], the skybox image(s). */ image?: SkyBoxImageProps; } diff --git a/core/ecschema-metadata/CHANGELOG.json b/core/ecschema-metadata/CHANGELOG.json index ad69c83..9551c06 100644 --- a/core/ecschema-metadata/CHANGELOG.json +++ b/core/ecschema-metadata/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/ecschema-metadata", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/ecschema-metadata_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/ecschema-metadata_v0.189.0", diff --git a/core/ecschema-metadata/CHANGELOG.md b/core/ecschema-metadata/CHANGELOG.md index 2ffbc55..941ce18 100644 --- a/core/ecschema-metadata/CHANGELOG.md +++ b/core/ecschema-metadata/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/ecschema-metadata -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/ecschema-metadata/package.json b/core/ecschema-metadata/package.json index ea8f7af..6bf3f57 100644 --- a/core/ecschema-metadata/package.json +++ b/core/ecschema-metadata/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/ecschema-metadata", - "version": "0.189.0", + "version": "0.190.0", "description": "ECObjects core concepts in typescript", "license": "MIT", "main": "lib/ecschema-metadata.js", @@ -31,9 +31,9 @@ "url": "http://www.bentley.com" }, "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/glob": "^5.0.35", @@ -57,10 +57,11 @@ "bunyan-seq": "^0.2.0" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0" }, "nyc": { - "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc" + "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc", + "sourceMap": false } } diff --git a/core/electron-manager/CHANGELOG.json b/core/electron-manager/CHANGELOG.json index 440b85b..57325a0 100644 --- a/core/electron-manager/CHANGELOG.json +++ b/core/electron-manager/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/electron-manager", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/electron-manager_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/electron-manager_v0.189.0", diff --git a/core/electron-manager/CHANGELOG.md b/core/electron-manager/CHANGELOG.md index 5c5be2d..5d8fced 100644 --- a/core/electron-manager/CHANGELOG.md +++ b/core/electron-manager/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/electron-manager -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/electron-manager/package.json b/core/electron-manager/package.json index 060dbe7..ffba00b 100644 --- a/core/electron-manager/package.json +++ b/core/electron-manager/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/electron-manager", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js electron utilities", "main": "lib/ElectronManager.js", "typings": "lib/ElectronManager", @@ -38,7 +38,7 @@ "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@types/node": "10.12.18", "electron": "^4.0.1", "rimraf": "^2.6.2", diff --git a/core/frontend/CHANGELOG.json b/core/frontend/CHANGELOG.json index f685485..cacade2 100644 --- a/core/frontend/CHANGELOG.json +++ b/core/frontend/CHANGELOG.json @@ -1,6 +1,42 @@ { "name": "@bentley/imodeljs-frontend", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-frontend_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Add ColorEditor to list of available Type Editors including new ColorParams to specify set of colors." + }, + { + "comment": "#73219 FitViewTool enhancement to fit to isolated elements or clip volume." + }, + { + "comment": "Supply additional statistics for monitoring tile requests." + }, + { + "comment": "Resolve transparency rendering error in multi-pass compositor due to way textures are bound." + }, + { + "comment": "Cleaned up documentation related to the display system." + }, + { + "comment": "use bubble-up for keyboard events" + }, + { + "comment": "Plugin Enhancements" + }, + { + "comment": "Documentation for Skybox" + }, + { + "comment": "Added vertex handles for line/arrow markup." + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-frontend_v0.189.0", diff --git a/core/frontend/CHANGELOG.md b/core/frontend/CHANGELOG.md index f37fc5f..f0bb663 100644 --- a/core/frontend/CHANGELOG.md +++ b/core/frontend/CHANGELOG.md @@ -1,6 +1,21 @@ # Change Log - @bentley/imodeljs-frontend -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Add ColorEditor to list of available Type Editors including new ColorParams to specify set of colors. +- #73219 FitViewTool enhancement to fit to isolated elements or clip volume. +- Supply additional statistics for monitoring tile requests. +- Resolve transparency rendering error in multi-pass compositor due to way textures are bound. +- Cleaned up documentation related to the display system. +- use bubble-up for keyboard events +- Plugin Enhancements +- Documentation for Skybox +- Added vertex handles for line/arrow markup. ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/frontend/certa.json b/core/frontend/certa.json new file mode 100644 index 0000000..6e2e05d --- /dev/null +++ b/core/frontend/certa.json @@ -0,0 +1,21 @@ +{ + // Comments are allowed here! + "testBundle": "./lib/test/webpack/bundled-tests.js", + "instrumentedTestBundle": "./lib/test/webpack/bundled-tests.instrumented.js", + "ports": { + "frontend": 3000, + "frontendDebugging": 9223 + }, + "mochaOptions": { + "timeout": 2000 // These are unit tests; they should be quick. + }, + "chromeOptions": { + "publicDirs": [ + "src/public", + "src/test/public", + ], + "args": [ + "--disable-web-security" + ] + } +} \ No newline at end of file diff --git a/core/frontend/package.json b/core/frontend/package.json index 9fd7f6f..7b11290 100644 --- a/core/frontend/package.json +++ b/core/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-frontend", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js frontend components", "main": "lib/imodeljs-frontend.js", "typings": "lib/imodeljs-frontend", @@ -11,8 +11,10 @@ "docs": "node ./node_modules/@bentley/build-tools/scripts/docs.js --source=./src --includes=../../generated-docs/extract --json=../../generated-docs/core/imodeljs-frontend/file.json --tsIndexFile=./imodeljs-frontend.ts --onlyJson %TYPEDOC_THEME% --excludes=webgl/**/*,**/primitives", "extract-api": "node ./node_modules/@bentley/build-tools/scripts/extract-api.js --entry=imodeljs-frontend", "lint": "tslint --project . 1>&2", - "test": "", - "cover": "" + "test": "npm run webpackTests && node ./node_modules/@bentley/certa/bin/certa.js -r chrome", + "cover": "npm test -- --cover", + "debug:tests": "node ./node_modules/@bentley/certa/bin/certa.js -r chrome --debug", + "webpackTests": "webpack --config ./src/test/utils/webpack.config.js 1>&2" }, "iModelJs": { "buildModule": { @@ -53,33 +55,42 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/certa": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0", + "@bentley/webpack-tools": "0.190.0", + "@types/chai": "^4.1.4", "@types/js-base64": "^2.3.1", + "@types/mocha": "^5.2.5", "@types/node": "10.12.18", "@types/semver": "^5.5.0", + "chai": "^4.1.2", + "glob": "^7.1.2", + "mocha": "^5.2.0", + "nyc": "^13.0.1", "rimraf": "^2.6.2", + "source-map-loader": "^0.2.3", "tslint": "^5.11.0", "typedoc": "^0.11.1", - "typescript": "~3.2.2" + "typescript": "~3.2.2", + "webpack": "^4.20.2" }, "//dependencies": [ "NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API", @@ -90,5 +101,8 @@ "js-base64": "^2.4.5", "oidc-client": "^1.5.2", "semver": "^5.5.0" + }, + "nyc": { + "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc" } } diff --git a/core/frontend/src/CategorySelectorState.ts b/core/frontend/src/CategorySelectorState.ts index b44161b..f52dc02 100644 --- a/core/frontend/src/CategorySelectorState.ts +++ b/core/frontend/src/CategorySelectorState.ts @@ -32,6 +32,9 @@ export class CategorySelectorState extends ElementState { return val; } + /** Returns true if this category selector is logically equivalent to the specified category selector. + * Two category selectors are logically equivalent if they have the same name and contain the same set of category Ids. + */ public equalState(other: CategorySelectorState): boolean { if (this.categories.size !== other.categories.size) return false; @@ -49,7 +52,7 @@ export class CategorySelectorState extends ElementState { return true; } - /** Get the name of this CategorySelector */ + /** The name of this CategorySelector */ public get name(): string { return this.code.getValue(); } /** Determine whether this CategorySelector includes the specified categoryId string */ @@ -58,12 +61,15 @@ export class CategorySelectorState extends ElementState { /** Determine whether this CategorySelector includes the specified category */ public isCategoryViewed(categoryId: Id64String): boolean { return this.has(categoryId); } - /** Add a category to this CategorySelector */ + /** Add one or more categories to this CategorySelector */ public addCategories(arg: Id64Arg): void { Id64.toIdSet(arg).forEach((id) => this.categories.add(id)); } - /** Drop a category from this CategorySelector */ + /** Remove one or more categories from this CategorySelector */ public dropCategories(arg: Id64Arg) { Id64.toIdSet(arg).forEach((id) => this.categories.delete(id)); } - /** Add or Drop categories to this CategorySelector */ + /** Add or remove categories from this CategorySelector. + * @param arg The categories to add or remove + * @param add If true, categories will be added; otherwise they will be removed. + */ public changeCategoryDisplay(arg: Id64Arg, add: boolean): void { if (add) this.addCategories(arg); else this.dropCategories(arg); } } diff --git a/core/frontend/src/ContextRealityModelState.ts b/core/frontend/src/ContextRealityModelState.ts index 9799b41..e6165ec 100644 --- a/core/frontend/src/ContextRealityModelState.ts +++ b/core/frontend/src/ContextRealityModelState.ts @@ -12,6 +12,7 @@ import { RealityModelTileTree, RealityModelTileClient, RealityModelTileUtils } f import { RealityDataServicesClient, RealityData } from "@bentley/imodeljs-clients"; import { ActivityLoggingContext, Guid, Id64String } from "@bentley/bentleyjs-core"; +/** @internal */ export class ContextRealityModelState implements TileTreeModelState { protected _tilesetUrl: string; protected _name: string; diff --git a/core/frontend/src/DisplayStyleState.ts b/core/frontend/src/DisplayStyleState.ts index 7f55b0c..543fdd5 100644 --- a/core/frontend/src/DisplayStyleState.ts +++ b/core/frontend/src/DisplayStyleState.ts @@ -43,8 +43,13 @@ export abstract class DisplayStyleState extends ElementState implements DisplayS private _analysisStyle?: AnalysisStyle; private _scheduleScript?: RenderScheduleState.Script; + /** The container for this display style's settings. */ public abstract get settings(): DisplayStyleSettings; + /** Construct a new DisplayStyleState from its JSON representation. + * @param props JSON representation of the display style. + * @param iModel IModelConnection containing the display style. + */ constructor(props: DisplayStyleProps, iModel: IModelConnection) { super(props, iModel); const styles = this.jsonProperties.styles; @@ -65,25 +70,34 @@ export abstract class DisplayStyleState extends ElementState implements DisplayS } } - /* * @hidden */ + /** Modify the background map display settings. + * @param mapProps JSON representation of the new settings. + * @see [[ViewFlags.backgroundMap]] for toggling display of the map. + */ public setBackgroundMap(mapProps: BackgroundMapProps): void { if (!this.backgroundMap.equalsProps(mapProps)) { this._backgroundMap = new BackgroundMapState(mapProps, this.iModel); this.settings.backgroundMap = mapProps; } } - /** @hidden */ + + /** @internal */ public forEachContextRealityModel(func: (model: TileTreeModelState) => void): void { for (const contextRealityModel of this._contextRealityModels) { func(contextRealityModel); } } + + /** Performs logical comparison against another display style. + * @param other The display style to which to compare. + * @returns true if the specified display style is logically equivalent to this display style - i.e., both styles have the same values for all of their settings. + */ public equalState(other: DisplayStyleState): boolean { return JSON.stringify(this.settings) === JSON.stringify(other.settings); } - /** @hidden */ + /** @internal */ public get backgroundMap() { return this._backgroundMap; } - /** Get the name of this DisplayStyle */ + /** The name of this DisplayStyle */ public get name(): string { return this.code.getValue(); } /** Settings controlling display of analytical models. @@ -102,15 +116,18 @@ export abstract class DisplayStyleState extends ElementState implements DisplayS this.jsonProperties.analysisStyle = this._analysisStyle; } + + /** @internal */ public get scheduleScript(): RenderScheduleState.Script | undefined { return this._scheduleScript; } + + /** @internal */ public getAnimationBranches(scheduleTime: number): AnimationBranchStates | undefined { return this._scheduleScript === undefined ? undefined : this._scheduleScript.getAnimationBranches(scheduleTime); } - /** @hidden */ + /** @internal */ public get contextRealityModels(): ContextRealityModelState[] { return this._contextRealityModels; } - /** @hidden */ public set contextRealityModels(contextRealityModels: ContextRealityModelState[]) { this._contextRealityModels = contextRealityModels; } - /** @hidden */ + /** @internal */ public containsContextRealityModel(contextRealityModel: ContextRealityModelState) { for (const curr of this._contextRealityModels) if (curr.matches(contextRealityModel)) @@ -136,9 +153,10 @@ export abstract class DisplayStyleState extends ElementState implements DisplayS public get monochromeColor(): ColorDef { return this.settings.monochromeColor; } public set monochromeColor(val: ColorDef) { this.settings.monochromeColor = val; } - /** @hidden */ + /** @internal */ public get backgroundMapPlane(): Plane3dByOriginAndUnitNormal | undefined { return this.viewFlags.backgroundMap ? this.backgroundMap.getPlane() : undefined; } + /** Returns true if this is a 3d display style. */ public is3d(): this is DisplayStyle3dState { return this instanceof DisplayStyle3dState; } /** Customize the way geometry belonging to a [[SubCategory]] is drawn by this display style. @@ -169,7 +187,7 @@ export abstract class DisplayStyleState extends ElementState implements DisplayS public getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined { return this.settings.getSubCategoryOverride(id); } } -/** A DisplayStyle for 2d views +/** A display style that can be applied to 2d views. * @public */ export class DisplayStyle2dState extends DisplayStyleState { @@ -223,7 +241,7 @@ export abstract class SkyBox implements SkyBoxProps { return undefined !== skybox ? skybox : new SkyGradient(json); } - /** @hidden */ + /** @internal */ public abstract async loadParams(_system: RenderSystem, _iModel: IModelConnection): Promise; } @@ -232,15 +250,19 @@ export abstract class SkyBox implements SkyBoxProps { * - A cube with a texture image mapped to each face; * - A sphere with a single texture image mapped to its surface; * - A sphere with a [[Gradient]] mapped to its surface. - * @hidden + * @public */ export namespace SkyBox { - /** @hidden */ + /** Parameters defining a spherical [[SkyBox]]. + * @internal + */ export class SphereParams { public constructor(public readonly texture: RenderTexture, public readonly rotation: number) { } } - /** @hidden */ + /** Parameters used by the [[RenderSystem]] to instantiate a [[SkyBox]]. + * @internal + */ export class CreateParams { public readonly gradient?: SkyGradient; public readonly sphere?: SphereParams; @@ -260,17 +282,27 @@ export namespace SkyBox { } } -// ###TODO Document me... -/** @beta Needs documentation before moving to public */ +/** A [[SkyBox]] drawn as a sphere with a gradient mapped to its interior surface. + * @see [[SkyBox.createFromJSON]] + * @public + */ export class SkyGradient extends SkyBox { + /** If true, a 2-color gradient is used (ground & sky colors only), if false a 4-color gradient is used, defaults to false. */ public readonly twoColor: boolean = false; - public readonly zenithColor: ColorDef; // the color of the zenith part of the sky gradient (shown when looking straight up.) - public readonly nadirColor: ColorDef; // the color of the nadir part of the ground gradient (shown when looking straight down.) - public readonly groundColor: ColorDef; // the color of the ground part of the ground gradient - public readonly skyColor: ColorDef; // the color of the sky part of the sky gradient - public readonly groundExponent: number = 4.0; // the cutoff between ground and nadir - public readonly skyExponent: number = 4.0; // the cutoff between sky and zenith - + /** The color of the sky (for 4-color gradient is sky color at horizon), defaults to (143, 205, 255). */ + public readonly skyColor: ColorDef; + /** The color of the ground (for 4-color gradient is ground color at horizon), defaults to (120, 143, 125). */ + public readonly groundColor: ColorDef; + /** For 4-color gradient is color of sky at zenith (shown when looking straight up), defaults to (54, 117, 255). */ + public readonly zenithColor: ColorDef; + /** For 4-color gradient is color of ground at nadir (shown when looking straight down), defaults to (40, 15, 0). */ + public readonly nadirColor: ColorDef; + /** Controls speed of gradient change from skyColor to zenithColor (4-color SkyGradient only), defaults to 4.0. */ + public readonly skyExponent: number = 4.0; + /** Controls speed of gradient change from groundColor to nadirColor (4-color SkyGradient only), defaults to 4.0. */ + public readonly groundExponent: number = 4.0; + + /** Construct a SkyGradient from its JSON representation. */ public constructor(sky?: SkyBoxProps) { super(sky); @@ -299,6 +331,7 @@ export class SkyGradient extends SkyBox { return val; } + /** @internal */ public async loadParams(_system: RenderSystem, iModel: IModelConnection): Promise { return Promise.resolve(SkyBox.CreateParams.createForGradient(this, iModel.globalOrigin.z)); } @@ -309,7 +342,7 @@ export class SkyGradient extends SkyBox { * @public */ export class SkySphere extends SkyBox { - /** The ID of the texture element which supplies the skybox image. */ + /** The Id of a persistent texture element stored in the iModel which supplies the skybox image. */ public textureId: Id64String; private constructor(textureId: Id64String, display?: boolean) { @@ -317,7 +350,10 @@ export class SkySphere extends SkyBox { this.textureId = textureId; } - /** @hidden */ + /** Create a [[SkySphere]] from its JSON representation. + * @param json: The JSON representation + * @returns A SkySphere, or undefined if the JSON lacks a valid texture Id. + */ public static fromJSON(json: SkyBoxProps): SkySphere | undefined { const textureId = Id64.fromJSON(undefined !== json.image ? json.image.texture : undefined); return undefined !== textureId && Id64.isValid(textureId) ? new SkySphere(textureId, json.display) : undefined; @@ -332,7 +368,7 @@ export class SkySphere extends SkyBox { return val; } - /** @hidden */ + /** @internal */ public async loadParams(system: RenderSystem, iModel: IModelConnection): Promise { const texture = await system.loadTexture(this.textureId, iModel); if (undefined === texture) @@ -344,16 +380,23 @@ export class SkySphere extends SkyBox { } /** A [[SkyBox]] drawn as a cube with an image mapped to each of its interior faces. - * Each member specifies the ID of a texture element from which the image mapped to the corresponding face is obtained. + * Each member specifies the Id of a persistent texture element stored in the iModel + * from which the image mapped to the corresponding face is obtained. * @see [[SkyBox.createFromJSON]]. * @public */ export class SkyCube extends SkyBox implements SkyCubeProps { + /** Id of a persistent texture element stored in the iModel to use for the front side of the skybox cube. */ public readonly front: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the back side of the skybox cube. */ public readonly back: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the top of the skybox cube. */ public readonly top: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the bottom of the skybox cube. */ public readonly bottom: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the front right of the skybox cube. */ public readonly right: Id64String; + /** Id of a persistent texture element stored in the iModel to use for the left side of the skybox cube. */ public readonly left: Id64String; private constructor(front: Id64String, back: Id64String, top: Id64String, bottom: Id64String, right: Id64String, left: Id64String, display?: boolean) { @@ -367,7 +410,9 @@ export class SkyCube extends SkyBox implements SkyCubeProps { this.left = left; } - /** @hidden */ + /** Use [[SkyCube.create]]. + * @internal + */ public static fromJSON(skyboxJson: SkyBoxProps): SkyCube | undefined { const image = skyboxJson.image; const json = (undefined !== image && image.type === SkyBoxImageType.Cube ? image.textures : undefined) as SkyCubeProps; @@ -393,7 +438,16 @@ export class SkyCube extends SkyBox implements SkyCubeProps { return val; } - /** @hidden */ + /** Create and return a SkyCube. (Calls the SkyCube constructor after validating the Ids passed in for the images.) + * @param front The Id of the image to use for the front side of the sky cube. + * @param back The Id of the image to use for the back side of the sky cube. + * @param top The Id of the image to use for the top side of the sky cube. + * @param bottom The Id of the image to use for the bottom side of the sky cube. + * @param right The Id of the image to use for the right side of the sky cube. + * @param left The Id of the image to use for the left side of the sky cube. + * @returns A SkyCube, or undefined if any of the supplied texture Ids are invalid. + * @note All Ids must refer to a persistent texture element stored in the iModel. + */ public static create(front: Id64String, back: Id64String, top: Id64String, bottom: Id64String, right: Id64String, left: Id64String, display?: boolean): SkyCube | undefined { if (!Id64.isValid(front) || !Id64.isValid(back) || !Id64.isValid(top) || !Id64.isValid(bottom) || !Id64.isValid(right) || !Id64.isValid(left)) return undefined; @@ -401,7 +455,7 @@ export class SkyCube extends SkyBox implements SkyCubeProps { return new SkyCube(front, back, top, bottom, right, left, display); } - /** @hidden */ + /** @internal */ public async loadParams(system: RenderSystem, iModel: IModelConnection): Promise { // ###TODO: We never cache the actual texture *images* used here to create a single cubemap texture... const textureIds = new Set([this.front, this.back, this.top, this.bottom, this.right, this.left]); @@ -412,7 +466,7 @@ export class SkyCube extends SkyBox implements SkyCubeProps { try { const images = await Promise.all(promises); - // ###TODO there's gotta be a simpler way to map the unique images back to their texture IDs... + // ###TODO there's gotta be a simpler way to map the unique images back to their texture Ids... const idToImage = new Map(); let index = 0; for (const textureId of textureIds) { @@ -442,6 +496,7 @@ export class Environment implements EnvironmentProps { public readonly sky: SkyBox; public readonly ground: GroundPlane; + /** Construct from JSON representation. */ public constructor(json?: EnvironmentProps) { this.sky = SkyBox.createFromJSON(undefined !== json ? json.sky : undefined); this.ground = new GroundPlane(undefined !== json ? json.ground : undefined); @@ -455,11 +510,11 @@ export class Environment implements EnvironmentProps { } } -/** A [[DisplayStyle]] for 3d views +/** A [[DisplayStyleState]] that can be applied to spatial views. * @public */ export class DisplayStyle3dState extends DisplayStyleState { - /** @hidden */ + /** @internal */ public skyboxMaterial: RenderMaterial | undefined; private _skyBoxParams?: SkyBox.CreateParams; private _skyBoxParamsLoaded?: boolean; @@ -486,7 +541,7 @@ export class DisplayStyle3dState extends DisplayStyleState { } /** Attempts to create textures for the sky of the environment, and load it into the sky. Returns true on success, and false otherwise. - * @hidden + * @internal */ public loadSkyBoxParams(system: RenderSystem): SkyBox.CreateParams | undefined { if (undefined === this._skyBoxParams && undefined === this._skyBoxParamsLoaded) { diff --git a/core/frontend/src/ElementLocateManager.ts b/core/frontend/src/ElementLocateManager.ts index 106b9be..f807cec 100644 --- a/core/frontend/src/ElementLocateManager.ts +++ b/core/frontend/src/ElementLocateManager.ts @@ -62,6 +62,12 @@ export class LocateOptions { other.hitSource = this.hitSource; return other; } + public setFrom(other: LocateOptions): void { + this.allowDecorations = other.allowDecorations; + this.allowNonLocatable = other.allowNonLocatable; + this.maxHits = other.maxHits; + this.hitSource = other.hitSource; + } public init() { this.allowDecorations = this.allowNonLocatable = false; this.maxHits = 20; this.hitSource = HitSource.DataPoint; } } diff --git a/core/frontend/src/IModelConnection.ts b/core/frontend/src/IModelConnection.ts index ba18ffd..8e58142 100644 --- a/core/frontend/src/IModelConnection.ts +++ b/core/frontend/src/IModelConnection.ts @@ -303,7 +303,7 @@ export class IModelConnection extends IModel { return IModelReadRpcInterface.getClient().queryPage(this.iModelToken, ecsql, bindings, options); } - /** Execute a pagable query. + /** Execute a pageable query. * The result of the query is async iterator over the rows. The iterator will get next page automatically once rows in current page has been read. * [ECSQL row]($docs/learning/ECSQLRowFormat). * diff --git a/core/frontend/src/ImageUtil.ts b/core/frontend/src/ImageUtil.ts index 3996a9f..f09d1a6 100644 --- a/core/frontend/src/ImageUtil.ts +++ b/core/frontend/src/ImageUtil.ts @@ -68,7 +68,9 @@ function imageBufferToCanvas(buffer: ImageBuffer): HTMLCanvasElement | undefined return canvas; } -/** Get a string describing the mime type associated with an ImageSource format. */ +/** Get a string describing the mime type associated with an ImageSource format. + * @public + */ export function getImageSourceMimeType(format: ImageSourceFormat): string { return ImageSourceFormat.Jpeg === format ? "image/jpeg" : "image/png"; } @@ -86,12 +88,18 @@ export function getImageSourceFormatForMimeType(mimeType: string): ImageSourceFo * Extract an html Image element from a binary jpeg or png. * @param source The ImageSource containing the binary jpeg or png data. * @returns a Promise which resolves to an HTMLImageElement containing the uncompressed bitmap image in RGBA format. + * @public */ export async function imageElementFromImageSource(source: ImageSource): Promise { const blob = new Blob([source.data], { type: getImageSourceMimeType(source.format) }); return imageElementFromUrl(URL.createObjectURL(blob)); } +/** Create an html Image element from a URL. + * @param url The URL pointing to the image data. + * @returns A Promise resolving to an HTMLImageElement when the image data has been loaded from the URL. + * @public + */ export async function imageElementFromUrl(url: string): Promise { return new Promise((resolve: (image: HTMLImageElement) => void, reject) => { const image = new Image(); @@ -105,6 +113,7 @@ export async function imageElementFromUrl(url: string): Promise { return imageElementFromImageSource(source).then((image) => new Point2d(image.naturalWidth, image.naturalHeight)); @@ -114,6 +123,7 @@ export async function extractImageSourceDimensions(source: ImageSource): Promise * Produces a data url in "image/png" format from the contents of an ImageBuffer. * @param buffer The ImageBuffer, of any format. * @returns a data url as a string suitable for setting as the `src` property of an HTMLImageElement, or undefined if the url could not be created. + * @public */ export function imageBufferToPngDataUrl(buffer: ImageBuffer): string | undefined { // The default format (and the only format required to be supported) for toDataUrl() is "image/png". @@ -125,6 +135,7 @@ export function imageBufferToPngDataUrl(buffer: ImageBuffer): string | undefined * Converts the contents of an ImageBuffer to PNG format. * @param buffer The ImageBuffer, of any format. * @returns a base64-encoded string representing the image as a PNG, or undefined if the conversion failed. + * @public */ export function imageBufferToBase64EncodedPng(buffer: ImageBuffer): string | undefined { const urlPrefix = "data:image/png;base64,"; diff --git a/core/frontend/src/ModelSelectorState.ts b/core/frontend/src/ModelSelectorState.ts index 801f4c1..c46ec6f 100644 --- a/core/frontend/src/ModelSelectorState.ts +++ b/core/frontend/src/ModelSelectorState.ts @@ -22,7 +22,7 @@ export class ModelSelectorState extends ElementState { props.models.forEach((model) => this.models.add(model)); } - /** Get the name of this ModelSelector */ + /** The name of this ModelSelector */ public get name(): string { return this.code.getValue(); } public toJSON(): ModelSelectorProps { @@ -32,6 +32,12 @@ export class ModelSelectorState extends ElementState { return val; } + /** Determine if this model selector is logically equivalent to the specified model selector. Two model selectors are logically equivalent is + * they have the same name and contain the same set of models. + * @param other The model selector to which to compare. + * @returns true if the model selectors are logically equivalent. + * @public + */ public equalState(other: ModelSelectorState): boolean { if (this.models.size !== other.models.size) return false; diff --git a/core/frontend/src/ModelState.ts b/core/frontend/src/ModelState.ts index 8976e60..45dcb31 100644 --- a/core/frontend/src/ModelState.ts +++ b/core/frontend/src/ModelState.ts @@ -6,12 +6,13 @@ import { dispose, Id64, Id64String, JsonUtils } from "@bentley/bentleyjs-core"; import { Point2d, Range3d } from "@bentley/geometry-core"; -import { AxisAlignedBox3d, BatchType, GeometricModel2dProps, ModelProps, RelatedElement, ServerTimeoutError, TileTreeProps } from "@bentley/imodeljs-common"; +import { BatchType, GeometricModel2dProps, ModelProps, RelatedElement, ServerTimeoutError, TileTreeProps } from "@bentley/imodeljs-common"; import { EntityState } from "./EntityState"; import { IModelApp } from "./IModelApp"; import { IModelConnection } from "./IModelConnection"; +import { IModelTile } from "./tile/IModelTile"; import { RealityModelTileTree } from "./tile/RealityModelTileTree"; -import { IModelTileLoader, TileTree, TileTreeState } from "./tile/TileTree"; +import { TileTree, TileTreeState } from "./tile/TileTree"; /** Represents the front-end state of a [Model]($backend). * @public @@ -44,26 +45,38 @@ export class ModelState extends EntityState implements ModelProps { val.isTemplate = this.isTemplate; return val; } - public getExtents(): AxisAlignedBox3d { return new Range3d(); } // NEEDS_WORK /** Determine whether this is a GeometricModel */ public get isGeometricModel(): boolean { return false; } - /** @hidden */ + /** Attempts to cast this model to a geometric model. */ public get asGeometricModel(): GeometricModelState | undefined { return undefined; } - /** @hidden */ + /** Attempts to cast this model to a 3d geometric model. */ public get asGeometricModel3d(): GeometricModel3dState | undefined { return undefined; } - /** @hidden */ + /** Attempts to cast this model to a 2d geometric model. */ public get asGeometricModel2d(): GeometricModel2dState | undefined { return undefined; } - /** Runs when the iModel of this iModelState closes. */ + /** Executes just before the containing IModelConnection is closed to perform any necessary cleanup. + * @internal + */ public onIModelConnectionClose() { } } +/** Interface adopted by an object which can supply a tile tree for display within a [[ViewState]]. + * Typically tile trees are obtained from geometric models, but they may also originate from display style settings + * such as a background map provider or a set of "context" reality models not directly embedded into the iModel. + * An application typically does not interact directly with tile trees; instead it interacts with a [[ViewState]] or [[Viewport]] which + * coordinates with tile trees on its behalf. + * @beta + */ export interface TileTreeModelState { + /** @internal */ readonly tileTree: TileTree | undefined; + /** @internal */ readonly loadStatus: TileTree.LoadStatus; + /** @internal */ readonly treeModelId: Id64String; // Model Id, or transient Id if not a model (context reality model) + /** @internal */ loadTileTree(edgesRequired: boolean, animationId?: Id64String, asClassifier?: boolean, classifierExpansion?: number): TileTree.LoadStatus; } @@ -73,30 +86,43 @@ export interface TileTreeModelState { */ export abstract class GeometricModelState extends ModelState implements TileTreeModelState { private _modelRange?: Range3d; - /** @hidden */ + /** @internal */ protected _tileTreeState: TileTreeState = new TileTreeState(this.iModel, !this.is2d, this.id); - /** @hidden */ + /** @internal */ protected _classifierTileTreeState: TileTreeState = new TileTreeState(this.iModel, !this.is2d, this.id); /** Returns true if this is a 3d model (a [[GeometricModel3dState]]). */ public abstract get is3d(): boolean; - /** @hidden */ + /** @internal */ public get asGeometricModel(): GeometricModelState { return this; } /** Returns true if this is a 2d model (a [[GeometricModel2dState]]). */ public get is2d(): boolean { return !this.is3d; } - /** @hidden */ + + /** If this model's tile tree is loaded, returns it. + * @see [[loadTileTree]] + * @internal + */ public get tileTree(): TileTree | undefined { return this._tileTreeState.tileTree; } - /** @hidden */ + /** @internal */ public get classifierTileTree(): TileTree | undefined { return this._classifierTileTreeState.tileTree; } - /** @hidden */ + + /** The current status of this model's asynchronously-loaded tile tree. + * @internal + */ public get loadStatus(): TileTree.LoadStatus { return this._tileTreeState.loadStatus; } - /** @hidden */ public set loadStatus(status: TileTree.LoadStatus) { this._tileTreeState.loadStatus = status; } - /** @hidden */ + /** @internal */ public get isGeometricModel(): boolean { return true; } - /** @hidden */ + /** @internal */ public get treeModelId(): Id64String { return this.id; } - /** @hidden */ + + /** Attempt to obtain this model's tile tree, enqueueing it for asynchronous loading if necessary. + * @param edgesRequired If true, the loaded tile tree will include graphics for edges of surfaces. + * @returns The tile tree if it is loaded, or undefined if it is currently loading or has failed to load. + * @note This function is *not* asynchronous, but may trigger an internal asynchronous operation. + * @see [[GeometricModelState.loadStatus]] to query the current state of the tile tree's loading operation. + * @internal + */ public getOrLoadTileTree(edgesRequired: boolean): TileTree | undefined { if (undefined === this.tileTree) this.loadTileTree(edgesRequired); @@ -104,7 +130,9 @@ export abstract class GeometricModelState extends ModelState implements TileTree return this.tileTree; } - /** @hidden */ + /** @see [[getOrLoadTileTree]] + * @internal + */ public loadTileTree(edgesRequired: boolean, animationId?: Id64String, asClassifier?: boolean, classifierExpansion?: number): TileTree.LoadStatus { const tileTreeState = asClassifier ? this._classifierTileTreeState : this._tileTreeState; if (tileTreeState.edgesOmitted && edgesRequired) @@ -127,7 +155,12 @@ export abstract class GeometricModelState extends ModelState implements TileTree const id = (asClassifier ? ("C:" + classifierExpansion as string + "_") : "") + (animationId ? ("A:" + animationId + "_") : "") + this.id; this.iModel.tiles.getTileTreeProps(id).then((result: TileTreeProps) => { - tileTreeState.setTileTree(result, new IModelTileLoader(this.iModel, asClassifier ? BatchType.Classifier : BatchType.Primary, edgesRequired)); + // NB: Make sure root content ID matches that expected by tile format major version... + // back-end uses old format ("0/0/0/0/1") to support older front-ends. + const loader = new IModelTile.Loader(this.iModel, result.formatVersion, asClassifier ? BatchType.Classifier : BatchType.Primary, edgesRequired); + result.rootTile.contentId = loader.rootContentId; + tileTreeState.setTileTree(result, loader); + this._tileTreeState.edgesOmitted = !edgesRequired; IModelApp.viewManager.onNewTilesReady(); }).catch((_err) => { @@ -143,7 +176,7 @@ export abstract class GeometricModelState extends ModelState implements TileTree return tileTreeState.loadStatus; } - /** @hidden */ + /** @internal */ public onIModelConnectionClose() { dispose(this._tileTreeState.tileTree); // we do not track if we are disposed...catch this at the tiletree level super.onIModelConnectionClose(); @@ -163,15 +196,17 @@ export abstract class GeometricModelState extends ModelState implements TileTree * @public */ export class GeometricModel2dState extends GeometricModelState implements GeometricModel2dProps { + /** @internal */ public readonly globalOrigin: Point2d; + constructor(props: GeometricModel2dProps, iModel: IModelConnection) { super(props, iModel); this.globalOrigin = Point2d.fromJSON(props.globalOrigin); } - /** Returns false. */ + /** @internal */ public get is3d(): boolean { return false; } - /** @hidden */ + /** @internal */ public get asGeometricModel2d(): GeometricModel2dState { return this; } public toJSON(): GeometricModel2dProps { @@ -185,9 +220,9 @@ export class GeometricModel2dState extends GeometricModelState implements Geomet * @public */ export class GeometricModel3dState extends GeometricModelState { - /** Returns true. */ + /** @internal */ public get is3d(): boolean { return true; } - /** @hidden */ + /** @internal */ public get asGeometricModel3d(): GeometricModel3dState { return this; } } diff --git a/core/frontend/src/NoRenderApp.ts b/core/frontend/src/NoRenderApp.ts index d5cbf65..168929f 100644 --- a/core/frontend/src/NoRenderApp.ts +++ b/core/frontend/src/NoRenderApp.ts @@ -9,7 +9,7 @@ import { ViewRect } from "./Viewport"; /** * A RenderTarget for applications that must run in environments where WebGL is not present. * This is typically used in tests. - * @hidden + * @internal */ export class NullTarget extends RenderTarget { public get animationFraction(): number { return 0; } @@ -43,7 +43,7 @@ export class NullTarget extends RenderTarget { /** * A RenderSystem for applications that must run in environments where WebGL is not present. * This is typically used in tests. - * @hidden + * @internal */ export class NullRenderSystem extends RenderSystem { public get isValid(): boolean { return false; } @@ -60,7 +60,7 @@ export class NullRenderSystem extends RenderSystem { /** * An IModelApp for applications that must run in environments where WebGL is not present. * This is typically used in tests. - * @hidden + * @internal */ export class NoRenderApp extends IModelApp { protected static supplyRenderSystem(): RenderSystem { return new NullRenderSystem(); } diff --git a/core/frontend/src/Plugin.ts b/core/frontend/src/Plugin.ts index 8dd2bc1..aab9033 100644 --- a/core/frontend/src/Plugin.ts +++ b/core/frontend/src/Plugin.ts @@ -6,6 +6,12 @@ import * as semver from "semver"; import { IModelApp } from "./IModelApp"; import { NotifyMessageDetails, OutputMessageAlert, OutputMessagePriority, OutputMessageType } from "./NotificationManager"; +import { Logger } from "@bentley/bentleyjs-core"; + +const loggerCategory = "imodeljs-frontend.Plugin"; + +type resolveFunc = ((arg: any) => void); +type rejectFunc = ((arg: Error) => void); /** * Base Plugin class for writing a demand-loaded module. @@ -42,13 +48,62 @@ export abstract class Plugin { public abstract onExecute(_args: string[]): void; } +// this private class represents a Plugin that we are attempting to load. +class PendingPlugin { + public resolve: resolveFunc | undefined = undefined; + public reject: rejectFunc | undefined = undefined; + public promise: Promise; + + public constructor(private _packageName: string, public args?: string[]) { + this.promise = new Promise(this.executor.bind(this)); + } + + public executor(resolve: resolveFunc, reject: rejectFunc) { + this.resolve = resolve; + this.reject = reject; + + const head = document.getElementsByTagName("head")[0]; + if (!head) + reject(new Error("no head element found")); + + // create the script element. handle onload and onerror. + const scriptElement = document.createElement("script"); + + scriptElement.onerror = (ev) => { + scriptElement.onload = null; + reject(new Error("can't load " + this._packageName + " : " + ev)); + }; + + scriptElement.async = true; + scriptElement.src = this._packageName; + head.insertBefore(scriptElement, head.lastChild); + } +} + /** * Controls loading of Plugins and calls methods on newly loaded or reloaded Plugins */ export class PluginAdmin { - private static _loadedPlugins: Map> = new Map>(); + private static _pendingPlugins: Map = new Map(); private static _registeredPlugins: Map = new Map(); + /** + * Retrieves a previously loaded Plugin. + * @param pluginName + */ + public static getPlugin(pluginName: string): Promise | undefined { + // strip off .js if necessary + pluginName = PluginAdmin.getPluginName(pluginName); + const plugin = PluginAdmin._registeredPlugins.get(pluginName); + if (plugin) + return Promise.resolve(plugin); + const pluginPromise = PluginAdmin._pendingPlugins.get(pluginName); + if (pluginPromise) { + return pluginPromise.promise; + } + return undefined; + } + // returns an array of strings with version mismatch errors, or undefined if the versions of all modules are usable. private static checkIModelJsVersions(versionsRequired: string): string[] | undefined { // make sure we're in a browser-like environment @@ -106,7 +161,7 @@ export class PluginAdmin { * @param packageName the name of the JavaScript file to be loaded from the web server. * @param args arguments that will be passed to the Plugin.onLoaded and Plugin.onExecute methods. If the first argument is not the plugin name, the plugin name will be prepended to the args array. */ - public static async loadPlugin(packageName: string, args?: string[]): Promise { + public static async loadPlugin(packageName: string, args?: string[]): Promise { // see if it is already loaded. const pluginName: string = PluginAdmin.getPluginName(packageName); @@ -120,41 +175,22 @@ export class PluginAdmin { } } - const loadPromise = PluginAdmin._loadedPlugins.get(pluginName); - if (undefined !== loadPromise) { + const pendingPlugin = PluginAdmin._pendingPlugins.get(pluginName); + if (undefined !== pendingPlugin) { // it has been loaded (or at least we have started to load it) already. If it is registered, call its reload method. (Otherwise reload called when we're done the initial load) const registeredPlugin = PluginAdmin._registeredPlugins.get(pluginName); if (registeredPlugin) { registeredPlugin.onExecute(args); } - return loadPromise; + return pendingPlugin.promise; } // set it up to load. - const thisPromise: Promise = new Promise((resolve, reject) => { - const head = document.getElementsByTagName("head")[0]; - if (!head) - reject(new Error("no head element found")); - - // create the script element. handle onload and onerror. - const scriptElement = document.createElement("script"); - scriptElement.onload = () => { - scriptElement.onload = null; - resolve(); - }; - scriptElement.onerror = (ev) => { - scriptElement.onload = null; - reject(new Error("can't load " + packageName + " : " + ev)); - }; - scriptElement.async = true; - scriptElement.src = packageName; - head.insertBefore(scriptElement, head.lastChild); - }); + const newPendingPlugin: PendingPlugin = new PendingPlugin(packageName, args); // Javascript-ish saving of the arguments in the promise, so we can call reload with them. - (thisPromise as any).args = args; - PluginAdmin._loadedPlugins.set(pluginName, thisPromise); - return thisPromise; + PluginAdmin._pendingPlugins.set(pluginName, newPendingPlugin); + return newPendingPlugin.promise; } /** @@ -174,21 +210,23 @@ export class PluginAdmin { allDetails = allDetails.concat(thisMessage, "\n"); } const briefMessage = IModelApp.i18n.translate("iModelJs:PluginErrors.VersionErrors", { pluginName: plugin.name }); - const errorDetails: NotifyMessageDetails = new NotifyMessageDetails(OutputMessagePriority.Info, briefMessage, allDetails, OutputMessageType.Alert, OutputMessageAlert.Balloon); + const errorDetails = new NotifyMessageDetails(OutputMessagePriority.Info, briefMessage, allDetails, OutputMessageType.Alert, OutputMessageAlert.Balloon); IModelApp.notifications.outputMessage(errorDetails); + + Logger.logError(loggerCategory, plugin.name + " failed to load. Error=" + allDetails); return errorMessages; } PluginAdmin._registeredPlugins.set(plugin.name, plugin); - // announce successful load after plugin is registered. - const messageDetail: NotifyMessageDetails = new NotifyMessageDetails(OutputMessagePriority.Info, IModelApp.i18n.translate("iModelJs:PluginErrors.Success", { pluginName: plugin.name })); - IModelApp.notifications.outputMessage(messageDetail); + // log successful load after plugin is registered. + Logger.logInfo(loggerCategory, plugin.name + " loaded"); - // retrieve the args we saved in the promise. + // retrieve the args we saved in the pendingPlugin. let args: string[] | undefined; - const loadedPluginPromise = PluginAdmin._loadedPlugins.get(plugin.name); - if (loadedPluginPromise) { - args = (loadedPluginPromise as any).args; + const pendingPlugin = PluginAdmin._pendingPlugins.get(plugin.name); + if (pendingPlugin) { + pendingPlugin.resolve!(plugin); + args = pendingPlugin.args; } if (!args) diff --git a/core/frontend/src/RenderScheduleState.ts b/core/frontend/src/RenderScheduleState.ts index 24e5bc6..44b9c5a 100644 --- a/core/frontend/src/RenderScheduleState.ts +++ b/core/frontend/src/RenderScheduleState.ts @@ -12,6 +12,7 @@ import { IModelConnection } from "./IModelConnection"; import { ClipPlanesVolume } from "./render/webgl/ClipVolume"; import { AnimationBranchStates, AnimationBranchState } from "./render/System"; +/** @internal */ export namespace RenderScheduleState { class Interval { constructor(public index0: number = 0, public index1: number = 0, public fraction: number = 0.0) { } diff --git a/core/frontend/src/Sheet.ts b/core/frontend/src/Sheet.ts index d916054..931401b 100644 --- a/core/frontend/src/Sheet.ts +++ b/core/frontend/src/Sheet.ts @@ -25,6 +25,7 @@ import { SpatialViewState, ViewState, ViewState2d, ViewState3d } from "./ViewSta /** Describes the geometry and styling of a sheet border decoration. * The sheet border decoration mimics a sheet of paper with a drop shadow. + * @internal */ export class SheetBorder { private _rect: Point2d[]; @@ -83,7 +84,6 @@ export class SheetBorder { return new SheetBorder(rect2d, shadow2d, gradient); } - /** @hidden */ public getRange(): Range2d { const range = Range2d.createArray(this._rect); const shadowRange = Range2d.createArray(this._shadow); @@ -108,9 +108,9 @@ export class SheetBorder { } } -/** @hidden */ +/** @internal */ export namespace Attachments { - /** @hidden */ + /** @internal */ export class AttachmentViewport extends OffScreenViewport { public rendering: boolean = false; public toParent: Transform = Transform.createIdentity(); // attachment NPC to sheet world @@ -194,7 +194,7 @@ export namespace Attachments { /** * Describes the location of a tile within the range of a quad subdivided in four parts. - * @hidden + * @internal */ export const enum Tile3dPlacement { UpperLeft, @@ -206,7 +206,7 @@ export namespace Attachments { /** * Describes the state of the scene for a given level of the tile tree. All tiles on a given level use the same scene to generate their graphics. - * @hidden + * @internal */ export const enum State { NotLoaded, // We haven't tried to create the scene for this level of the tree @@ -217,7 +217,7 @@ export namespace Attachments { const QUERY_SHEET_TILE_PIXELS: number = 512; - /** @hidden */ + /** @internal */ abstract class AttachmentTileLoader extends TileLoader { public abstract get is3dAttachment(): boolean; public tileRequiresLoading(_params: Tile.Params): boolean { return true; } @@ -229,7 +229,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ class TileLoader2d extends AttachmentTileLoader { private readonly _viewFlagOverrides: ViewFlag.Overrides; @@ -246,7 +246,7 @@ export namespace Attachments { public get is3dAttachment(): boolean { return false; } } - /** @hidden */ + /** @internal */ class TileLoader3d extends AttachmentTileLoader { /** DEBUG ONLY - Setting this to true will result in only sheet tile polys being drawn, and not the textures they contain. */ private static _DEBUG_NO_TEXTURES = false; @@ -264,7 +264,7 @@ export namespace Attachments { public get is3dAttachment(): boolean { return true; } } - /** @hidden */ + /** @internal */ export class Tile2d extends Tile { public constructor(root: Tree2d, range: ElementAlignedBox2d) { super(new Tile.Params( @@ -294,7 +294,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export class Tile3d extends Tile { /** DEBUG ONLY - This member will cause the sheet tile polyfaces to draw along with the underlying textures. */ private static _DRAW_DEBUG_POLYFACE_GRAPHICS: boolean = false; @@ -505,8 +505,9 @@ export namespace Attachments { if (viewport.texture === undefined) { this.setNotFound(); } else { - const graphic = system.createGraphicList(system.createSheetTile(viewport.texture, this._tilePolyfaces, this._rootAsTree3d.tileColor)); - this.setGraphic(system.createBatch(graphic, this._rootAsTree3d.featureTable, this.contentRange)); + let graphic = system.createGraphicList(system.createSheetTile(viewport.texture, this._tilePolyfaces, this._rootAsTree3d.tileColor)); + graphic = system.createBatch(graphic, this._rootAsTree3d.featureTable, this.contentRange); + this.setContent({ graphic, contentRange: this.contentRange }); } // restore frustum @@ -566,7 +567,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export abstract class Tree extends TileTree { public graphicsClip?: ClipVector; @@ -595,7 +596,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export class Tree2d extends Tree { public readonly view: ViewState2d; public readonly viewRoot: TileTree; @@ -672,7 +673,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ class TileColorSequence { private _index: number = 0; private readonly _colors: number[] = [ @@ -700,7 +701,7 @@ export namespace Attachments { const tileColorSequence = new TileColorSequence(); - /** @hidden */ + /** @internal */ export class Tree3d extends Tree { public readonly tileColor: ColorDef; public readonly biasDistance: number; // distance in z to position tile in parent viewport's z-buffer (should be obtained by calling DepthFromDisplayPriority) @@ -802,7 +803,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export abstract class Attachment { /** DEBUG ONLY - The color of the attachment bounding box if drawn. */ public static readonly DEBUG_BOUNDING_BOX_COLOR: ColorDef = ColorDef.red; @@ -855,7 +856,7 @@ export namespace Attachments { public get isReady(): boolean { return this._tree !== undefined; } /** Returns the tile tree corresponding to this attachment, which may be 2d or 3d. Returns undefined if the tree has not been loaded. */ public get tree(): Tree | undefined { return this._tree; } - /** @hidden - Sets the reference to the tile tree corresponding to this attachment view's model. */ + /** Sets the reference to the tile tree corresponding to this attachment view's model. */ public set tree(tree: Tree | undefined) { this._tree = tree; } /** Given a view and placement, compute a scale for an attachment. */ @@ -925,7 +926,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export class Attachment2d extends Attachment { public constructor(props: ViewAttachmentProps, view: ViewState2d) { super(props, view); @@ -940,7 +941,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export class Attachment3d extends Attachment { private _states: State[]; // per level of the tree @@ -968,7 +969,7 @@ export namespace Attachments { } } - /** @hidden */ + /** @internal */ export class AttachmentList { public readonly list: Attachment[] = []; private _allReady: boolean = true; @@ -1032,7 +1033,9 @@ export namespace Attachments { } } -/** A view of a SheetModel */ +/** A view of a [SheetModel](@backend). + * @public + */ export class SheetViewState extends ViewState2d { public static createFromProps(viewStateData: ViewStateProps, iModel: IModelConnection): ViewState | undefined { const cat = new CategorySelectorState(viewStateData.categorySelectorProps, iModel); @@ -1057,20 +1060,28 @@ export class SheetViewState extends ViewState2d { } public static get className() { return "SheetViewDefinition"; } + + /** The width and height of the sheet in world coordinates. */ public readonly sheetSize: Point2d; private _attachmentIds: Id64Array; private _attachments: Attachments.AttachmentList; private _all3dAttachmentTilesLoaded: boolean = true; + + /** @internal */ public getExtentLimits() { return { min: Constant.oneMillimeter, max: this.sheetSize.magnitude() * 10 }; } - /** Manually mark this SheetViewState as having to re-create its scene due to still-loading tiles for 3d attachments. This is called directly from the attachment tiles. */ + /** Manually mark this SheetViewState as having to re-create its scene due to still-loading tiles for 3d attachments. This is called directly from the attachment tiles. + * @internal + */ public markAttachment3dSceneIncomplete() { // NB: 2d attachments will draw to completion once they have a tile tree... but 3d attachments create new tiles for each // depth, and therefore report directly to the ViewState whether or not new tiles are being loaded this._all3dAttachmentTilesLoaded = false; } - /** Load the size and attachment for this sheet, as well as any other 2d view state characteristics. */ + /** Load the size and attachment for this sheet, as well as any other 2d view state characteristics. + * @internal + */ public async load(): Promise { await super.load(); @@ -1095,13 +1106,17 @@ export class SheetViewState extends ViewState2d { } } - /** If any attachments have not yet been loaded or are waiting on tiles, invalidate the scene. */ + /** If any attachments have not yet been loaded or are waiting on tiles, invalidate the scene. + * @internal + */ public onRenderFrame(_viewport: Viewport) { if (!this._attachments.allReady || !this._all3dAttachmentTilesLoaded) _viewport.sync.invalidateScene(); } - /** Adds the Sheet view to the scene, along with any of this sheet's attachments. */ + /** Adds the Sheet view to the scene, along with any of this sheet's attachments. + * @internal + */ public createScene(context: SceneContext) { // This will be set to false by the end of the function if any 3d attachments are waiting on tiles... this._all3dAttachmentTilesLoaded = true; @@ -1133,6 +1148,7 @@ export class SheetViewState extends ViewState2d { return builder.finish(); } + /** @internal */ public decorate(context: DecorateContext): void { super.decorate(context); if (this.sheetSize !== undefined) { @@ -1141,6 +1157,7 @@ export class SheetViewState extends ViewState2d { } } + /** @internal */ public computeFitRange(): Range3d { const size = this.sheetSize; if (0 >= size.x || 0 >= size.y) diff --git a/core/frontend/src/ViewContext.ts b/core/frontend/src/ViewContext.ts index 6fbe612..28bdff8 100644 --- a/core/frontend/src/ViewContext.ts +++ b/core/frontend/src/ViewContext.ts @@ -40,10 +40,10 @@ export class RenderContext { /** Given a point in world coordinates, determine approximately how many pixels it occupies on screen based on this context's frustum. */ public getPixelSizeAtPoint(inPoint?: Point3d): number { return this.viewport.viewFrustum.getPixelSizeAtPoint(inPoint); } - /** @hidden */ + /** @internal */ public get target(): RenderTarget { return this.viewport.target; } - /** @hidden */ + /** @internal */ protected _createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder { return this.target.createGraphicBuilder(type, this.viewport, transform, id); } /** Create a builder for creating a [[GraphicType.Scene]] [[RenderGraphic]] for rendering within this context's [[Viewport]]. @@ -76,7 +76,7 @@ export class DynamicsContext extends RenderContext { this._dynamics.push(graphic); } - /** @hidden */ + /** @internal */ public changeDynamics(): void { this.viewport!.changeDynamics(this._dynamics); } } @@ -88,13 +88,13 @@ export class DecorateContext extends RenderContext { public decorationDiv: HTMLDivElement; /** The [[ScreenViewport]] in which this context's [[Decorations]] will be drawn. */ public get screenViewport(): ScreenViewport { return this.viewport as ScreenViewport; } - /** @hidden */ + /** @internal */ constructor(vp: ScreenViewport, private readonly _decorations: Decorations) { super(vp); this.decorationDiv = vp.decorationDiv; } - /** @hidden */ + /** @internal */ public static getGridDimension(props: { nRepetitions: number, min: number }, gridSize: number, org: Point3d, dir: Point3d, points: Point3d[]): boolean { // initialized only to avoid warning. let distLow = 0.0; @@ -123,7 +123,7 @@ export class DecorateContext extends RenderContext { return true; } - /** @hidden */ + /** @internal */ public static getGridPlaneViewIntersections(planePoint: Point3d, planeNormal: Vector3d, vp: Viewport, useProjectExtents: boolean): Point3d[] { const plane = Plane3dByOriginAndUnitNormal.create(planePoint, planeNormal); if (undefined === plane) @@ -236,7 +236,7 @@ export class DecorateContext extends RenderContext { /** Add an HTMLElement to be drawn as a decoration in this context's [[Viewport]]. */ public addHtmlDecoration(decoration: HTMLElement) { this.decorationDiv.appendChild(decoration); } - /** @hidden */ + /** @internal */ public drawStandardGrid(gridOrigin: Point3d, rMatrix: Matrix3d, spacing: XAndY, gridsPerRef: number, isoGrid: boolean = false, fixedRepetitions?: Point2d): void { const vp = this.viewport; @@ -314,7 +314,7 @@ export class DecorateContext extends RenderContext { this.addDecorationFromBuilder(builder); } - /** @hidden */ + /** @internal */ public static drawGrid(graphic: GraphicBuilder, doIsogrid: boolean, drawDots: boolean, gridOrigin: Point3d, xVec: Vector3d, yVec: Vector3d, gridsPerRef: number, repetitions: Point2d, vp: Viewport) { const eyePoint = vp.worldToViewMap.transform1.columnZ(); const viewZ = Vector3d.createFrom(eyePoint); @@ -496,9 +496,8 @@ export class DecorateContext extends RenderContext { } } - /** Display skyBox (cube) graphic that encompasses entire scene and rotates with camera. + /** Display skyBox graphic that encompasses entire scene and rotates with camera. * @see [[RenderSystem.createSkyBox]]. - * @hidden */ public setSkyBox(graphic: RenderGraphic) { this._decorations.skyBox = graphic; } @@ -506,7 +505,11 @@ export class DecorateContext extends RenderContext { public setViewBackground(graphic: RenderGraphic) { this._decorations.viewBackground = graphic; } } -/** @hidden */ +/** Context used to create the scene for a [[Viewport]]. The scene consists of a set of [[RenderGraphic]]s produced by the + * [[TileTree]]s visible within the viewport. Creating the scene may result in the enqueueing of [[TileRequest]]s for [[Tile]]s which + * should be displayed in the viewport but are not yet loaded. + * @internal + */ export class SceneContext extends RenderContext { public readonly graphics: RenderGraphic[] = []; public readonly backgroundGraphics: RenderGraphic[] = []; diff --git a/core/frontend/src/ViewManager.ts b/core/frontend/src/ViewManager.ts index d86b5a1..2e7d5e0 100644 --- a/core/frontend/src/ViewManager.ts +++ b/core/frontend/src/ViewManager.ts @@ -75,7 +75,7 @@ export class ViewManager { private _invalidateScenes = false; private _skipSceneCreation = false; - /** @hidden */ + /** @internal */ public onInitialized() { IModelConnection.registerClass(SpatialModelState.getClassFullName(), SpatialModelState); IModelConnection.registerClass("BisCore:PhysicalModel", SpatialModelState); @@ -95,7 +95,7 @@ export class ViewManager { this.cursor = "default"; } - /** @hidden */ + /** @internal */ public onShutDown() { this._viewports.length = 0; this.decorators.length = 0; @@ -138,7 +138,7 @@ export class ViewManager { */ public readonly onFinishRender = new BeEvent<() => void>(); - /** @hidden */ + /** @internal */ public endDynamicsMode(): void { if (!this.inDynamicsMode) return; @@ -155,9 +155,10 @@ export class ViewManager { } } - /** @hidden */ + /** @internal */ public beginDynamicsMode() { this.inDynamicsMode = true; } - /** @hidden */ + + /** @internal */ public get doesHostHaveFocus(): boolean { return document.hasFocus(); } /** Set the selected [[Viewport]] to undefined. */ @@ -191,7 +192,7 @@ export class ViewManager { return BentleyStatus.SUCCESS; } - /** @hidden */ + /** @internal */ public notifySelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void { IModelApp.toolAdmin.onSelectedViewportChanged(previous, current); this.onSelectedViewportChanged.emit({ previous, current }); @@ -265,22 +266,22 @@ export class ViewManager { /** Force each registered [[Viewport]] to regenerate its [[Decorations]] on the next frame. */ public invalidateDecorationsAllViews(): void { this.forEachViewport((vp) => vp.invalidateDecorations()); } - /** @hidden */ + /** @internal */ public onSelectionSetChanged(_iModel: IModelConnection) { this.forEachViewport((vp) => vp.view.setSelectionSetDirty()); } - /** @hidden */ + /** @internal */ public invalidateViewportScenes(): void { this.forEachViewport((vp) => vp.sync.invalidateScene()); } - /** @hidden */ + /** @internal */ public validateViewportScenes(): void { this.forEachViewport((vp) => vp.sync.setValidScene()); } - /** @hidden */ + /** @internal */ public invalidateScenes(): void { this._invalidateScenes = true; } - /** @hidden */ + /** @internal */ public get sceneInvalidated(): boolean { return this._invalidateScenes; } - /** @hidden */ + /** @internal */ public onNewTilesReady(): void { this.invalidateScenes(); } /** Invoked by ToolAdmin event loop. - * @hidden + * @internal */ public renderLoop(): void { if (0 === this._viewports.length) return; @@ -330,7 +331,7 @@ export class ViewManager { } /** Get the tooltip for a pickable decoration. - * @hidden + * @internal */ public async getDecorationToolTip(hit: HitDetail): Promise { for (const decorator of this.decorators) { @@ -341,7 +342,7 @@ export class ViewManager { } /** Allow a pickable decoration to handle a button event that identified it for the SelectTool. - * @hidden + * @internal */ public async onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise { for (const decorator of IModelApp.viewManager.decorators) { @@ -352,7 +353,7 @@ export class ViewManager { } /** Allow a pickable decoration to be snapped to by AccuSnap or TentativePoint. - * @hidden + * @internal */ public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined { for (const decorator of IModelApp.viewManager.decorators) { diff --git a/core/frontend/src/ViewState.ts b/core/frontend/src/ViewState.ts index a91586b..51f8489 100644 --- a/core/frontend/src/ViewState.ts +++ b/core/frontend/src/ViewState.ts @@ -84,7 +84,7 @@ export class MarginPercent { /** A cancelable paginated request for subcategory information. * @see ViewSubCategories - * @hidden + * @internal */ export class SubCategoriesRequest { private static readonly _LIMIT = 1000; @@ -155,7 +155,7 @@ export class SubCategoriesRequest { } /** Stores information about sub-categories specific to a ViewState. Functions as a lazily-populated cache. - * @hidden + * @internal */ export class ViewSubCategories { private readonly _byCategoryId = new Map(); @@ -250,12 +250,12 @@ export abstract class ViewState extends ElementState { public undoTime?: BeTimePoint; /** A cache of information about subcategories belonging to categories present in this view's [[CategorySelectorState]]. * It is populated on-demand as new categories are added to the selector. - * @hidden + * @internal */ public readonly subCategories = new ViewSubCategories(); public static get className() { return "ViewDefinition"; } - /** @hidden */ + /** @internal */ protected constructor(props: ViewDefinitionProps, iModel: IModelConnection, public categorySelector: CategorySelectorState, public displayStyle: DisplayStyleState) { super(props, iModel); this.description = props.description; @@ -344,18 +344,7 @@ export abstract class ViewState extends ElementState { return this.subCategories.load(this.categorySelector.categories, this.iModel); } - /** @hidden */ - /* ###TODO -public cancelAllTileLoads(): void { - this.forEachTileTreeModel((model) => { - const tileTree = model.tileTree; - if (tileTree !== undefined) - tileTree.rootTile.cancelAllLoads(); - }); -} - */ - - /** @hidden */ + /** @internal */ public get areAllTileTreesLoaded(): boolean { let allLoaded = true; this.forEachTileTreeModel((model) => { @@ -414,7 +403,7 @@ public cancelAllTileLoads(): void { return undefined !== ovr ? ovr.override(app) : app; } - /** @hidden */ + /** @internal */ public isSubCategoryVisible(id: Id64String): boolean { const app = this.subCategories.getSubCategoryAppearance(id.toString()); if (undefined === app) @@ -474,9 +463,9 @@ public cancelAllTileLoads(): void { this.overrideSubCategory(subCategoryId, SubCategoryOverride.fromJSON(json)); } - /** Returns true if the set of elements returned by GetAlwaysDrawn() are the *only* elements rendered by this view */ + /** @internal */ public get areFeatureOverridesDirty(): boolean { return this._featureOverridesDirty; } - /** @hidden */ + /** @internal */ public get isSelectionSetDirty(): boolean { return this._selectionSetDirty; } /** Mark the [[FeatureSymbology.Overrides]] associated with this view as "dirty". @@ -488,13 +477,13 @@ public cancelAllTileLoads(): void { * The next time the [[Viewport]] associated with this [[ViewState]] is rendered, the symbology overrides will be regenerated if they have been marked "dirty". */ public setFeatureOverridesDirty(dirty: boolean = true): void { this._featureOverridesDirty = dirty; } - /** @hidden */ + /** @internal */ public setSelectionSetDirty(dirty: boolean = true): void { this._selectionSetDirty = dirty; } public is3d(): this is ViewState3d { return this instanceof ViewState3d; } public isSpatialView(): this is SpatialViewState { return this instanceof SpatialViewState; } /** Returns true if [[ViewTool]]s are allowed to operate in three dimensions on this view. */ public abstract allow3dManipulations(): boolean; - /** @hidden */ + /** @internal */ public abstract createAuxCoordSystem(acsName: string): AuxCoordSystemState; /** Get the extents of this view in [[CoordSystem.World]] coordinates. */ public abstract getViewedExtents(): AxisAlignedBox3d; @@ -504,7 +493,7 @@ public cancelAllTileLoads(): void { public abstract computeFitRange(): Range3d; /** Override this if you want to perform some logic on each iteration of the render loop. - * @hidden + * @internal */ public abstract onRenderFrame(_viewport: Viewport): void; @@ -536,23 +525,23 @@ public cancelAllTileLoads(): void { /** Execute a function on each viewed model */ public forEachTileTreeModel(func: (model: TileTreeModelState) => void): void { this.forEachModel((model: GeometricModelState) => func(model)); } - /** @hidden */ + /** @internal */ public createScene(context: SceneContext): void { this.forEachTileTreeModel((model: TileTreeModelState) => this.addModelToScene(model, context)); } - /** @hidden */ + /** @internal */ public createTerrain(context: SceneContext): void { if (undefined !== this.displayStyle.backgroundMapPlane) this.displayStyle.backgroundMap.addToScene(context); } - /** @hidden */ + /** @internal */ public createClassification(context: SceneContext): void { this.forEachModel((model: GeometricModelState) => this.addModelClassifierToScene(model, context)); } /** Add view-specific decorations. The base implementation draws the grid. Subclasses must invoke super.decorate() - * @hidden + * @internal */ public decorate(context: DecorateContext): void { this.drawGrid(context); @@ -560,7 +549,7 @@ public cancelAllTileLoads(): void { this.displayStyle.backgroundMap.decorate(context); } - /** @hidden */ + /** @internal */ public static getStandardViewMatrix(id: StandardViewId): Matrix3d { return StandardView.getStandardRotation(id); } /** Orient this view to one of the [[StandardView]] rotations. */ @@ -575,7 +564,7 @@ public cancelAllTileLoads(): void { return this.getOrigin().plusScaled(delta, 0.5, result); } - /** @hidden */ + /** @internal */ public drawGrid(context: DecorateContext): void { const vp = context.viewport; if (!vp.isGridOn) @@ -601,7 +590,7 @@ public cancelAllTileLoads(): void { context.drawStandardGrid(origin, matrix, spacing, gridsPerRef, isoGrid, orientation !== GridOrientationType.View ? fixedRepsAuto : undefined); } - /** @hidden */ + /** @internal */ public computeWorldToNpc(viewRot?: Matrix3d, inOrigin?: Point3d, delta?: Vector3d): { map: Map4d | undefined, frustFraction: number } { if (viewRot === undefined) viewRot = this.getRotation(); const xVector = viewRot.rowX(); @@ -749,7 +738,7 @@ public cancelAllTileLoads(): void { public setDisplayStyle(style: DisplayStyleState) { this.displayStyle = style; } public getDetails(): any { if (!this.jsonProperties.viewDetails) this.jsonProperties.viewDetails = new Object(); return this.jsonProperties.viewDetails; } - /** @hidden */ + /** @internal */ protected adjustAspectRatio(windowAspect: number): void { const extents = this.getExtents(); const viewAspect = extents.x / extents.y; @@ -776,7 +765,7 @@ public cancelAllTileLoads(): void { this.setExtents(extents); } - /** @hidden */ + /** @internal */ public showFrustumErrorMessage(status: ViewStatus): void { let key: string; switch (status) { @@ -790,7 +779,7 @@ public cancelAllTileLoads(): void { IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.i18n.translate("Viewing." + key))); } - /** @hidden */ + /** @internal */ public validateViewDelta(delta: Vector3d, messageNeeded?: boolean): ViewStatus { const limit = this.getExtentLimits(); let error = ViewStatus.Success; @@ -819,22 +808,22 @@ public cancelAllTileLoads(): void { } /** Returns the view detail associated with the specified name, or undefined if none such exists. - * @hidden + * @internal */ public peekDetail(name: string): any { return this.getDetails()[name]; } /** Get the current value of a view detail. If not present, returns an empty object. - * @hidden + * @internal */ public getDetail(name: string): any { const v = this.getDetails()[name]; return v ? v : {}; } /** Change the value of a view detail. - * @hidden + * @internal */ public setDetail(name: string, value: any) { this.getDetails()[name] = value; } /** Remove a view detail. - * @hidden + * @internal */ public removeDetail(name: string) { delete this.getDetails()[name]; } @@ -1145,7 +1134,7 @@ export abstract class ViewState3d extends ViewState { public readonly camera: Camera; /** Minimum distance for front plane */ public forceMinFrontDist = 0.0; - /** @hidden */ + /** @internal */ public static get className() { return "ViewDefinition3d"; } public onRenderFrame(_viewport: Viewport): void { } public allow3dManipulations(): boolean { return true; } @@ -1244,7 +1233,7 @@ export abstract class ViewState3d extends ViewState { public setOrigin(origin: XYAndZ) { this.origin.setFrom(origin); } public setExtents(extents: XYAndZ) { this.extents.setFrom(extents); } public setRotation(rot: Matrix3d) { this.rotation.setFrom(rot); } - /** @hidden */ + /** @internal */ protected enableCamera(): void { if (this.supportsCamera()) this._cameraOn = true; } public supportsCamera(): boolean { return true; } public minimumFrontDistance() { return Math.max(15.2 * Constant.oneCentimeter, this.forceMinFrontDist); } @@ -1540,7 +1529,7 @@ export abstract class ViewState3d extends ViewState { this.drawGroundPlane(context); } - /** @hidden */ + /** @internal */ protected drawSkyBox(context: DecorateContext): void { const style3d = this.getDisplayStyle3d(); if (!style3d.environment.sky.display) @@ -1598,7 +1587,7 @@ export abstract class ViewState3d extends ViewState { return extents; } - /** @hidden */ + /** @internal */ protected drawGroundPlane(context: DecorateContext): void { const extents = this.getGroundExtents(context.viewport); if (extents.isNull) diff --git a/core/frontend/src/Viewport.ts b/core/frontend/src/Viewport.ts index 796eb47..85d925e 100644 --- a/core/frontend/src/Viewport.ts +++ b/core/frontend/src/Viewport.ts @@ -38,7 +38,7 @@ export interface FeatureOverrideProvider { } /** Viewport synchronization flags. Synchronization is handled internally - do not use directly. - * @hidden + * @internal */ export class SyncFlags { private _decorations = false; @@ -396,14 +396,14 @@ export interface ZoomToOptions { } /** Supplies facilities for interacting with a [[Viewport]]'s frustum. - * @hidden + * @internal */ export class ViewFrustum { private static get2dFrustumDepth() { return Constant.oneMeter; } private readonly _viewCorners: Range3d = new Range3d(); private readonly _aspectRatioLocked: boolean; - /** @hidden */ + /** @internal */ public frustFraction: number = 1.0; /** Maximum ratio of frontplane to backplane distance for 24 bit zbuffer */ public static nearScale24 = 0.0003; @@ -418,14 +418,14 @@ export class ViewFrustum { public readonly viewDeltaUnexpanded = new Vector3d(); /** View rotation matrix (copied from ViewState) */ public readonly rotation = new Matrix3d(); - /** @hidden */ + /** @internal */ public readonly worldToViewMap = Map4d.createIdentity(); - /** @hidden */ + /** @internal */ public readonly worldToNpcMap = Map4d.createIdentity(); - /** @hidden */ + /** @internal */ public readonly zClipAdjusted: boolean = false; // were the view z clip planes adjusted due to front/back clipping off? - /** @hidden */ + /** @internal */ public readonly invalidFrustum: boolean = false; private _view: ViewState; @@ -446,14 +446,14 @@ export class ViewFrustum { private static _copyOutput(from: XYZ, to?: XYZ) { let pt = from; if (to) { to.setFrom(from); pt = to; } return pt; } - /** @hidden */ + /** @internal */ public toView(from: XYZ, to?: XYZ) { this.rotation.multiplyVectorInPlace(ViewFrustum._copyOutput(from, to)); } - /** @hidden */ + /** @internal */ public fromView(from: XYZ, to?: XYZ) { this.rotation.multiplyTransposeVectorInPlace(ViewFrustum._copyOutput(from, to)); } /** adjust the aspect ratio of the view volume to match the aspect ratio of the window of this Viewport. * modifies the point and vector given - * @hidden + * @internal */ protected adjustAspectRatio(origin: Point3d, delta: Vector3d) { if (this._aspectRatioLocked) @@ -714,12 +714,12 @@ export class ViewFrustum { this.worldToViewMap.setFrom(this.calcNpcToView().multiplyMapMap(this.worldToNpcMap)); } - /** @hidden */ + /** @internal */ public static createFromViewport(vp: Viewport, view?: ViewState): ViewFrustum | undefined { return new ViewFrustum(view !== undefined ? view : vp.view, vp.viewRect.width, vp.viewRect.height, vp.isAspectRatioLocked); } - /** @hidden */ + /** @internal */ public static createFromViewportAndPlane(vp: Viewport, plane: Plane3dByOriginAndUnitNormal): ViewFrustum | undefined { const vf = new ViewFrustum(vp.view, vp.viewRect.width, vp.viewRect.height, vp.isAspectRatioLocked, plane); return vf.invalidFrustum ? undefined : vf; @@ -883,24 +883,24 @@ export abstract class Viewport implements IDisposable { private _doContinuousRendering = false; private _animator?: Animator; /** Time the current flash started. - * @hidden + * @internal */ public flashUpdateTime?: BeTimePoint; /** Current flash intensity from [0..1] - * @hidden + * @internal */ public flashIntensity = 0; /** The length of time that the flash intensity will increase (in seconds) - * @hidden + * @internal */ public flashDuration = 0; private _flashedElem?: string; // id of currently flashed element /** Id of last flashed element. - * @hidden + * @internal */ public lastFlashedElem?: string; /** Maximum ratio of frontplane to backplane distance for 24 bit zbuffer. - * @hidden + * @internal */ public static nearScale24 = 0.0003; @@ -937,7 +937,7 @@ export abstract class Viewport implements IDisposable { private _alwaysDrawnExclusive: boolean = false; private _featureOverrideProvider?: FeatureOverrideProvider; - /** @hidden */ + /** @internal */ public get viewFrustum(): ViewFrustum { return this._viewFrustum; } /** This viewport's rotation matrix. */ @@ -946,29 +946,29 @@ export abstract class Viewport implements IDisposable { public get viewDelta(): Vector3d { return this._viewFrustum.viewDelta; } /** Provides conversions between world and view coordinates. */ public get worldToViewMap(): Map4d { return this._viewFrustum.worldToViewMap; } - /** @hidden */ + /** @internal */ public get frustFraction(): number { return this._viewFrustum.frustFraction; } - /** @hidden */ + /** @internal */ public get animationFraction(): number { return this._animationFraction; } - /** @hidden */ + /** @internal */ public set animationFraction(fraction: number) { this._animationFraction = fraction; this.sync.invalidateAnimationFraction(); } - /** @hidden */ + /** @internal */ protected readonly _viewRange: ViewRect = new ViewRect(); /** Get the rectangle of this Viewport in [[CoordSystem.View]] coordinates. */ public abstract get viewRect(): ViewRect; - /** @hidden */ + /** @internal */ public get isAspectRatioLocked(): boolean { return false; } - /** @hidden */ + /** @internal */ public get target(): RenderTarget { assert(undefined !== this._target, "Accessing RenderTarget of a disposed Viewport"); return this._target!; } - /** @hidden */ + /** @internal */ public readonly sync = new SyncFlags(); /** The settings that control how elements are hilited in this Viewport. */ public hilite = new Hilite.Settings(); @@ -979,9 +979,9 @@ export abstract class Viewport implements IDisposable { public get isGridOn(): boolean { return this.viewFlags.grid; } /** The [ViewFlags]($common) that determine how the contents of this Viewport are rendered. */ public get viewFlags(): ViewFlags { return this.view.viewFlags; } - /** @hidden */ + /** @internal */ public get wantAntiAliasLines(): AntiAliasPref { return AntiAliasPref.Off; } - /** @hidden */ + /** @internal */ public get wantAntiAliasText(): AntiAliasPref { return AntiAliasPref.Detect; } /** Determines what type (if any) of debug graphics will be displayed to visualize [[Tile]] volumes. @@ -995,7 +995,7 @@ export abstract class Viewport implements IDisposable { } } /** When true, the scene will never be recreated. Chiefly for debugging purposes. - * @hidden + * @internal */ public set freezeScene(freeze: boolean) { if (freeze !== this._freezeScene) { @@ -1005,15 +1005,15 @@ export abstract class Viewport implements IDisposable { } } - /** @hidden */ + /** @internal */ public get analysisStyle(): AnalysisStyle | undefined { return this.view.analysisStyle; } /** The iModel of this Viewport */ public get iModel(): IModelConnection { return this.view.iModel; } - /** @hidden */ + /** @internal */ public get isPointAdjustmentRequired(): boolean { return this.view.is3d(); } - /** @hidden */ + /** @internal */ public get isSnapAdjustmentRequired(): boolean { return IModelApp.toolAdmin.acsPlaneSnapLock && this.view.is3d(); } - /** @hidden */ + /** @internal */ public get isContextRotationRequired(): boolean { return IModelApp.toolAdmin.acsContextLock; } /** Enables or disables "fade-out" mode. When this mode is enabled, transparent graphics are rendered with a flat alpha weight, @@ -1028,7 +1028,7 @@ export abstract class Viewport implements IDisposable { } } - /** @hidden */ + /** @internal */ protected constructor(target: RenderTarget) { this._target = target; this._viewportId = Viewport._nextViewportId++; @@ -1040,20 +1040,28 @@ export abstract class Viewport implements IDisposable { IModelApp.tileAdmin.forgetViewport(this); } - /** @hidden */ + /** Enables or disables continuous rendering. Ideally, during each render frame a Viewport will do as little work as possible. + * To make that possible, the viewport keeps track of what has changed about its internal state from one frame to the next. + * For example, if the view frustum has not changed since the previous frame, it is likely that the viewport does not need to be + * re-rendered at all. + * + * In some circumstances, it is desirable to bypass the logic that limits the amount of work performed each frame. A primary example + * is a viewport that has some animations applied to it, or when diagnostic information like frames-per-second is being monitored. + * + * @note An application which enables continuous rendering should disable it as soon as it is no longer needed. + */ public get continuousRendering(): boolean { return this._doContinuousRendering; } - /** @hidden */ public set continuousRendering(contRend: boolean) { this._doContinuousRendering = contRend; } /** This gives each Viewport a unique ID, which can be used for comparing and sorting Viewport objects inside collections. - * @hidden + * @internal */ public get viewportId(): number { return this._viewportId; } /** The ViewState for this Viewport */ public get view(): ViewState { return this._viewFrustum.view; } - /** @hidden */ + /** @internal */ public get pixelsPerInch() { /* ###TODO: This is apparently unobtainable information in a browser... */ return 96; } - /** @hidden */ + /** @internal */ public get backgroundMapPlane() { return this.view.displayStyle.backgroundMapPlane; } /** IDs of a set of elements which should not be rendered within this view. @@ -1138,11 +1146,11 @@ export abstract class Viewport implements IDisposable { /** True if this is a 3d view with the camera turned on. */ public get isCameraOn(): boolean { return this.view.is3d() && this.view.isCameraOn; } - /** @hidden */ + /** @internal */ public invalidateDecorations() { this.sync.invalidateDecorations(); } - /** @hidden */ + /** @internal */ public invalidateRenderPlan() { this.sync.invalidateRenderPlan(); } - /** @hidden */ + /** @internal */ public changeDynamics(dynamics: GraphicList | undefined): void { this.target.changeDynamics(dynamics); this.invalidateDecorations(); @@ -1151,7 +1159,7 @@ export abstract class Viewport implements IDisposable { /** Set or clear the currently *flashed* element. * @param id The Id of the element to flash. If undefined, remove (un-flash) the currently flashed element * @param duration The amount of time, in seconds, the flash intensity will increase (see [[flashDuration]]) - * @hidden + * @internal */ public setFlashed(id: string | undefined, duration: number): void { if (id !== this._flashedElem) { @@ -1170,9 +1178,9 @@ export abstract class Viewport implements IDisposable { */ public get numRequestedTiles(): number { return IModelApp.tileAdmin.getNumRequestsForViewport(this); } - /** @hidden */ + /** @internal */ public toView(from: XYZ, to?: XYZ) { this._viewFrustum.toView(from, to); } - /** @hidden */ + /** @internal */ public fromView(from: XYZ, to?: XYZ) { this._viewFrustum.fromView(from, to); } /** Change the ViewState of this Viewport @@ -1185,7 +1193,7 @@ export abstract class Viewport implements IDisposable { this.target.reset(); } - /** @hidden */ + /** @internal */ public invalidateScene(): void { this.sync.invalidateScene(); } /** Computes the range of npc depth values for a region of the screen @@ -1560,19 +1568,19 @@ export abstract class Viewport implements IDisposable { return (ViewStatus.Success === this.setupFromView() && ViewStatus.Success === validSize); } - /** @hidden */ + /** @internal */ public computeViewRange(): Range3d { this.setupFromView(); // can't proceed if viewport isn't valid (not active) return this.view.computeFitRange(); } - /** @hidden */ + /** @internal */ public animate() { if (this._animator && this._animator.animate()) this._animator = undefined; } - /** @hidden */ + /** @internal */ public removeAnimator() { this.setAnimator(undefined); } private setAnimator(animator: Animator | undefined) { if (this._animator) @@ -1580,7 +1588,7 @@ export abstract class Viewport implements IDisposable { this._animator = animator; } - /** @hidden */ + /** @internal */ public animateFrustumChange(start: Frustum, end: Frustum, animationTime?: BeDuration) { if (!animationTime || 0.0 >= animationTime.milliseconds) animationTime = ToolSettings.animationTime; @@ -1588,7 +1596,7 @@ export abstract class Viewport implements IDisposable { this.setAnimator(new Animator(animationTime, this, start, end)); } - /** @hidden */ + /** @internal */ public applyViewState(val: ViewState, animationTime?: BeDuration) { const startFrust = this.getFrustum(); this._viewFrustum.view = val.clone(this.view.iModel); // preserve our iModel in case val is coming from a different connection @@ -1668,7 +1676,7 @@ export abstract class Viewport implements IDisposable { point.setFrom(pointView); } - /** @hidden */ + /** @internal */ public pointToGrid(point: Point3d): void { if (GridOrientationType.AuxCoord === this.view.getGridOrientation()) { this.pointToStandardGrid(point, this.getAuxCoordRotation(), this.getAuxCoordOrigin()); @@ -1733,7 +1741,7 @@ export abstract class Viewport implements IDisposable { return needsFlashUpdate; } - /** @hidden */ + /** @internal */ public createSceneContext(): SceneContext { return new SceneContext(this); } /** Called when the visible contents of the viewport are redrawn. @@ -1741,7 +1749,7 @@ export abstract class Viewport implements IDisposable { */ public readonly onRender = new BeEvent<(vp: Viewport) => void>(); - /** @hidden */ + /** @internal */ public renderFrame(): boolean { const sync = this.sync; const view = this.view; @@ -1850,7 +1858,7 @@ export abstract class Viewport implements IDisposable { return true; } - /** @hidden */ + /** @internal */ public addDecorations(_decorations: Decorations): void { } /** Read selected data about each pixel within a rectangular region of this Viewport. @@ -1969,14 +1977,14 @@ export class ScreenViewport extends Viewport { } /** Remove all of the children of an HTMLDivElement. - * @hidden + * @internal */ public static removeAllChildren(el: HTMLDivElement) { while (el.lastChild) el.removeChild(el.lastChild); } /** add a child element to this.parentDiv and set its size and position the same as the parent. - * @hidden + * @internal */ public addChildDiv(element: HTMLElement, zIndex: number) { // get the (computed) z-index value of the parent, as an integer. @@ -1991,7 +1999,7 @@ export class ScreenViewport extends Viewport { this.parentDiv.appendChild(element); } - /** @hidden */ + /** @internal */ public addNewDiv(className: string, overflowHidden: boolean, z: number): HTMLDivElement { const div = document.createElement("div"); div.className = className; @@ -2001,7 +2009,7 @@ export class ScreenViewport extends Viewport { return div; } - /** @hidden */ + /** @internal */ constructor(canvas: HTMLCanvasElement, parentDiv: HTMLDivElement, target: RenderTarget) { super(target); this.canvas = canvas; @@ -2068,7 +2076,7 @@ export class ScreenViewport extends Viewport { return mapResult; } - /** @hidden */ + /** @internal */ public pickCanvasDecoration(pt: XAndY) { return this.target.pickOverlayDecoration(pt); } /** Get the ClientRect of the canvas for this Viewport. */ @@ -2077,7 +2085,7 @@ export class ScreenViewport extends Viewport { /** The ViewRect for this ScreenViewport. Left and top will be 0, right will be the width, and bottom will be the height. */ public get viewRect(): ViewRect { this._viewRange.init(0, 0, this.canvas.clientWidth, this.canvas.clientHeight); return this._viewRange; } - /** @hidden */ + /** @internal */ public addDecorations(decorations: Decorations): void { ScreenViewport.removeAllChildren(this.decorationDiv); const context = new DecorateContext(this, decorations); @@ -2092,7 +2100,7 @@ export class ScreenViewport extends Viewport { /** Change the cursor for this Viewport */ public setCursor(cursor: string = "default"): void { this.canvas.style.cursor = cursor; } - /** @hidden */ + /** @internal */ public synchWithView(saveInUndo: boolean): void { super.setupFromView(); if (saveInUndo) @@ -2108,9 +2116,9 @@ export class ScreenViewport extends Viewport { this.saveViewUndo(); } - /** @hidden */ + /** @internal */ public get viewCmdTargetCenter(): Point3d | undefined { return this._viewCmdTargetCenter; } - /** @hidden */ + /** @internal */ public set viewCmdTargetCenter(center: Point3d | undefined) { this._viewCmdTargetCenter = center ? center.clone() : undefined; } /** True if an undoable viewing operation exists on the stack */ public get isUndoPossible(): boolean { return 0 < this._backStack.length; } @@ -2219,7 +2227,7 @@ export class ScreenViewport extends Viewport { context.addDecorationFromBuilder(builder); } - /** @hidden */ + /** @internal */ public drawLocateCursor(context: DecorateContext, pt: Point3d, aperture: number, isLocateCircleOn: boolean, hit?: HitDetail): void { if (hit) ScreenViewport.drawLocateHitDetail(context, aperture, hit); @@ -2275,7 +2283,10 @@ export class TwoWayViewportSync { public disconnect() { this._removals.forEach((removal) => removal()); } } -/** @hidden */ +/** An off-screen viewport is not rendered to the screen. It is never added to the [[ViewManager]], therefore does not participate in + * the render loop. It must be initialized with an explicit height and width, and its renderFrame function must be manually invoked. + * @internal + */ export class OffScreenViewport extends Viewport { public static create(view: ViewState, viewRect?: ViewRect) { const rect = new ViewRect(0, 0, 1, 1); @@ -2296,7 +2307,7 @@ export class OffScreenViewport extends Viewport { } } -/** @hidden */ +/** @internal */ export function linePlaneIntersect(outP: Point3d, linePt: Point3d, lineNormal: Vector3d | undefined, planePt: Point3d, planeNormal: Vector3d, perpendicular: boolean): void { let dot = 0; if (lineNormal) diff --git a/core/frontend/src/properties/EditorParams.ts b/core/frontend/src/properties/EditorParams.ts index 33cd7bf..ad9c3d2 100644 --- a/core/frontend/src/properties/EditorParams.ts +++ b/core/frontend/src/properties/EditorParams.ts @@ -18,6 +18,7 @@ export enum PropertyEditorParamTypes { Slider, SuppressUnitLabel, SuppressEditorLabel, + ColorData, } /** @@ -77,6 +78,18 @@ export interface SliderEditorParams extends BasePropertyEditorParams { valueFactor?: number; } +/** + * Parameters used to populate color type editor with a specific set of colors. If not specified the Color + * Editor will show a default palette of 16 colors. + */ +export interface ColorEditorParams extends BasePropertyEditorParams { + type: PropertyEditorParamTypes.ColorData; + /** array of color values to show in color picker popup. Use [[ColorByName]] enum values. Values should be 32-bit integer in the form 0xBBGGRR. */ + colorValues: number[]; + /** number of columns to show in color picker popup. The value of 4 is used if not defined. */ + numColumns?: number; +} + /** * Parameter that is used to indicate that a multiline text editor should be created. * The number of rows specified will determine the height of the editor control. @@ -141,4 +154,4 @@ export interface SuppressLabelEditorParams extends BasePropertyEditorParams { */ export type PropertyEditorParams = JsonEditorParams | RangeEditorParams | SliderEditorParams | ButtonGroupEditorParams | MultilineTextEditorParams | IconEditorParams | CheckBoxIconsEditorParams | SuppressUnitLabelEditorParams - | SuppressLabelEditorParams | InputEditorSizeParams; + | SuppressLabelEditorParams | InputEditorSizeParams | ColorEditorParams; diff --git a/core/frontend/src/render/FeatureSymbology.ts b/core/frontend/src/render/FeatureSymbology.ts index 92ed4a6..9550e36 100644 --- a/core/frontend/src/render/FeatureSymbology.ts +++ b/core/frontend/src/render/FeatureSymbology.ts @@ -16,7 +16,7 @@ function copyIdSetToUint32Set(dst: Id64.Uint32Set, src?: Set): void { } } -/** Contains types that enable an application to customize how [[Feature]]s are drawn within a [[Viewport]]. */ +/** Contains types that enable an application to customize how [Feature]($commmon)s are drawn within a [[Viewport]]. */ export namespace FeatureSymbology { /** Properties used to initialize a [[FeatureSymbology.Appearance]]. */ export interface AppearanceProps { @@ -28,14 +28,14 @@ export namespace FeatureSymbology { transparency?: number; /** The pixel pattern used to draw lines. */ linePixels?: LinePixels; - /** If true, ignore the [[RenderMaterial]] associated with surfaces. */ + /** If true, ignore the [RenderMaterial]($frontend) associated with surfaces. */ ignoresMaterial?: true | undefined; - /** If true, the associated [[Feature]]s will not be drawn when using [[Viewport.readPixels]]. */ + /** If true, the associated [Feature]($common)s will not be drawn when using [[Viewport.readPixels]]. */ nonLocatable?: true | undefined; } - /** Defines overrides for selected aspects of a [[Feature]]'s symbology. - * Any member defined in the Appearance overrides that aspect of symbology for all [[Feature]]s to which the Appearance is applied. + /** Defines overrides for selected aspects of a [Feature]($common)'s symbology. + * Any member defined in the Appearance overrides that aspect of symbology for all [Feature]($common)s to which the Appearance is applied. * @see [[FeatureSymbology.Overrides]] */ export class Appearance implements AppearanceProps { @@ -47,9 +47,9 @@ export namespace FeatureSymbology { public readonly transparency?: number; /** The pixel pattern used to draw lines. */ public readonly linePixels?: LinePixels; - /** If true, ignore the [[RenderMaterial]] associated with surfaces. */ + /** If true, ignore the [RenderMaterial]($frontend) associated with surfaces. */ public readonly ignoresMaterial?: true | undefined; - /** If true, ignore the [[Feature]] when using [[Viewport.readPixels]]. */ + /** If true, ignore the [Feature]($common) when using [[Viewport.readPixels]]. */ public readonly nonLocatable?: true | undefined; /** An Appearance which overrides nothing. */ @@ -62,7 +62,7 @@ export namespace FeatureSymbology { return new Appearance(props); } - /** Create an Appearance that overrides only the RGB color of a [[Feature]]. + /** Create an Appearance that overrides only the RGB color of a [Feature]($common). * @note The transparency component of the ColorDef is ignored. */ public static fromRgb(color: ColorDef): Appearance { return this.fromJSON({ rgb: RgbColor.fromColorDef(color) }); } @@ -152,12 +152,12 @@ export namespace FeatureSymbology { private rgbIsEqual(rgb?: RgbColor): boolean { return undefined === this.rgb ? undefined === rgb ? true : false : undefined === rgb ? false : this.rgb.equals(rgb); } } - /** Allows a [[ViewState]] to customize the appearance of individual [[Feature]]s within it. + /** Allows a [[ViewState]] to customize the appearance of individual [Feature]($common)s within it. * * The ViewState computes its base Overrides based on the following: * - The set of categories enabled for display in its [[CategorySelectorState]]. Every [[SubCategory]] belonging to an enabled [[Category]] is added to the set of visible subcategories - all other subcategories are assumed to be invisible. * - For the set of visible subcategories, any [[SubCategoryOverride]]s defined by the view's [[DisplayStyleState]] are applied. This may render some subcategories invisible, and change the symbology of others. - * - The visibility of each [[GeometryClass]] is set based on the view's [[ViewFlags]]. + * - The visibility of each [GeometryClass]($common) is set based on the view's [[ViewFlags]]. * - The line weight is overridden to 1 pixel for all Features if line weight has been disabled by the view's [[ViewFlags]]. * - The sets of elements which are always drawn and never drawn are initialized from the [[ViewState]]'s sets. * An application can further customize the symbology of any Features by specifying an [[AddFeatureOverrides]] function on a [[Viewport]]. That function will be invoked @@ -173,45 +173,45 @@ export namespace FeatureSymbology { * the color specified by the element override will take precedence over that specified for the subcategory, resulting in a green Feature. * * @see [[ViewState.setFeatureOverridesDirty]] for explicitly regenerating a view's Overrides. - * @see [[ViewState.alwaysDrawn]] - * @see [[ViewState.neverDrawn]] + * @see [[Viewport.alwaysDrawn]] + * @see [[Viewport.neverDrawn]] */ export class Overrides { - /** Ids of elements which should never be drawn. This takes precedence over [[_alwaysDrawn]]. @hidden */ + /** Ids of elements which should never be drawn. This takes precedence over [[_alwaysDrawn]]. @internal */ protected readonly _neverDrawn = new Id64.Uint32Set(); - /** Ids of elements which should always be drawn. [[_neverDrawn]] takes precedence over this set. @hidden */ + /** Ids of elements which should always be drawn. [[_neverDrawn]] takes precedence over this set. @internal */ protected readonly _alwaysDrawn = new Id64.Uint32Set(); /** If true, no elements *except* those defined in the "always drawn" set will be drawn. * @see [[setAlwaysDrawn]] */ public isAlwaysDrawnExclusive = false; - /** Overrides applied to any feature not explicitly overridden. @hidden */ + /** Overrides applied to any feature not explicitly overridden. @internal */ protected _defaultOverrides = Appearance.defaults; - /** Whether construction geometry should be drawn. @hidden */ + /** Whether construction geometry should be drawn. @internal */ protected _constructions = false; - /** Whether dimensions should be drawn. @hidden */ + /** Whether dimensions should be drawn. @internal */ protected _dimensions = false; - /** Whether area patterns should be drawn. @hidden */ + /** Whether area patterns should be drawn. @internal */ protected _patterns = false; - /** Whether line weights should be applied. If false, all lines are rendered 1-pixel wide. @hidden */ + /** Whether line weights should be applied. If false, all lines are rendered 1-pixel wide. @internal */ protected _lineWeights = true; - /** Overrides applied to all elements belonging to each model. @hidden */ + /** Overrides applied to all elements belonging to each model. @internal */ protected readonly _modelOverrides = new Id64.Uint32Map(); - /** Overrides applied to specific elements. @hidden */ + /** Overrides applied to specific elements. @internal */ protected readonly _elementOverrides = new Id64.Uint32Map(); - /** Overrides applied to geometry belonging to each subcategory. @hidden */ + /** Overrides applied to geometry belonging to each subcategory. @internal */ protected readonly _subCategoryOverrides = new Id64.Uint32Map(); - /** The set of displayed subcategories. Geometry belonging to subcategories not included in this set will not be drawn. @hidden */ + /** The set of displayed subcategories. Geometry belonging to subcategories not included in this set will not be drawn. @internal */ protected readonly _visibleSubCategories = new Id64.Uint32Set(); /** IDs of animation nodes which should never be drawn. - * @hidden + * @internal */ public readonly neverDrawnAnimationNodes = new Set(); /** Mapping of animation node IDS to overrides applied to the corresponding animation nodes. - * @hidden + * @internal */ public readonly animationNodeOverrides = new Map(); @@ -220,21 +220,21 @@ export namespace FeatureSymbology { /** Whether or not line weights are applied. If false, all lines are drawn with a weight of 1. */ public get lineWeights(): boolean { return this._lineWeights; } - /** @hidden */ + /** @internal */ protected isNeverDrawn(elemIdLo: number, elemIdHi: number, animationNodeId: number): boolean { if (this._neverDrawn.has(elemIdLo, elemIdHi)) return true; else return 0 !== animationNodeId && this.neverDrawnAnimationNodes.has(animationNodeId); } - /** @hidden */ + /** @internal */ protected isAlwaysDrawn(idLo: number, idHi: number): boolean { return this._alwaysDrawn.has(idLo, idHi); } - /** Returns true if the [[SubCategory]] specified by ID is in the set of visible subcategories. @hidden */ + /** Returns true if the [[SubCategory]] specified by ID is in the set of visible subcategories. @internal */ protected isSubCategoryVisible(idLo: number, idHi: number): boolean { return this._visibleSubCategories.has(idLo, idHi); } - /** @hidden */ + /** @internal */ protected getModelOverrides(idLo: number, idHi: number): Appearance | undefined { return this._modelOverrides.get(idLo, idHi); } - /** @hidden */ + /** @internal */ protected getElementOverrides(idLo: number, idHi: number, animationNodeId: number): Appearance | undefined { const app = this._elementOverrides.get(idLo, idHi); if (app !== undefined || 0 === animationNodeId) @@ -242,7 +242,7 @@ export namespace FeatureSymbology { return this.animationNodeOverrides.get(animationNodeId); } - /** @hidden */ + /** @internal */ protected getSubCategoryOverrides(idLo: number, idHi: number): Appearance | undefined { return this._subCategoryOverrides.get(idLo, idHi); } /** Add a [[SubCategory]] to the set of visible subcategories. */ @@ -273,7 +273,7 @@ export namespace FeatureSymbology { /** Returns a feature's Appearance overrides, or undefined if the feature is not visible. * Takes Id64s as pairs of unsigned 32-bit integers, because that is how they are stored by the PackedFeatureTable associated with each batch of graphics. * This API is much uglier but also much more efficient. - * @hidden + * @internal */ public getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): Appearance | undefined { if (BatchType.Classifier === type) @@ -321,7 +321,7 @@ export namespace FeatureSymbology { } /** Classifiers behave totally differently...in particular they are never invisible unless fully-transparent. - * @hidden + * @internal */ protected getClassifierAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, modelLo: number, modelHi: number): Appearance | undefined { let app = Appearance.defaults; @@ -348,7 +348,7 @@ export namespace FeatureSymbology { return app; } - /** @hidden */ + /** @internal */ public isClassVisible(geomClass: GeometryClass): boolean { switch (geomClass) { case GeometryClass.Construction: return this._constructions; @@ -414,7 +414,7 @@ export namespace FeatureSymbology { */ public overrideAnimationNode(id: number, app: Appearance): void { this.animationNodeOverrides.set(id, app); } - /** Defines a default Appearance to be applied to any [[Feature]] *not* explicitly overridden. + /** Defines a default Appearance to be applied to any [Feature]($common) *not* explicitly overridden. * @param appearance The symbology overides. * @param replaceExisting Specifies whether to replace the current default overrides if they are already defined. */ @@ -424,7 +424,7 @@ export namespace FeatureSymbology { } /** Initialize these Overrides based on the [[ViewState]]'s settings. - * @hidden + * @internal */ public initFromView(view: ViewState) { const { viewFlags } = view; diff --git a/core/frontend/src/render/GraphicBuilder.ts b/core/frontend/src/render/GraphicBuilder.ts index 79235a9..11da2b9 100644 --- a/core/frontend/src/render/GraphicBuilder.ts +++ b/core/frontend/src/render/GraphicBuilder.ts @@ -35,7 +35,7 @@ import { RenderGraphic } from "./System"; */ export const enum GraphicType { /** - * Renders behind all other graphics. For example, the [[SheetBorder]] of a [[SheetViewState]] is of this type. + * Renders behind all other graphics. For example, the border of a [[SheetViewState]] is of this type. * Coordinates: [[CoordSystem.View]]. * [[RenderMode]]: [[RenderMode.SmoothShade]]. * Lighting: none. @@ -119,20 +119,20 @@ export abstract class GraphicBuilder { public get placement(): Transform { return this._placement; } public set placement(tf: Transform) { this._placement.setFrom(tf); } - /** @hidden */ + /** @internal */ public get isViewCoordinates(): boolean { return this.type === GraphicType.ViewBackground || this.type === GraphicType.ViewOverlay; } - /** @hidden */ + /** @internal */ public get isWorldCoordinates(): boolean { return !this.isViewCoordinates; } - /** @hidden */ + /** @internal */ public get isSceneGraphic(): boolean { return this.type === GraphicType.Scene; } - /** @hidden */ + /** @internal */ public get isViewBackground(): boolean { return this.type === GraphicType.ViewBackground; } - /** @hidden */ + /** @internal */ public get isOverlay(): boolean { return this.type === GraphicType.ViewOverlay || this.type === GraphicType.WorldOverlay; } - /** @hidden */ + /** @internal */ public get iModel(): IModelConnection { return this.viewport.iModel; } - /** @hidden */ + /** @internal */ protected constructor(placement: Transform = Transform.identity, type: GraphicType, viewport: Viewport, pickId?: Id64String) { this._placement = placement; this.type = type; @@ -221,8 +221,8 @@ export abstract class GraphicBuilder { */ public abstract addPolyface(meshData: Polyface, filled: boolean): void; - /** Add Range3d edges - * @hidden + /** Add Range3d edges. Useful for debugging. + * @public */ public addRangeBox(range: Range3d) { const frustum = Frustum.fromRange(range); @@ -258,7 +258,7 @@ export abstract class GraphicBuilder { } /** Set blanking fill symbology for decoration. - * @hidden + * @internal */ public setBlankingFill(fillColor: ColorDef) { this.activateGraphicParams(GraphicParams.fromBlankingFill(fillColor)); } } diff --git a/core/frontend/src/render/MockRender.ts b/core/frontend/src/render/MockRender.ts index 760e0fb..2c9b324 100644 --- a/core/frontend/src/render/MockRender.ts +++ b/core/frontend/src/render/MockRender.ts @@ -36,10 +36,10 @@ import { Id64String, dispose } from "@bentley/bentleyjs-core"; * (1) If overriding anything in the implementation supplied herein, pass a SystemFactory function to MockRender.App.systemFactory. * (2) Call MockRender.App.startup() instead of IModelApp.startup() or MaybeRenderApp.startup() before tests begin. * (3) Likewise call MockRender.App.shutdown() when finished. This resets the SystemFactory to its default. - * @hidden + * @internal */ export namespace MockRender { - /** @hidden */ + /** @internal */ export abstract class Target extends RenderTarget { protected constructor(private readonly _system: System) { super(); } @@ -58,7 +58,7 @@ export namespace MockRender { public readPixels(_rect: ViewRect, _selector: Pixel.Selector, receiver: Pixel.Receiver, _excludeNonLocatable: boolean) { receiver(undefined); } } - /** @hidden */ + /** @internal */ export class OnScreenTarget extends Target { public constructor(system: System, private readonly _canvas: HTMLCanvasElement) { super(system); } @@ -66,7 +66,7 @@ export namespace MockRender { public setViewRect(_rect: ViewRect, _temp: boolean) { } } - /** @hidden */ + /** @internal */ export class OffScreenTarget extends Target { public constructor(system: System, private readonly _viewRect: ViewRect) { super(system); } @@ -74,14 +74,14 @@ export namespace MockRender { public setViewRect(rect: ViewRect, _temp: boolean) { this._viewRect.setFrom(rect); } } - /** @hidden */ + /** @internal */ export class Builder extends PrimitiveBuilder { public constructor(system: System, placement: Transform = Transform.identity, type: GraphicType, viewport: Viewport, pickId?: Id64String) { super(system, type, viewport, placement, pickId); } } - /** @hidden */ + /** @internal */ export class Graphic extends RenderGraphic { public constructor() { super(); } @@ -89,7 +89,7 @@ export namespace MockRender { public collectStatistics(_stats: RenderMemory.Statistics): void { } } - /** @hidden */ + /** @internal */ export class List extends Graphic { public constructor(public readonly graphics: RenderGraphic[]) { super(); } @@ -101,14 +101,14 @@ export namespace MockRender { } } - /** @hidden */ + /** @internal */ export class Branch extends Graphic { public constructor(public readonly branch: GraphicBranch, public readonly transform: Transform, public readonly clips?: RenderClipVolume) { super(); } public dispose() { this.branch.dispose(); } } - /** @hidden */ + /** @internal */ export class Batch extends Graphic { public constructor(public readonly graphic: RenderGraphic, public readonly featureTable: PackedFeatureTable, public readonly range: ElementAlignedBox3d) { super(); } @@ -117,7 +117,7 @@ export namespace MockRender { } } - /** @hidden */ + /** @internal */ export class System extends RenderSystem { public get isValid() { return true; } public dispose(): void { } @@ -137,11 +137,11 @@ export namespace MockRender { public createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection) { return new Graphic(); } } - /** @hidden */ + /** @internal */ export type SystemFactory = () => RenderSystem; /** An implementation of IModelApp which uses a MockRender.System by default. - * @hidden + * @internal */ export class App extends IModelApp { public static systemFactory: SystemFactory = () => App.createDefaultRenderSystem(); diff --git a/core/frontend/src/render/System.ts b/core/frontend/src/render/System.ts index e3f6ff2..7eb7e02 100644 --- a/core/frontend/src/render/System.ts +++ b/core/frontend/src/render/System.ts @@ -25,11 +25,11 @@ import { MeshParams, PointStringParams, PolylineParams } from "./primitives/Vert import { ClipPlanesVolume } from "./webgl/ClipVolume"; /** Contains metadata about memory consumed by the render system or aspect thereof. - * @hidden + * @internal */ export namespace RenderMemory { /** Describes memory consumed by a particular type of resource. - * @hidden + * @internal */ export class Consumers { public totalBytes = 0; // total number of bytes consumed by all consumers @@ -47,6 +47,7 @@ export namespace RenderMemory { } } + /** @internal */ export const enum BufferType { Surfaces = 0, VisibleEdges, @@ -61,7 +62,7 @@ export namespace RenderMemory { } /** Describes memory consumed by GPU-allocated buffers. - * @hidden + * @internal */ export class Buffers extends Consumers { public readonly consumers: Consumers[]; @@ -95,6 +96,7 @@ export namespace RenderMemory { } } + /** @internal */ export const enum ConsumerType { Textures = 0, VertexTables, @@ -105,7 +107,7 @@ export namespace RenderMemory { COUNT, } - /** @hidden */ + /** @internal */ export class Statistics { private _totalBytes = 0; public readonly consumers: Consumers[]; @@ -157,14 +159,14 @@ export namespace RenderMemory { public addInstances(numBytes: number) { this.addBuffer(BufferType.Instances, numBytes); } } - /** @hidden */ + /** @internal */ export interface Consumer { collectStatistics(stats: Statistics): void; } } /* A RenderPlan holds a Frustum and the render settings for displaying a RenderScene into a RenderTarget. - * @hidden + * @internal */ export class RenderPlan { public readonly is3d: boolean; @@ -236,7 +238,7 @@ export class RenderPlan { export abstract class RenderGraphic implements IDisposable, RenderMemory.Consumer { public abstract dispose(): void; - /** @hidden */ + /** @internal */ public abstract collectStatistics(stats: RenderMemory.Statistics): void; } @@ -322,9 +324,8 @@ export class Decorations implements IDisposable { public canvasDecorations?: CanvasDecorationList; - /** @hidden */ + /** A view decoration created from a [[SkyBox]] rendered behind all other geometry to provide environmental context. */ public get skyBox(): RenderGraphic | undefined { return this._skyBox; } - /** @hidden */ public set skyBox(skyBox: RenderGraphic | undefined) { dispose(this._skyBox); this._skyBox = skyBox; } /** A view decoration drawn as the background of the view. @see [[GraphicType.ViewBackground]]. */ public get viewBackground(): RenderGraphic | undefined { return this._viewBackground; } @@ -366,17 +367,23 @@ export class GraphicBranch implements IDisposable, RenderMemory.Consumer { private _viewFlagOverrides = new ViewFlag.Overrides(); /** Optional symbology overrides to be applied to all graphics in this branch */ public symbologyOverrides?: FeatureSymbology.Overrides; - /** Optional animation branch Id. */ + /** Optional animation branch Id. + * @internal + */ public animationId?: string; + /** Constructor + * @param ownsEntries If true, when this branch is [[dispose]]d, all of the [[RenderGraphic]]s it contains will also be disposed. + */ public constructor(ownsEntries: boolean = false) { this.ownsEntries = ownsEntries; } + /** Add a graphic to this branch. */ public add(graphic: RenderGraphic): void { this.entries.push(graphic); } - /** @hidden */ + /** @internal */ public getViewFlags(flags: ViewFlags, out?: ViewFlags): ViewFlags { return this._viewFlagOverrides.apply(flags.clone(out)); } - /** @hidden */ + /** @internal */ public setViewFlags(flags: ViewFlags): void { this._viewFlagOverrides.overrideAll(flags); } - /** @hidden */ + /** @internal */ public setViewFlagOverrides(ovr: ViewFlag.Overrides): void { this._viewFlagOverrides.copyFrom(ovr); } public dispose() { this.clear(); } @@ -390,7 +397,7 @@ export class GraphicBranch implements IDisposable, RenderMemory.Consumer { this.entries.length = 0; } - /** @hidden */ + /** @internal */ public collectStatistics(stats: RenderMemory.Statistics): void { for (const entry of this.entries) entry.collectStatistics(stats); @@ -416,7 +423,7 @@ export namespace Pixel { /** Describes the foremost type of geometry which produced the [[Pixel.Data]]. */ export const enum GeometryType { - /** [[Pixel.Selector.Geometry]] was not specified, or the type could not be determined. */ + /** [[Pixel.Selector.GeometryAndDistance]] was not specified, or the type could not be determined. */ Unknown, // Geometry was not selected, or type could not be determined /** No geometry was rendered to this pixel. */ None, @@ -432,7 +439,7 @@ export namespace Pixel { /** Describes the planarity of the foremost geometry which produced the pixel. */ export const enum Planarity { - /** [[Pixel.Selector.Geometry]] was not specified, or the planarity could not be determined. */ + /** [[Pixel.Selector.GeometryAndDistance]] was not specified, or the planarity could not be determined. */ Unknown, /** No geometry was rendered to this pixel. */ None, @@ -494,7 +501,7 @@ export class PackedFeatureTable { /** Construct a PackedFeatureTable from the packed binary data. * This is used internally when deserializing Tiles in iMdl format. - * @hidden + * @internal */ public constructor(data: Uint32Array, modelId: Id64String, numFeatures: number, maxFeatures: number, type: BatchType, animationNodeIds?: Uint8Array | Uint16Array | Uint32Array) { this._data = data; @@ -574,7 +581,7 @@ export class PackedFeatureTable { return featureIndex < this.numFeatures ? this.getFeature(featureIndex) : undefined; } - /** @hidden */ + /** @internal */ public getElementIdPair(featureIndex: number): Id64.Uint32Pair { assert(featureIndex < this.numFeatures); const offset = 3 * featureIndex; @@ -584,12 +591,12 @@ export class PackedFeatureTable { }; } - /** @hidden */ + /** @internal */ public getAnimationNodeId(featureIndex: number): number { return undefined !== this._animationNodeIds ? this._animationNodeIds[featureIndex] : 0; } - /** @hidden */ + /** @internal */ public getPackedFeature(featureIndex: number): PackedFeature { assert(featureIndex < this.numFeatures); @@ -644,77 +651,48 @@ export class PackedFeatureTable { /** A RenderTarget connects a [[Viewport]] to a WebGLRenderingContext to enable the viewport's contents to be displayed on the screen. * Application code rarely interacts directly with a RenderTarget - instead, it interacts with a Viewport which forwards requests to the implementation * of the RenderTarget. + * @internal */ export abstract class RenderTarget implements IDisposable { - /** @hidden */ public pickOverlayDecoration(_pt: XAndY): CanvasDecoration | undefined { return undefined; } - /** @hidden */ public static get frustumDepth2d(): number { return 1.0; } // one meter - /** @hidden */ public static get maxDisplayPriority(): number { return (1 << 23) - 32; } - /** @hidden */ public static get minDisplayPriority(): number { return -this.maxDisplayPriority; } - /** Returns a transform mapping an object's display priority to a depth from 0 to frustumDepth2d. - * @hidden - */ + /** Returns a transform mapping an object's display priority to a depth from 0 to frustumDepth2d. */ public static depthFromDisplayPriority(priority: number): number { return (priority - this.minDisplayPriority) / (this.maxDisplayPriority - this.minDisplayPriority) * this.frustumDepth2d; } - /** @hidden */ public abstract get renderSystem(): RenderSystem; - /** @hidden */ public abstract get cameraFrustumNearScaleLimit(): number; - /** @hidden */ public abstract get viewRect(): ViewRect; - /** @hidden */ public abstract get wantInvertBlackBackground(): boolean; - /** @hidden */ public abstract get animationFraction(): number; - /** @hidden */ public abstract set animationFraction(fraction: number); - /** @hidden */ public get animationBranches(): AnimationBranchStates | undefined { return undefined; } - /** @hidden */ public set animationBranches(_transforms: AnimationBranchStates | undefined) { } - /** @hidden */ public createGraphicBuilder(type: GraphicType, viewport: Viewport, placement: Transform = Transform.identity, pickableId?: Id64String) { return this.renderSystem.createGraphicBuilder(placement, type, viewport, pickableId); } public dispose(): void { } - /** @hidden */ public reset(): void { } - /** @hidden */ public abstract changeScene(scene: GraphicList): void; - /** @hidden */ public abstract changeTerrain(_scene: GraphicList): void; - /** @hidden */ public abstract changeDynamics(dynamics?: GraphicList): void; - /** @hidden */ public abstract changeDecorations(decorations: Decorations): void; - /** @hidden */ public abstract changeRenderPlan(plan: RenderPlan): void; - /** @hidden */ public abstract drawFrame(sceneMilSecElapsed?: number): void; - /** @hidden */ public overrideFeatureSymbology(_ovr: FeatureSymbology.Overrides): void { } - /** @hidden */ public setHiliteSet(_hilited: Set): void { } - /** @hidden */ public setFlashed(_elementId: Id64String, _intensity: number): void { } - /** @hidden */ public abstract setViewRect(_rect: ViewRect, _temporary: boolean): void; - /** @hidden */ public onResized(): void { } - /** @hidden */ public abstract updateViewRect(): boolean; // force a RenderTarget viewRect to resize if necessary since last draw - /** @hidden */ public abstract readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void; - /** @hidden */ public readImage(_rect: ViewRect, _targetSize: Point2d, _flipVertically: boolean): ImageBuffer | undefined { return undefined; } } @@ -726,7 +704,7 @@ export interface TextureImage { format: ImageSourceFormat | undefined; } -/** @hidden */ +/** @internal */ export const enum RenderDiagnostics { /** No diagnostics enabled. */ None = 0, @@ -746,30 +724,38 @@ export interface InstancedGraphicParams { * Must be greater than zero. * Must be equal to (transforms.length / 12) * If featureIds is defined, must be equal to (featureIds.length / 3) + * If symbologyOverrides is defined, must be equal to (symbologyOverrides.length / 8) */ readonly count: number; /** An array of instance-to-model transforms. Each transform consists of 3 rows of 4 columns where the 4th column holds the translation. */ readonly transforms: Float32Array; /** If defined, an array of little-endian 24-bit unsigned integers containing the feature ID of each instance. */ readonly featureIds?: Uint8Array; + /** + * If defined, as array of bytes (8 per instance) encoding the symbology overrides for each instance. The encoding matches that used by FeatureOverrides, though only the RGB, alpha, line weight, and line code are used. + * @internal + */ + readonly symbologyOverrides?: Uint8Array; } /** A RenderSystem provides access to resources used by the internal WebGL-based rendering system. + * An application rarely interacts directly with the RenderSystem; instead it interacts with types like [[Viewport]] which + * coordinate with the RenderSystem on the application's behalf. * @see [[IModelApp.renderSystem]]. */ export abstract class RenderSystem implements IDisposable { - /** @hidden */ + /** @internal */ public abstract get isValid(): boolean; - /** @hidden */ + /** @internal */ public abstract dispose(): void; - /** @hidden */ + /** @internal */ public get maxTextureSize(): number { return 0; } - /** @hidden */ + /** @internal */ public abstract createTarget(canvas: HTMLCanvasElement): RenderTarget; - /** @hidden */ + /** @internal */ public abstract createOffscreenTarget(rect: ViewRect): RenderTarget; /** Find a previously-created [[RenderMaterial]] by its ID. @@ -800,13 +786,13 @@ export abstract class RenderSystem implements IDisposable { */ public abstract createGraphicBuilder(placement: Transform, type: GraphicType, viewport: Viewport, pickableId?: Id64String): GraphicBuilder; - /** @hidden */ + /** @internal */ public createTriMesh(args: MeshArgs, instances?: InstancedGraphicParams): RenderGraphic | undefined { const params = MeshParams.create(args); return this.createMesh(params, instances); } - /** @hidden */ + /** @internal */ public createIndexedPolylines(args: PolylineArgs, instances?: InstancedGraphicParams): RenderGraphic | undefined { if (args.flags.isDisjoint) { const pointStringParams = PointStringParams.create(args); @@ -817,23 +803,23 @@ export abstract class RenderSystem implements IDisposable { } } - /** @hidden */ + /** @internal */ public createMesh(_params: MeshParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined { return undefined; } - /** @hidden */ + /** @internal */ public createPolyline(_params: PolylineParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined { return undefined; } - /** @hidden */ + /** @internal */ public createPointString(_params: PointStringParams, _instances?: InstancedGraphicParams): RenderGraphic | undefined { return undefined; } - /** @hidden */ + /** @internal */ public createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection): RenderGraphic | undefined { return undefined; } - /** @hidden */ + /** @internal */ public createSheetTilePolyfaces(_corners: Point3d[], _clip?: ClipVector): IndexedPolyface[] { return []; } - /** @hidden */ + /** @internal */ public createSheetTile(_tile: RenderTexture, _polyfaces: IndexedPolyface[], _tileColor: ColorDef): GraphicList { return []; } - /** @hidden */ + /** @internal */ public getClipVolume(_clipVector: ClipVector, _imodel: IModelConnection): RenderClipVolume | undefined { return undefined; } - /** @hidden */ + /** @internal */ public createTile(tileTexture: RenderTexture, corners: Point3d[]): RenderGraphic | undefined { const rasterTile = new MeshArgs(); @@ -872,9 +858,7 @@ export abstract class RenderSystem implements IDisposable { return this.createBranch(branch, transform); } - /** Create a Graphic for a sky box which encompasses the entire scene, rotating with the camera. See SkyBox.CreateParams. - * @hidden - */ + /** Create a Graphic for a [[SkyBox]] which encompasses the entire scene, rotating with the camera. */ public createSkyBox(_params: SkyBox.CreateParams): RenderGraphic | undefined { return undefined; } /** Create a RenderGraphic consisting of a list of Graphics to be drawn together. */ @@ -884,7 +868,7 @@ export abstract class RenderSystem implements IDisposable { public abstract createBranch(branch: GraphicBranch, transform: Transform, clips?: RenderClipVolume): RenderGraphic; /** Create a RenderGraphic consisting of batched [[Feature]]s. - * @hidden + * @internal */ public abstract createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d): RenderGraphic; @@ -962,18 +946,20 @@ export abstract class RenderSystem implements IDisposable { } /** Create a new texture from a cube of HTML images. - * @hidden + * @internal */ public createTextureFromCubeImages(_posX: HTMLImageElement, _negX: HTMLImageElement, _posY: HTMLImageElement, _negY: HTMLImageElement, _posZ: HTMLImageElement, _negZ: HTMLImageElement, _imodel: IModelConnection, _params: RenderTexture.Params): RenderTexture | undefined { return undefined; } - /** @hidden */ + /** @internal */ public onInitialized(): void { } - /** @hidden */ + /** @internal */ public enableDiagnostics(_enable: RenderDiagnostics): void { } } -/** Clip/Transform for a branch that are varied over time. */ +/** Clip/Transform for a branch that are varied over time. + * @internal + */ export class AnimationBranchState { public readonly omit?: boolean; public readonly transform?: Transform; @@ -981,5 +967,7 @@ export class AnimationBranchState { constructor(transform?: Transform, clip?: ClipPlanesVolume, omit?: boolean) { this.transform = transform; this.clip = clip; this.omit = omit; } } -/** Mapping from node/branch IDs to animation branch state */ +/** Mapping from node/branch IDs to animation branch state + * @internal + */ export type AnimationBranchStates = Map; diff --git a/core/frontend/src/render/webgl/ClipVolume.ts b/core/frontend/src/render/webgl/ClipVolume.ts index 75b1a67..bbe22e3 100644 --- a/core/frontend/src/render/webgl/ClipVolume.ts +++ b/core/frontend/src/render/webgl/ClipVolume.ts @@ -237,8 +237,8 @@ export class ClipMaskVolume extends RenderClipVolume implements RenderMemory.Con } else if (clippedPolygon.length > 4) { // Clipped polygon must be triangulated before appending - const triangulatedPolygonGraph = Triangulator.earcutSingleLoop(clippedPolygon); - Triangulator.cleanupTriangulation(triangulatedPolygonGraph); + const triangulatedPolygonGraph = Triangulator.createTriangulatedGraphFromSingleLoop(clippedPolygon); + Triangulator.flipTriangles(triangulatedPolygonGraph); polyfaceBuilder.addGraph(triangulatedPolygonGraph, false); } } diff --git a/core/frontend/src/render/webgl/InstancedGeometry.ts b/core/frontend/src/render/webgl/InstancedGeometry.ts index 23886ab..86fd069 100644 --- a/core/frontend/src/render/webgl/InstancedGeometry.ts +++ b/core/frontend/src/render/webgl/InstancedGeometry.ts @@ -15,6 +15,7 @@ export class InstancedGeometry extends CachedGeometry { public readonly numInstances: number; public readonly transforms: BufferHandle; public readonly featureIds?: BufferHandle; + public readonly symbology?: BufferHandle; private readonly _repr: LUTGeometry; private readonly _ownsRepr: boolean; @@ -44,31 +45,39 @@ export class InstancedGeometry extends CachedGeometry { public getLineWeight(params: ShaderProgramParams) { return this._repr.getLineWeight(params); } public static create(repr: LUTGeometry, ownsRepr: boolean, params: InstancedGraphicParams): InstancedGeometry | undefined { - const { count, transforms, featureIds } = params; + const { count, transforms, featureIds, symbologyOverrides } = params; + assert(count > 0 && Math.floor(count) === count); assert(count === transforms.length / 12); assert(undefined === featureIds || count === featureIds.length / 3); + assert(undefined === symbologyOverrides || count * 8 === symbologyOverrides.length); let idBuf: BufferHandle | undefined; if (undefined !== featureIds && undefined === (idBuf = BufferHandle.createArrayBuffer(featureIds))) return undefined; + let symBuf: BufferHandle | undefined; + if (undefined !== symbologyOverrides && undefined === (symBuf = BufferHandle.createArrayBuffer(symbologyOverrides))) + return undefined; + const tfBuf = BufferHandle.createArrayBuffer(transforms); - return undefined !== tfBuf ? new InstancedGeometry(repr, ownsRepr, count, tfBuf, idBuf) : undefined; + return undefined !== tfBuf ? new InstancedGeometry(repr, ownsRepr, count, tfBuf, symBuf, idBuf) : undefined; } - private constructor(repr: LUTGeometry, ownsRepr: boolean, count: number, transforms: BufferHandle, featureIds?: BufferHandle) { + private constructor(repr: LUTGeometry, ownsRepr: boolean, count: number, transforms: BufferHandle, symbology?: BufferHandle, featureIds?: BufferHandle) { super(); this._repr = repr; this._ownsRepr = ownsRepr; this.numInstances = count; this.transforms = transforms; this.featureIds = featureIds; + this.symbology = symbology; } public dispose() { dispose(this.transforms); dispose(this.featureIds); + dispose(this.symbology); if (this._ownsRepr) this._repr.dispose(); } @@ -88,7 +97,11 @@ export class InstancedGeometry extends CachedGeometry { public collectStatistics(stats: RenderMemory.Statistics) { this._repr.collectStatistics(stats); - const bytesUsed = this.transforms.bytesUsed + (undefined !== this.featureIds ? this.featureIds.bytesUsed : 0); + + const featureBytes = undefined !== this.featureIds ? this.featureIds.bytesUsed : 0; + const symBytes = undefined !== this.symbology ? this.symbology.bytesUsed : 0; + + const bytesUsed = this.transforms.bytesUsed + symBytes + featureBytes; stats.addInstances(bytesUsed); } } diff --git a/core/frontend/src/render/webgl/Mesh.ts b/core/frontend/src/render/webgl/Mesh.ts index 239a9f4..62f2edb 100644 --- a/core/frontend/src/render/webgl/Mesh.ts +++ b/core/frontend/src/render/webgl/Mesh.ts @@ -128,6 +128,7 @@ export abstract class MeshGeometry extends LUTGeometry { protected readonly _numIndices: number; public get asMesh() { return this; } + protected _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); } // Convenience accessors... public get edgeWidth() { return this.mesh.edgeWidth; } @@ -197,7 +198,6 @@ export class EdgeGeometry extends MeshGeometry { } protected _wantWoWReversal(_target: Target): boolean { return true; } - protected _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); } protected _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); } public getTechniqueId(_target: Target): TechniqueId { return TechniqueId.Edge; } public getRenderPass(target: Target): RenderPass { return this.computeEdgePass(target); } diff --git a/core/frontend/src/render/webgl/Primitive.ts b/core/frontend/src/render/webgl/Primitive.ts index 848f1f9..49ce590 100644 --- a/core/frontend/src/render/webgl/Primitive.ts +++ b/core/frontend/src/render/webgl/Primitive.ts @@ -23,26 +23,13 @@ export class Primitive extends Graphic { protected constructor(cachedGeom: CachedGeometry) { super(); this.cachedGeometry = cachedGeom; } - // ###TODO_INSTANCING: Remove me when feature complete... - private static _forceInstancing = false; - private static _fakeInstanceParams = { - transforms: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]), - featureIds: new Uint8Array([0, 0, 0]), - count: 1, - }; - public static create(createGeom: () => CachedGeometry | undefined, instances?: InstancedGraphicParams): Primitive | undefined { let geom = createGeom(); if (undefined === geom) return undefined; - const doInstancing = undefined !== instances || (this._forceInstancing && geom instanceof LUTGeometry); - assert(geom instanceof LUTGeometry || !doInstancing, "Invalid geometry type for instancing"); - if (doInstancing) { + if (undefined !== instances) { assert(geom instanceof LUTGeometry, "Invalid geometry type for instancing"); - if (undefined === instances) - instances = this._fakeInstanceParams; - geom = InstancedGeometry.create(geom as LUTGeometry, true, instances); } diff --git a/core/frontend/src/render/webgl/ShaderBuilder.ts b/core/frontend/src/render/webgl/ShaderBuilder.ts index dba314e..a16cc1d 100644 --- a/core/frontend/src/render/webgl/ShaderBuilder.ts +++ b/core/frontend/src/render/webgl/ShaderBuilder.ts @@ -4,13 +4,14 @@ *--------------------------------------------------------------------------------------------*/ /** @module WebGL */ +import { assert } from "@bentley/bentleyjs-core"; +import { ClippingType } from "../System"; import { ShaderProgram } from "./ShaderProgram"; -import { GLSLVertex, addPosition, addInstancedModelMatrix } from "./glsl/Vertex"; import { System } from "./System"; -import { addClipping } from "./glsl/Clipping"; import { ClipDef } from "./TechniqueFlags"; -import { ClippingType } from "../System"; -import { assert } from "@bentley/bentleyjs-core"; +import { GLSLVertex, addPosition } from "./glsl/Vertex"; +import { addInstancedModelMatrix } from "./glsl/Instancing"; +import { addClipping } from "./glsl/Clipping"; /** Describes the data type of a shader program variable. */ export const enum VariableType { diff --git a/core/frontend/src/render/webgl/System.ts b/core/frontend/src/render/webgl/System.ts index 7377b52..a49d1af 100644 --- a/core/frontend/src/render/webgl/System.ts +++ b/core/frontend/src/render/webgl/System.ts @@ -452,10 +452,16 @@ export class System extends RenderSystem { private readonly _textureBindings: TextureBinding[] = []; // NB: Increase the size of these arrays when the maximum number of attributes used by any one shader increases. - private readonly _curVertexAttribStates: VertexAttribState[] = [VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, - VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled]; - private readonly _nextVertexAttribStates: VertexAttribState[] = [VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, - VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled]; + private readonly _curVertexAttribStates: VertexAttribState[] = [ + VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, + VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, + VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, + ]; + private readonly _nextVertexAttribStates: VertexAttribState[] = [ + VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, + VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, + VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, + ]; // The following are initialized immediately after the System is constructed. private _lineCodeTexture?: TextureHandle; @@ -716,8 +722,8 @@ export class System extends RenderSystem { } else { // ### TODO: There are a lot of inefficiencies here (what if it is a simple convex polygon... we must adjust UV params ourselves afterwards, a PolyfaceVisitor....) // We are also assuming that when we use the polyface visitor, it will iterate over the points in order of the entire array - const triangulatedPolygon = Triangulator.earcutSingleLoop(polygon); - Triangulator.cleanupTriangulation(triangulatedPolygon); + const triangulatedPolygon = Triangulator.createTriangulatedGraphFromSingleLoop(polygon); + Triangulator.flipTriangles(triangulatedPolygon); triangulatedPolygon.announceFaceLoops((_graph: HalfEdgeGraph, edge: HalfEdge): boolean => { if (!edge.isMaskSet(HalfEdgeMask.EXTERIOR)) { @@ -808,11 +814,7 @@ export class System extends RenderSystem { // Ensure *something* is bound to suppress 'no texture assigned to unit x' warnings. public ensureSamplerBound(uniform: UniformHandle, unit: TextureUnit): void { - const index = unit - TextureUnit.Zero; - if (undefined === this._textureBindings[index]) - this.lineCodeTexture!.bindSampler(uniform, unit); - else - uniform.setUniform1i(index); // use whatever's already bound - it won't actually be sampled. + this.lineCodeTexture!.bindSampler(uniform, unit); } public disposeTexture(texture: WebGLTexture) { diff --git a/core/frontend/src/render/webgl/glsl/Color.ts b/core/frontend/src/render/webgl/glsl/Color.ts index 8b80872..3b3ea5e 100644 --- a/core/frontend/src/render/webgl/glsl/Color.ts +++ b/core/frontend/src/render/webgl/glsl/Color.ts @@ -5,16 +5,18 @@ /** @module Rendering */ import { + FragmentShaderComponent, ProgramBuilder, VariableType, - FragmentShaderComponent, + VertexShaderBuilder, } from "../ShaderBuilder"; import { GLSLFragment } from "./Fragment"; import { addRenderPass } from "./RenderPass"; +import { addInstanceColor } from "./Instancing"; // Vertex +// Color table is appended to vertex data. Compute the index of the vertex one-past-the-end of the vertex data const computeElementColor = ` - // Color table is appended to vertex data. Compute the index of the vertex one-past-the-end of the vertex data float colorTableStart = u_vertParams.z * u_vertParams.w; // num rgba per-vertex times num vertices float colorIndex = decodeUInt16(g_vertexData2); vec2 tc = computeLUTCoords(colorTableStart+colorIndex, u_vertParams.xy, g_vert_center, 1.0); @@ -23,15 +25,33 @@ const computeElementColor = ` const computeBaseAlpha = ` g_baseAlpha = color.a; `; +// If in opaque pass, un-premultiply any alpha const adjustAndReturnColor = ` - // If in opaque pass, un-premultiply any alpha float inOpaquePass = float(kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass); color = mix(color, adjustPreMultipliedAlpha(color, 1.0), inOpaquePass); return color; `; +const applyInstanceColor = ` + color.rgb /= max(0.0001, color.a); // revert pre-multiplied alpha + color.rgb = mix(color.rgb, a_instanceRgba.rgb / 255.0, extractInstanceBit(kOvrBit_Rgb)); + color.a = mix(color.a, a_instanceRgba.a / 255.0, extractInstanceBit(kOvrBit_Alpha)); + color.rgb *= color.a; // pre-multiply alpha +`; +const computeInstancedElementColor = computeElementColor + applyInstanceColor; const computeColor = computeElementColor + adjustAndReturnColor; +const computeInstancedColor = computeInstancedElementColor + adjustAndReturnColor; const computeSurfaceColor = computeElementColor + computeBaseAlpha + adjustAndReturnColor; +const computeInstancedSurfaceColor = computeInstancedElementColor + computeBaseAlpha + adjustAndReturnColor; + +function getComputeColor(vert: VertexShaderBuilder, forwardBaseAlpha: boolean): string { + if (vert.usesInstancedGeometry) { + addInstanceColor(vert); + return forwardBaseAlpha ? computeInstancedSurfaceColor : computeInstancedColor; + } else { + return forwardBaseAlpha ? computeSurfaceColor : computeColor; + } +} // Fragment const computeBaseColor = "return v_color;"; @@ -54,7 +74,7 @@ export function addColor(builder: ProgramBuilder, forwardBaseAlpha: boolean = fa builder.addGlobal("g_baseAlpha", VariableType.Float); addRenderPass(builder.vert); - builder.addFunctionComputedVarying("v_color", VariableType.Vec4, "computeColor", forwardBaseAlpha ? computeSurfaceColor : computeColor); + builder.addFunctionComputedVarying("v_color", VariableType.Vec4, "computeColor", getComputeColor(builder.vert, forwardBaseAlpha)); builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor); } diff --git a/core/frontend/src/render/webgl/glsl/Edge.ts b/core/frontend/src/render/webgl/glsl/Edge.ts index 1dc2159..92b00b1 100644 --- a/core/frontend/src/render/webgl/glsl/Edge.ts +++ b/core/frontend/src/render/webgl/glsl/Edge.ts @@ -10,7 +10,7 @@ import { VariableType, VertexShaderComponent, } from "../ShaderBuilder"; -import { addModelViewMatrix, addProjectionMatrix, GLSLVertex, addNormalMatrix } from "./Vertex"; +import { addModelViewMatrix, addProjectionMatrix, addLineWeight, addNormalMatrix } from "./Vertex"; import { addAnimation } from "./Animation"; import { addViewport, addModelToWindowCoordinates } from "./Viewport"; import { GL } from "../GL"; @@ -67,7 +67,7 @@ const computePosition = ` vec4 other = g_otherPos; vec3 modelDir = other.xyz - pos.xyz; float miterAdjust = 0.0; - float weight = ComputeLineWeight(); + float weight = computeLineWeight(); g_windowPos = modelToWindowCoordinates(rawPos, other); @@ -119,7 +119,6 @@ function createBase(isSilhouette: boolean, instanced: IsInstanced, isAnimated: I addProjectionMatrix(vert); addLineCode(builder, lineCodeArgs); vert.set(VertexShaderComponent.ComputePosition, computePosition); - vert.addFunction(GLSLVertex.computeLineWeight); builder.addVarying("v_lnInfo", VariableType.Vec4); vert.addFunction(adjustWidth); @@ -138,11 +137,7 @@ function createBase(isSilhouette: boolean, instanced: IsInstanced, isAnimated: I }); }); - vert.addUniform("u_lineWeight", VariableType.Float, (shaderProg) => { - shaderProg.addGraphicUniform("u_lineWeight", (attr, params) => { - attr.setUniform1f(params.geometry.getLineWeight(params.programParams)); - }); - }); + addLineWeight(vert); if (isSilhouette) { addNormalMatrix(vert); diff --git a/core/frontend/src/render/webgl/glsl/FeatureSymbology.ts b/core/frontend/src/render/webgl/glsl/FeatureSymbology.ts index 05d942e..8cfc090 100644 --- a/core/frontend/src/render/webgl/glsl/FeatureSymbology.ts +++ b/core/frontend/src/render/webgl/glsl/FeatureSymbology.ts @@ -18,7 +18,7 @@ import { Hilite } from "@bentley/imodeljs-common"; import { TextureUnit, OvrFlags } from "../RenderFlags"; import { FloatRgba } from "../FloatRGBA"; import { FeatureMode } from "../TechniqueFlags"; -import { GLSLVertex, addAlpha } from "./Vertex"; +import { addLineWeight, replaceLineWeight, replaceLineCode, addAlpha } from "./Vertex"; import { GLSLFragment, addWindowToTexCoords } from "./Fragment"; import { GLSLCommon, addEyeSpace, addUInt32s } from "./Common"; import { GLSLDecode } from "./Decode"; @@ -42,7 +42,7 @@ export const enum FeatureSymbologyOptions { Linear = HasOverrides | Color | Weight | LineCode | Alpha, } -function addFlagConstants(builder: ShaderBuilder): void { +export function addOvrFlagConstants(builder: ShaderBuilder): void { // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values builder.addConstant("kOvrBit_Visibility", VariableType.Float, "0.0"); builder.addConstant("kOvrBit_Rgb", VariableType.Float, "1.0"); @@ -94,14 +94,14 @@ vec4 getSecondFeatureRgba() { `; const computeLineWeight = ` -float ComputeLineWeight() { - return mix(u_lineWeight, linear_feature_overrides.y, linear_feature_overrides.x); +float computeLineWeight() { + return mix(g_lineWeight, linear_feature_overrides.y, linear_feature_overrides.x); } `; const computeLineCode = ` -float ComputeLineCode() { - return mix(u_lineCode, linear_feature_overrides.w, linear_feature_overrides.z); +float computeLineCode() { + return mix(g_lineCode, linear_feature_overrides.w, linear_feature_overrides.z); } `; @@ -163,7 +163,7 @@ function addCommon(builder: ProgramBuilder, mode: FeatureMode, opts: FeatureSymb vert.addGlobal("feature_invisible", VariableType.Boolean, "false"); vert.addFunction(GLSLCommon.extractNthBit); - addFlagConstants(vert); + addOvrFlagConstants(vert); vert.addGlobal("linear_feature_overrides", VariableType.Vec4, "vec4(0.0)"); vert.addGlobal("feature_ignore_material", VariableType.Boolean, "false"); @@ -171,10 +171,10 @@ function addCommon(builder: ProgramBuilder, mode: FeatureMode, opts: FeatureSymb vert.addFunction(extractNthFeatureBit); if (wantWeight || wantLineCode) { if (wantLineCode) - vert.replaceFunction(GLSLVertex.computeLineCode, computeLineCode); + replaceLineCode(vert, computeLineCode); if (wantWeight) { - vert.replaceFunction(GLSLVertex.computeLineWeight, computeLineWeight); + replaceLineWeight(vert, computeLineWeight); vert.addUniform("u_globalOvrFlags", VariableType.Float, (prog) => { prog.addGraphicUniform("u_globalOvrFlags", (uniform, params) => { let flags = 0.0; @@ -393,16 +393,6 @@ const checkForEarlySurfaceDiscardWithFeatureID = ` return alwaysDiscard || (!neverDiscard && discardByOrder && withinDepthTolerance && (isSameFeature || ((depthAndOrder.x > kRenderOrder_PlanarSurface) || ((depthAndOrder.x == kRenderOrder_PlanarSurface) && (depthDelta <= 4.0e-5))))); `; -function addEdgeWidth(builder: ShaderBuilder) { - builder.addUniform("u_lineWeight", VariableType.Float, (prog) => { - prog.addGraphicUniform("u_lineWeight", (uniform, params) => { - const mesh = params.geometry.asSurface!; - const width = params.target.getEdgeWeight(params.programParams, mesh.edgeWidth); - uniform.setUniform1f(width < 1.0 ? 1.0 : width); - }); - }); -} - export const computeFeatureId = `v_feature_id = addUInt32s(u_batch_id, g_featureIndex) / 255.0;`; function addRenderOrderConstants(builder: ShaderBuilder) { @@ -514,8 +504,7 @@ export function addSurfaceDiscard(builder: ProgramBuilder, feat: FeatureMode) { frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscard); } else { addFeatureIndex(vert); - addEdgeWidth(vert); - vert.addFunction(GLSLVertex.computeLineWeight); + addLineWeight(vert); addSamplers(frag, true); addRenderOrderConstants(frag); @@ -526,7 +515,7 @@ export function addSurfaceDiscard(builder: ProgramBuilder, feat: FeatureMode) { frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscardWithFeatureID); addEyeSpace(builder); - builder.addInlineComputedVarying("v_lineWeight", VariableType.Float, "v_lineWeight = ComputeLineWeight();"); + builder.addInlineComputedVarying("v_lineWeight", VariableType.Float, "v_lineWeight = computeLineWeight();"); addFeatureId(builder); } diff --git a/core/frontend/src/render/webgl/glsl/Instancing.ts b/core/frontend/src/render/webgl/glsl/Instancing.ts new file mode 100644 index 0000000..37e71d2 --- /dev/null +++ b/core/frontend/src/render/webgl/glsl/Instancing.ts @@ -0,0 +1,94 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module WebGL */ + +import { assert } from "@bentley/bentleyjs-core"; +import { GL } from "../GL"; +import { VertexShaderBuilder, VariableType } from "../ShaderBuilder"; +import { addOvrFlagConstants } from "./FeatureSymbology"; +import { GLSLCommon } from "./Common"; + +const extractInstanceBit = ` + float extractInstanceBit(float flag) { return extractNthBit(a_instanceOverrides.r, flag); } +`; + +const computeInstancedModelMatrix = ` + mat4 instanceMatrix = mat4( + a_instanceMatrixRow0.x, a_instanceMatrixRow1.x, a_instanceMatrixRow2.x, 0.0, + a_instanceMatrixRow0.y, a_instanceMatrixRow1.y, a_instanceMatrixRow2.y, 0.0, + a_instanceMatrixRow0.z, a_instanceMatrixRow1.z, a_instanceMatrixRow2.z, 0.0, + a_instanceMatrixRow0.w, a_instanceMatrixRow1.w, a_instanceMatrixRow2.w, 1.0); + g_modelMatrix = instanceMatrix * u_rootModelMatrix; +`; + +function addInstanceMatrixRow(vert: VertexShaderBuilder, row: number) { + // 3 rows per instance; 4 floats per row; 4 bytes per float. + const floatsPerRow = 4; + const bytesPerVertex = floatsPerRow * 4; + const offset = row * bytesPerVertex; + const stride = 3 * bytesPerVertex; + const name = "a_instanceMatrixRow" + row; + vert.addAttribute(name, VariableType.Vec4, (prog) => { + prog.addAttribute(name, (attr, params) => { + const geom = params.geometry.asInstanced!; + assert(undefined !== geom); + attr.enableArray(geom.transforms, floatsPerRow, GL.DataType.Float, false, stride, offset, true); + }); + }); +} + +export function addInstancedModelMatrix(vert: VertexShaderBuilder) { + assert(vert.usesInstancedGeometry); + + // ###TODO_INSTANCING: We can make this more efficient, reduce amount of data sent as uniforms and attributes, and reduce computation on the GPU. + // Get it working the straightforward way first. + vert.addUniform("u_rootModelMatrix", VariableType.Mat4, (prog) => { + // ###TODO_INSTANCING: We only need 3 rows, not 4... + prog.addGraphicUniform("u_rootModelMatrix", (uniform, params) => { + uniform.setMatrix4(params.modelMatrix); + }); + }); + + addInstanceMatrixRow(vert, 0); + addInstanceMatrixRow(vert, 1); + addInstanceMatrixRow(vert, 2); + + vert.addGlobal("g_modelMatrix", VariableType.Mat4); + vert.addInitializer(computeInstancedModelMatrix); +} + +export function addInstanceOverrides(vert: VertexShaderBuilder): void { + if (undefined !== vert.find("a_instanceOverrides")) + return; + + addOvrFlagConstants(vert); + + vert.addFunction(GLSLCommon.extractNthBit); + vert.addFunction(extractInstanceBit); + + vert.addAttribute("a_instanceOverrides", VariableType.Vec4, (prog) => { + prog.addAttribute("a_instanceOverrides", (attr, params) => { + const geom = params.geometry.asInstanced!; + assert(undefined !== geom); + + // NB: If none defined, attribute access returns constant values. + // This is *context* state. Apparently it defaults to (0, 0, 0, 1). Which is fine for us since r=0 means nothing overridden. + if (undefined !== geom.symbology) + attr.enableArray(geom.symbology, 4, GL.DataType.UnsignedByte, false, 8, 0, true); + }); + }); +} + +export function addInstanceColor(vert: VertexShaderBuilder): void { + addInstanceOverrides(vert); + + vert.addAttribute("a_instanceRgba", VariableType.Vec4, (prog) => { + prog.addAttribute("a_instanceRgba", (attr, params) => { + const geom = params.geometry.asInstanced!; + if (undefined !== geom.symbology) + attr.enableArray(geom.symbology, 4, GL.DataType.UnsignedByte, false, 8, 4, true); + }); + }); +} diff --git a/core/frontend/src/render/webgl/glsl/PointString.ts b/core/frontend/src/render/webgl/glsl/PointString.ts index 715d9f0..ab359be 100644 --- a/core/frontend/src/render/webgl/glsl/PointString.ts +++ b/core/frontend/src/render/webgl/glsl/PointString.ts @@ -5,7 +5,7 @@ /** @module WebGL */ import { addHiliter } from "./FeatureSymbology"; -import { addModelViewProjectionMatrix, GLSLVertex } from "./Vertex"; +import { addModelViewProjectionMatrix, addLineWeight } from "./Vertex"; import { addShaderFlags } from "./Common"; import { addColor } from "./Color"; import { addWhiteOnWhiteReversal } from "./Fragment"; @@ -13,7 +13,7 @@ import { ShaderBuilderFlags, ProgramBuilder, VertexShaderComponent, VariableType import { IsInstanced } from "../TechniqueFlags"; const computePosition = ` - float lineWeight = ComputeLineWeight(); + float lineWeight = computeLineWeight(); lineWeight += 0.5 * float(lineWeight > 4.0); // fudge factor for rounding fat points... gl_PointSize = lineWeight; return MAT_MVP * rawPos; @@ -37,12 +37,7 @@ function createBase(instanced: IsInstanced): ProgramBuilder { vert.set(VertexShaderComponent.ComputePosition, computePosition); addModelViewProjectionMatrix(vert); - vert.addFunction(GLSLVertex.computeLineWeight); - vert.addUniform("u_lineWeight", VariableType.Float, (prog) => { - prog.addGraphicUniform("u_lineWeight", (uniform, params) => { - uniform.setUniform1f(params.geometry.getLineWeight(params.programParams)); - }); - }); + addLineWeight(vert); builder.addInlineComputedVarying("v_roundCorners", VariableType.Float, computeRoundCorners); builder.frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundCorners); diff --git a/core/frontend/src/render/webgl/glsl/Polyline.ts b/core/frontend/src/render/webgl/glsl/Polyline.ts index d596934..bd6306d 100644 --- a/core/frontend/src/render/webgl/glsl/Polyline.ts +++ b/core/frontend/src/render/webgl/glsl/Polyline.ts @@ -12,7 +12,12 @@ import { VertexShaderComponent, FragmentShaderBuilder, } from "../ShaderBuilder"; -import { addModelViewMatrix, addProjectionMatrix, GLSLVertex } from "./Vertex"; +import { + addModelViewMatrix, + addProjectionMatrix, + addLineWeight, + addLineCode as addLineCodeUniform, +} from "./Vertex"; import { addFrustum, addShaderFlags } from "./Common"; import { addViewport, addModelToWindowCoordinates } from "./Viewport"; import { GL } from "../GL"; @@ -51,7 +56,7 @@ const applyLineCode = ` const computeTextureCoord = ` vec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) { vec2 texc; - float lineCode = ComputeLineCode(); + float lineCode = computeLineCode(); if (0.0 == lineCode) { // Solid line - tell frag shader not to bother. texc = vec2(-1.0, -1.0); @@ -140,13 +145,7 @@ export function addLineCode(prog: ProgramBuilder, args: string) { const vert = prog.vert; const frag = prog.frag; - vert.addUniform("u_lineCode", VariableType.Float, (shaderProg) => { - shaderProg.addGraphicUniform("u_lineCode", (uniform, params) => { - uniform.setUniform1f(params.geometry.getLineCode(params.programParams)); - }); - }); - - vert.addFunction(GLSLVertex.computeLineCode); + addLineCodeUniform(vert); const funcCall: string = "computeLineCodeTextureCoords(" + args + ")"; @@ -170,7 +169,6 @@ function addCommon(prog: ProgramBuilder) { addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation addProjectionMatrix(vert); addModelViewMatrix(vert); - vert.addFunction(GLSLVertex.computeLineWeight); addViewport(vert); vert.addGlobal("g_windowPos", VariableType.Vec4); @@ -204,11 +202,8 @@ function addCommon(prog: ProgramBuilder) { attr.enableArray(buffs.nextIndicesAndParams, 1, GL.DataType.UnsignedByte, false, 4, 3); }); }); - vert.addUniform("u_lineWeight", VariableType.Float, (shaderProg) => { - shaderProg.addGraphicUniform("u_lineWeight", (attr, params) => { - attr.setUniform1f(params.geometry.getLineWeight(params.programParams)); - }); - }); + + addLineWeight(vert); vert.addGlobal("miterAdjust", VariableType.Float, "0.0"); vert.set(VertexShaderComponent.ComputePosition, computePosition); @@ -260,7 +255,7 @@ const computePosition = ` return g_windowPos; float param = a_param; - float weight = ComputeLineWeight(); + float weight = computeLineWeight(); float scale = 1.0, directionScale = 1.0; if (param >= kNoneAdjWt) diff --git a/core/frontend/src/render/webgl/glsl/SkySphere.ts b/core/frontend/src/render/webgl/glsl/SkySphere.ts index 6d66b5d..cb69e56 100644 --- a/core/frontend/src/render/webgl/glsl/SkySphere.ts +++ b/core/frontend/src/render/webgl/glsl/SkySphere.ts @@ -10,7 +10,7 @@ import { GLSLFragment } from "./Fragment"; import { createViewportQuadBuilder } from "./ViewportQuad"; import { FrustumUniformType, fromSumOf } from "../Target"; import { Frustum, Npc } from "@bentley/imodeljs-common"; -import { Vector3d, Point3d, Angle} from "@bentley/geometry-core"; +import { Vector3d, Point3d, Angle } from "@bentley/geometry-core"; import { SkySphereViewportQuadGeometry } from "../CachedGeometry"; import { GL } from "../GL"; import { Texture } from "../Texture"; diff --git a/core/frontend/src/render/webgl/glsl/Vertex.ts b/core/frontend/src/render/webgl/glsl/Vertex.ts index 7a6c964..d33ad11 100644 --- a/core/frontend/src/render/webgl/glsl/Vertex.ts +++ b/core/frontend/src/render/webgl/glsl/Vertex.ts @@ -8,9 +8,9 @@ import { assert } from "@bentley/bentleyjs-core"; import { VertexShaderBuilder, VariableType } from "../ShaderBuilder"; import { Matrix3, Matrix4 } from "../Matrix"; import { TextureUnit, RenderPass } from "../RenderFlags"; -import { GL } from "../GL"; import { GLSLDecode } from "./Decode"; import { addLookupTable } from "./LookupTable"; +import { addInstanceOverrides } from "./Instancing"; const initializeVertLUTCoords = ` g_vertexLUTIndex = decodeUInt32(a_pos); @@ -25,9 +25,9 @@ const unquantizeVertexPosition = ` vec4 unquantizeVertexPosition(vec3 pos, vec3 origin, vec3 scale) { return unquantizePosition(pos, origin, scale); } `; +// Need to read 2 rgba values to obtain 6 16-bit integers for position const unquantizeVertexPositionFromLUTPrelude = ` vec4 unquantizeVertexPosition(vec3 encodedIndex, vec3 origin, vec3 scale) { - // Need to read 2 rgba values to obtain 6 16-bit integers for position vec2 tc = g_vertexBaseCoords; vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5); tc.x += g_vert_stepX; @@ -44,6 +44,9 @@ const unquantizeVertexPositionFromLUTPostlude = ` } `; +const computeLineWeight = "\nfloat computeLineWeight() { return g_lineWeight; }\n"; +const computeLineCode = "\nfloat computeLineCode() { return g_lineCode; }\n"; + const scratchMVPMatrix = new Matrix4(); export function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void { @@ -107,49 +110,6 @@ export function addNormalMatrix(vert: VertexShaderBuilder) { } } -function addInstanceMatrixRow(vert: VertexShaderBuilder, row: number) { - // 3 rows per instance; 4 floats per row; 4 bytes per float. - const floatsPerRow = 4; - const bytesPerVertex = floatsPerRow * 4; - const offset = row * bytesPerVertex; - const stride = 3 * bytesPerVertex; - const name = "a_instanceMatrixRow" + row; - vert.addAttribute(name, VariableType.Vec4, (prog) => { - prog.addAttribute(name, (attr, params) => { - const geom = params.geometry.asInstanced!; - assert(undefined !== geom); - attr.enableArray(geom.transforms, floatsPerRow, GL.DataType.Float, false, stride, offset, true); - }); - }); -} - -const computeInstancedModelMatrix = ` - mat4 instanceMatrix = mat4( - a_instanceMatrixRow0.x, a_instanceMatrixRow1.x, a_instanceMatrixRow2.x, 0.0, - a_instanceMatrixRow0.y, a_instanceMatrixRow1.y, a_instanceMatrixRow2.y, 0.0, - a_instanceMatrixRow0.z, a_instanceMatrixRow1.z, a_instanceMatrixRow2.z, 0.0, - a_instanceMatrixRow0.w, a_instanceMatrixRow1.w, a_instanceMatrixRow2.w, 1.0); - g_modelMatrix = instanceMatrix * u_rootModelMatrix; -`; - -export function addInstancedModelMatrix(vert: VertexShaderBuilder) { - // ###TODO_INSTANCING: We can make this more efficient, reduce amount of data sent as uniforms and attributes, and reduce computation on the GPU. - // Get it working the straightforward way first. - vert.addUniform("u_rootModelMatrix", VariableType.Mat4, (prog) => { - // ###TODO_INSTANCING: We only need 3 rows, not 4... - prog.addGraphicUniform("u_rootModelMatrix", (uniform, params) => { - uniform.setMatrix4(params.modelMatrix); - }); - }); - - addInstanceMatrixRow(vert, 0); - addInstanceMatrixRow(vert, 1); - addInstanceMatrixRow(vert, 2); - - vert.addGlobal("g_modelMatrix", VariableType.Mat4); - vert.addInitializer(computeInstancedModelMatrix); -} - const scratchLutParams = new Float32Array(4); function addPositionFromLUT(vert: VertexShaderBuilder) { vert.addGlobal("g_vertexLUTIndex", VariableType.Float); @@ -220,6 +180,50 @@ export function addAlpha(vert: VertexShaderBuilder): void { }); } +export function addLineWeight(vert: VertexShaderBuilder): void { + vert.addUniform("u_lineWeight", VariableType.Float, (prog) => { + prog.addGraphicUniform("u_lineWeight", (attr, params) => { + attr.setUniform1f(params.geometry.getLineWeight(params.programParams)); + }); + }); + + vert.addGlobal("g_lineWeight", VariableType.Float); + if (vert.usesInstancedGeometry) { + addInstanceOverrides(vert); + vert.addInitializer("g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));"); + } else { + vert.addInitializer("g_lineWeight = u_lineWeight;"); + } + + vert.addFunction(computeLineWeight); +} + +export function replaceLineWeight(vert: VertexShaderBuilder, func: string): void { + vert.replaceFunction(computeLineWeight, func); +} + +export function addLineCode(vert: VertexShaderBuilder): void { + vert.addUniform("u_lineCode", VariableType.Float, (prog) => { + prog.addGraphicUniform("u_lineCode", (attr, params) => { + attr.setUniform1f(params.geometry.getLineCode(params.programParams)); + }); + }); + + vert.addGlobal("g_lineCode", VariableType.Float); + if (vert.usesInstancedGeometry) { + addInstanceOverrides(vert); + vert.addInitializer("g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));"); + } else { + vert.addInitializer("g_lineCode = u_lineCode;"); + } + + vert.addFunction(computeLineCode); +} + +export function replaceLineCode(vert: VertexShaderBuilder, func: string): void { + vert.replaceFunction(computeLineCode, func); +} + export namespace GLSLVertex { // This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle. // Also place it outside NDC range (for GL_POINTS) @@ -233,7 +237,4 @@ export namespace GLSLVertex { export const earlyDiscard = ` if (checkForEarlyDiscard(rawPosition))` + discardVertex; export const discard = ` if (checkForDiscard())` + discardVertex; export const lateDiscard = ` if (checkForLateDiscard())` + discardVertex; - - export const computeLineWeight = "\nfloat ComputeLineWeight() { return u_lineWeight; }\n"; - export const computeLineCode = "\nfloat ComputeLineCode() { return u_lineCode; }\n"; } diff --git a/test-apps/testbed/frontend/FrameBuffer.test.ts b/core/frontend/src/test/FrameBuffer.test.ts similarity index 95% rename from test-apps/testbed/frontend/FrameBuffer.test.ts rename to core/frontend/src/test/FrameBuffer.test.ts index f155df3..a0e8e07 100644 --- a/test-apps/testbed/frontend/FrameBuffer.test.ts +++ b/core/frontend/src/test/FrameBuffer.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { IModelApp } from "@bentley/imodeljs-frontend"; -import { Capabilities, System, RenderBuffer, TextureHandle, FrameBuffer, GL, Debug } from "@bentley/imodeljs-frontend/lib/webgl"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; +import { IModelApp } from "../IModelApp"; +import { Capabilities, System, RenderBuffer, TextureHandle, FrameBuffer, GL, Debug } from "../webgl"; describe("FrameBuffer tests", () => { before(() => WebGLTestContext.startup()); diff --git a/test-apps/testbed/frontend/Handle.test.ts b/core/frontend/src/test/Handle.test.ts similarity index 86% rename from test-apps/testbed/frontend/Handle.test.ts rename to core/frontend/src/test/Handle.test.ts index df75923..5b2485d 100644 --- a/test-apps/testbed/frontend/Handle.test.ts +++ b/core/frontend/src/test/Handle.test.ts @@ -3,9 +3,10 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { expect } from "chai"; -import { GL, BufferHandle } from "@bentley/imodeljs-frontend/lib/webgl"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { IModelApp } from "@bentley/imodeljs-frontend"; +import { GL } from "../render/webgl/GL"; +import { BufferHandle } from "../render/webgl/Handle"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; +import { IModelApp } from "../IModelApp"; describe("Handles", () => { before(() => WebGLTestContext.startup()); diff --git a/test-apps/testbed/frontend/IModelApp.test.ts b/core/frontend/src/test/IModelApp.test.ts similarity index 94% rename from test-apps/testbed/frontend/IModelApp.test.ts rename to core/frontend/src/test/IModelApp.test.ts index e0fcd36..11fb930 100644 --- a/test-apps/testbed/frontend/IModelApp.test.ts +++ b/core/frontend/src/test/IModelApp.test.ts @@ -3,10 +3,15 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { assert, expect } from "chai"; -import { IModelApp, MockRender, Tool, AccuDraw, IdleTool, RotateViewTool, PanViewTool, SelectionTool } from "@bentley/imodeljs-frontend"; +import { AccuDraw } from "../AccuDraw"; +import { Tool } from "../tools/Tool"; +import { IdleTool } from "../tools/IdleTool"; +import { SelectionTool } from "../tools/SelectTool"; +import { RotateViewTool, PanViewTool } from "../tools/ViewTool"; +import { MockRender } from "../render/MockRender"; +import { IModelApp } from "../IModelApp"; import { I18NNamespace } from "@bentley/imodeljs-i18n"; -import { TestbedConfig } from "../common/TestbedConfig"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; /** class to simulate overriding the default AccuDraw */ class TestAccuDraw extends AccuDraw { } @@ -63,7 +68,7 @@ class TestApp extends MockRender.App { IModelApp.features.setGate("feature5.val.doNot", false); } - protected static supplyI18NOptions() { return { urlTemplate: `${TestbedConfig.localServerUrlPrefix}/locales/{{lng}}/{{ns}}.json` }; } + protected static supplyI18NOptions() { return { urlTemplate: `${window.location.origin}/locales/{{lng}}/{{ns}}.json` }; } } describe("IModelApp", () => { diff --git a/test-apps/testbed/frontend/MockRender.ts b/core/frontend/src/test/MockRender.test.ts similarity index 86% rename from test-apps/testbed/frontend/MockRender.ts rename to core/frontend/src/test/MockRender.test.ts index 3b3bfd1..0e93fcd 100644 --- a/test-apps/testbed/frontend/MockRender.ts +++ b/core/frontend/src/test/MockRender.test.ts @@ -1,36 +1,33 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -import { - IModelApp, - ViewRect, - RenderGraphic, - MockRender, - RenderTarget, -} from "@bentley/imodeljs-frontend"; -import { expect } from "chai"; - -class MyTarget extends MockRender.OffScreenTarget { } -class MyList extends MockRender.List { } -class MySystem extends MockRender.System { - public createOffscreenTarget(rect: ViewRect): RenderTarget { return new MyTarget(this, rect); } - public createGraphicList(list: RenderGraphic[]) { return new MyList(list); } -} - -describe("MockRender", () => { - before(() => { - MockRender.App.systemFactory = () => new MySystem(); - MockRender.App.startup(); - }); - - after(() => MockRender.App.shutdown()); - - it("Should override mock render system", () => { - expect(IModelApp.hasRenderSystem).to.be.true; - expect(IModelApp.renderSystem).instanceof(MySystem); - expect(IModelApp.renderSystem.createOffscreenTarget(new ViewRect(0, 0, 10, 20))).instanceof(MyTarget); - expect(IModelApp.renderSystem.createGraphicList([])).instanceof(MyList); - }); -}); +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import { expect } from "chai"; +import { IModelApp } from "../IModelApp"; +import { ViewRect } from "../Viewport"; +import { RenderGraphic, RenderTarget } from "../render/System"; +import { MockRender } from "../render/MockRender"; + +class MyTarget extends MockRender.OffScreenTarget { } +class MyList extends MockRender.List { } +class MySystem extends MockRender.System { + public createOffscreenTarget(rect: ViewRect): RenderTarget { return new MyTarget(this, rect); } + public createGraphicList(list: RenderGraphic[]) { return new MyList(list); } +} + +describe("MockRender", () => { + before(() => { + MockRender.App.systemFactory = () => new MySystem(); + MockRender.App.startup(); + }); + + after(() => MockRender.App.shutdown()); + + it("Should override mock render system", () => { + expect(IModelApp.hasRenderSystem).to.be.true; + expect(IModelApp.renderSystem).instanceof(MySystem); + expect(IModelApp.renderSystem.createOffscreenTarget(new ViewRect(0, 0, 10, 20))).instanceof(MyTarget); + expect(IModelApp.renderSystem.createGraphicList([])).instanceof(MyList); + }); +}); diff --git a/test-apps/testbed/frontend/RenderFlags.test.ts b/core/frontend/src/test/RenderFlags.test.ts similarity index 94% rename from test-apps/testbed/frontend/RenderFlags.test.ts rename to core/frontend/src/test/RenderFlags.test.ts index 6dad393..1434e37 100644 --- a/test-apps/testbed/frontend/RenderFlags.test.ts +++ b/core/frontend/src/test/RenderFlags.test.ts @@ -3,7 +3,9 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { assert } from "chai"; -import { RenderOrder, isPlanar, isSurface } from "@bentley/imodeljs-frontend/lib/webgl"; + +// Implicit dependency on WebGLRenderingContext +import { RenderOrder, isPlanar, isSurface } from "../render/webgl/RenderFlags"; describe("RenderFlags", () => { it("isPlanar should return true if given RenderOrder is greater than or equal to PlanarBit", () => { diff --git a/test-apps/testbed/frontend/RenderState.test.ts b/core/frontend/src/test/RenderState.test.ts similarity index 98% rename from test-apps/testbed/frontend/RenderState.test.ts rename to core/frontend/src/test/RenderState.test.ts index 46758ea..482399c 100644 --- a/test-apps/testbed/frontend/RenderState.test.ts +++ b/core/frontend/src/test/RenderState.test.ts @@ -4,9 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { assert } from "chai"; -import { GL, RenderState, System, DepthType } from "@bentley/imodeljs-frontend/lib/webgl"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { IModelApp } from "@bentley/imodeljs-frontend"; +import { GL } from "../render/webgl/GL"; +import { RenderState } from "../render/webgl/RenderState"; +import { System, DepthType } from "../render/webgl/System"; +import { IModelApp } from "../IModelApp"; + +import { WebGLTestContext } from "./utils/WebGLTestContext"; function withinTolerance(x: number, y: number): boolean { const tol: number = 0.1e-6; diff --git a/test-apps/testbed/frontend/ShaderBuilder.test.ts b/core/frontend/src/test/ShaderBuilder.test.ts similarity index 96% rename from test-apps/testbed/frontend/ShaderBuilder.test.ts rename to core/frontend/src/test/ShaderBuilder.test.ts index 19a7b9c..4dbb99f 100644 --- a/test-apps/testbed/frontend/ShaderBuilder.test.ts +++ b/core/frontend/src/test/ShaderBuilder.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { IModelApp } from "@bentley/imodeljs-frontend"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; +import { IModelApp } from "../IModelApp"; import { System, VariableType, @@ -17,7 +17,7 @@ import { ProgramBuilder, VertexShaderComponent, FragmentShaderComponent, -} from "@bentley/imodeljs-frontend/lib/webgl"; +} from "../webgl"; describe("Variable declaration tests", () => { it("should convert ShaderVariable to glsl declaration", () => { diff --git a/test-apps/testbed/frontend/System.test.ts b/core/frontend/src/test/System.test.ts similarity index 95% rename from test-apps/testbed/frontend/System.test.ts rename to core/frontend/src/test/System.test.ts index 1461510..c8cc4e1 100644 --- a/test-apps/testbed/frontend/System.test.ts +++ b/core/frontend/src/test/System.test.ts @@ -3,8 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { expect } from "chai"; -import { Capabilities, RenderType, DepthType } from "@bentley/imodeljs-frontend/lib/webgl"; -// import { WebGLTestContext } from "./WebGLTestContext"; +import { Capabilities, RenderType, DepthType } from "../webgl"; describe("System WebGL Capabilities", () => { it("capabilities should all default to 0 or false", () => { diff --git a/test-apps/testbed/frontend/Target.test.ts b/core/frontend/src/test/Target.test.ts similarity index 98% rename from test-apps/testbed/frontend/Target.test.ts rename to core/frontend/src/test/Target.test.ts index 1401206..d623a7b 100644 --- a/test-apps/testbed/frontend/Target.test.ts +++ b/core/frontend/src/test/Target.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { assert, expect } from "chai"; -import { FrustumUniforms, FrustumUniformType, ClipPlanesVolume, Clips } from "@bentley/imodeljs-frontend/lib/webgl"; +import { FrustumUniforms, FrustumUniformType, ClipPlanesVolume, Clips } from "../webgl"; import { ClipVector, ClipShape, Point3d } from "@bentley/geometry-core"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; describe("FrustumUniforms", () => { it("should create, store, and retrieve FrustumUniforms", () => { diff --git a/test-apps/testbed/frontend/Technique.test.ts b/core/frontend/src/test/Technique.test.ts similarity index 95% rename from test-apps/testbed/frontend/Technique.test.ts rename to core/frontend/src/test/Technique.test.ts index a533afd..0a5fd5f 100644 --- a/test-apps/testbed/frontend/Technique.test.ts +++ b/core/frontend/src/test/Technique.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { ClippingType } from "@bentley/imodeljs-frontend/lib/rendering"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; +import { ClippingType } from "../render/System"; import { ProgramBuilder, VertexShaderComponent, @@ -18,7 +18,7 @@ import { ViewportQuadGeometry, DrawParams, ShaderProgramParams, -} from "@bentley/imodeljs-frontend/lib/webgl"; +} from "../webgl"; function createPurpleQuadTechnique(target: Target): TechniqueId { const builder = new ProgramBuilder(); diff --git a/test-apps/testbed/frontend/Texture.test.ts b/core/frontend/src/test/Texture.test.ts similarity index 97% rename from test-apps/testbed/frontend/Texture.test.ts rename to core/frontend/src/test/Texture.test.ts index d2ebf06..c6d31e0 100644 --- a/test-apps/testbed/frontend/Texture.test.ts +++ b/core/frontend/src/test/Texture.test.ts @@ -4,15 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "./utils/WebGLTestContext"; +import { IModelApp } from "../IModelApp"; import { - IModelApp, imageElementFromImageSource, extractImageSourceDimensions, imageBufferToPngDataUrl, imageElementFromUrl, -} from "@bentley/imodeljs-frontend"; -import { TextureHandle, GL } from "@bentley/imodeljs-frontend/lib/webgl"; +} from "../ImageUtil"; +import { TextureHandle } from "../render/webgl/Texture"; +import { GL } from "../render/webgl/GL"; import { ImageBuffer, ImageBufferFormat, diff --git a/test-apps/testbed/frontend/ToolRegistry.test.ts b/core/frontend/src/test/ToolRegistry.test.ts similarity index 99% rename from test-apps/testbed/frontend/ToolRegistry.test.ts rename to core/frontend/src/test/ToolRegistry.test.ts index d320043..b7df4f4 100644 --- a/test-apps/testbed/frontend/ToolRegistry.test.ts +++ b/core/frontend/src/test/ToolRegistry.test.ts @@ -3,9 +3,11 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { assert } from "chai"; -import { MockRender, IModelApp, Tool, FuzzySearchResults, FuzzySearchResult } from "@bentley/imodeljs-frontend"; import { I18NNamespace } from "@bentley/imodeljs-i18n"; -import { TestbedConfig } from "../common/TestbedConfig"; +import { FuzzySearchResult, FuzzySearchResults } from "../FuzzySearch"; +import { IModelApp } from "../IModelApp"; +import { MockRender } from "../render/MockRender"; +import { Tool } from "../tools/Tool"; // these are later set by executing the TestImmediate tool. let testVal1: string; @@ -31,7 +33,7 @@ class TestCommandApp extends MockRender.App { TestImmediate.register(this.testNamespace); } - protected static supplyI18NOptions() { return { urlTemplate: `${TestbedConfig.localServerUrlPrefix}/locales/{{lng}}/{{ns}}.json` }; } + protected static supplyI18NOptions() { return { urlTemplate: `${window.location.origin}/locales/{{lng}}/{{ns}}.json` }; } } async function setupToolRegistryTests() { diff --git a/test-apps/testbed/frontend/VertexTable.test.ts b/core/frontend/src/test/VertexTable.test.ts similarity index 95% rename from test-apps/testbed/frontend/VertexTable.test.ts rename to core/frontend/src/test/VertexTable.test.ts index 69cad8a..2277111 100644 --- a/test-apps/testbed/frontend/VertexTable.test.ts +++ b/core/frontend/src/test/VertexTable.test.ts @@ -3,8 +3,9 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { expect } from "chai"; -import { MeshArgs, MeshParams } from "@bentley/imodeljs-frontend/lib/rendering"; -import { MockRender } from "@bentley/imodeljs-frontend"; +import { MeshParams } from "../render/primitives/VertexTable"; +import { MeshArgs } from "../render/primitives/mesh/MeshPrimitives"; +import { MockRender } from "../render/MockRender"; import { RenderTexture, QParams2d, QPoint3dList, QParams3d, QPoint3d, ColorIndex, FeatureIndexType } from "@bentley/imodeljs-common"; import { Point2d } from "@bentley/geometry-core"; @@ -59,7 +60,7 @@ describe("VertexLUT", () => { // Test simple unlit vertices (no normals or uv params; uniform colors + features) const args = new MeshArgs(); args.points = positions; - args.vertIndices = [ 0, 1, 2]; + args.vertIndices = [0, 1, 2]; const expected = [ [ diff --git a/test-apps/testbed/public/locales/en/TestApp.json b/core/frontend/src/test/public/locales/en/TestApp.json similarity index 100% rename from test-apps/testbed/public/locales/en/TestApp.json rename to core/frontend/src/test/public/locales/en/TestApp.json diff --git a/test-apps/testbed/frontend/CachedGeometry.test.ts b/core/frontend/src/test/render/CachedGeometry.test.ts similarity index 100% rename from test-apps/testbed/frontend/CachedGeometry.test.ts rename to core/frontend/src/test/render/CachedGeometry.test.ts diff --git a/test-apps/testbed/frontend/ColorMap.test.ts b/core/frontend/src/test/render/ColorMap.test.ts similarity index 98% rename from test-apps/testbed/frontend/ColorMap.test.ts rename to core/frontend/src/test/render/ColorMap.test.ts index df4ed80..b68ccdf 100644 --- a/test-apps/testbed/frontend/ColorMap.test.ts +++ b/core/frontend/src/test/render/ColorMap.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { assert, expect } from "chai"; -import { ColorMap } from "@bentley/imodeljs-frontend/lib/rendering"; +import { ColorMap } from "../../render/primitives/ColorMap"; import { ColorDef, ColorIndex } from "@bentley/imodeljs-common"; describe("ColorMap", () => { diff --git a/test-apps/testbed/frontend/DisplayParams.test.ts b/core/frontend/src/test/render/DisplayParams.test.ts similarity index 98% rename from test-apps/testbed/frontend/DisplayParams.test.ts rename to core/frontend/src/test/render/DisplayParams.test.ts index b84646f..b162478 100644 --- a/test-apps/testbed/frontend/DisplayParams.test.ts +++ b/core/frontend/src/test/render/DisplayParams.test.ts @@ -5,7 +5,7 @@ import { expect } from "chai"; import { GraphicParams, ColorDef, ColorByName, LinePixels } from "@bentley/imodeljs-common"; -import { DisplayParams } from "@bentley/imodeljs-frontend/lib/rendering"; +import { DisplayParams } from "../../render/primitives/DisplayParams"; export class FakeDisplayParams extends DisplayParams { public constructor() { super(DisplayParams.Type.Linear, new ColorDef(), new ColorDef()); } diff --git a/test-apps/testbed/frontend/EdgeOverrides.test.ts b/core/frontend/src/test/render/EdgeOverrides.test.ts similarity index 93% rename from test-apps/testbed/frontend/EdgeOverrides.test.ts rename to core/frontend/src/test/render/EdgeOverrides.test.ts index 4e6d21d..cac9bbf 100644 --- a/test-apps/testbed/frontend/EdgeOverrides.test.ts +++ b/core/frontend/src/test/render/EdgeOverrides.test.ts @@ -5,7 +5,9 @@ import { expect } from "chai"; import { LinePixels, HiddenLine } from "@bentley/imodeljs-common"; -import { LineCode, EdgeOverrides, FloatPreMulRgba, OvrFlags } from "@bentley/imodeljs-frontend/lib/webgl"; +import { LineCode, EdgeOverrides } from "../../render/webgl/EdgeOverrides"; +import { FloatPreMulRgba } from "../../render/webgl/FloatRGBA"; +import { OvrFlags } from "../../render/webgl/RenderFlags"; describe("LineCode", () => { it("valueFromLinePixels correctly converts a LinePixel into a LineCode", () => { diff --git a/core/frontend/src/test/render/FeatureSymbology.test.ts b/core/frontend/src/test/render/FeatureSymbology.test.ts new file mode 100644 index 0000000..09fb334 --- /dev/null +++ b/core/frontend/src/test/render/FeatureSymbology.test.ts @@ -0,0 +1,44 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { assert } from "chai"; + +import { RgbColor, LinePixels } from "@bentley/imodeljs-common"; +import { FeatureSymbology } from "../../render/FeatureSymbology"; + +describe("FeatureSymbology.Appearance", () => { + it("default constructor works as expected", () => { + const app = FeatureSymbology.Appearance.fromJSON(); + assert.isUndefined(app.rgb); + assert.isUndefined(app.weight); + assert.isUndefined(app.transparency); + assert.isUndefined(app.linePixels); + assert.isUndefined(app.ignoresMaterial); + }); + + it("AppearanceProps passed in constructor works as expected", () => { + const props1 = { rgb: new RgbColor(100, 100, 100), weight: 1, transparency: 200 / 255, linePixels: LinePixels.Code2, ignoresMaterial: true } as FeatureSymbology.AppearanceProps; + const props2 = { rgb: new RgbColor(100, 100, 100), weight: 1, transparency: 200 / 255, linePixels: LinePixels.Code2 } as FeatureSymbology.AppearanceProps; + let app = FeatureSymbology.Appearance.fromJSON(props1); + assert.isTrue(app.overridesRgb); + assert.isTrue(app.overridesWeight); + assert.isTrue(app.overridesTransparency); + assert.isTrue(app.overridesLinePixels); + assert.isTrue(app.ignoresMaterial); + + app = FeatureSymbology.Appearance.fromJSON(props2); + assert.isUndefined(app.ignoresMaterial); + }); + + it("extend works as expected", () => { + const props1 = { rgb: new RgbColor(100, 100, 100), linePixels: LinePixels.Code2, ignoresMaterial: true } as FeatureSymbology.AppearanceProps; + const props2 = { rgb: new RgbColor(250, 180, 150), weight: 1, transparency: 200 / 255, linePixels: LinePixels.Code3 } as FeatureSymbology.AppearanceProps; + const expectedProps = { rgb: new RgbColor(100, 100, 100), linePixels: LinePixels.Code2, ignoresMaterial: true, weight: 1, transparency: 200 / 255 } as FeatureSymbology.AppearanceProps; + let app1 = FeatureSymbology.Appearance.fromJSON(props1); + const app2 = FeatureSymbology.Appearance.fromJSON(props2); + app1 = app2.extendAppearance(app1); + const expected = FeatureSymbology.Appearance.fromJSON(expectedProps); + assert.isTrue(expected.equals(app1)); + }); +}); diff --git a/test-apps/testbed/frontend/FeaturesInfo.test.ts b/core/frontend/src/test/render/FeaturesInfo.test.ts similarity index 98% rename from test-apps/testbed/frontend/FeaturesInfo.test.ts rename to core/frontend/src/test/render/FeaturesInfo.test.ts index f14ff18..eff984a 100644 --- a/test-apps/testbed/frontend/FeaturesInfo.test.ts +++ b/core/frontend/src/test/render/FeaturesInfo.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { assert } from "chai"; import { FeatureIndex, FeatureIndexType } from "@bentley/imodeljs-common"; -import { FeaturesInfo } from "@bentley/imodeljs-frontend/lib/webgl"; +import { FeaturesInfo } from "../../render/webgl/FeaturesInfo"; describe("FeaturesInfo", () => { it("should create, store and retrieve from FeaturesInfo", () => { diff --git a/test-apps/testbed/frontend/FloatRGBA.test.ts b/core/frontend/src/test/render/FloatRGBA.test.ts similarity index 98% rename from test-apps/testbed/frontend/FloatRGBA.test.ts rename to core/frontend/src/test/render/FloatRGBA.test.ts index c375f10..9f1c448 100644 --- a/test-apps/testbed/frontend/FloatRGBA.test.ts +++ b/core/frontend/src/test/render/FloatRGBA.test.ts @@ -5,7 +5,7 @@ import { expect } from "chai"; import { ColorDef } from "@bentley/imodeljs-common"; -import { FloatRgb, FloatRgba, FloatPreMulRgba, Rgba } from "@bentley/imodeljs-frontend/lib/webgl"; +import { FloatRgb, FloatRgba, FloatPreMulRgba, Rgba } from "../../render/webgl/FloatRGBA"; interface Rgb { red: number; diff --git a/test-apps/testbed/frontend/Geometry.test.ts b/core/frontend/src/test/render/Geometry.test.ts similarity index 93% rename from test-apps/testbed/frontend/Geometry.test.ts rename to core/frontend/src/test/render/Geometry.test.ts index d65b4b8..841542f 100644 --- a/test-apps/testbed/frontend/Geometry.test.ts +++ b/core/frontend/src/test/render/Geometry.test.ts @@ -4,10 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { Geometry, DisplayParams, StrokesPrimitiveList, StrokesPrimitivePointLists, StrokesPrimitivePointList, PolyfacePrimitiveList, PolyfacePrimitive } from "@bentley/imodeljs-frontend/lib/rendering"; + import { Loop, Path, LineString3d, Point3d, Transform, Range3d, IndexedPolyface } from "@bentley/geometry-core"; import { GraphicParams, ColorDef } from "@bentley/imodeljs-common"; +import { PolyfacePrimitiveList, PolyfacePrimitive } from "../../render/primitives/Polyface"; +import { Geometry } from "../../render/primitives/geometry/GeometryPrimitives"; +import { DisplayParams } from "../../render/primitives/DisplayParams"; +import { StrokesPrimitiveList, StrokesPrimitivePointLists, StrokesPrimitivePointList } from "../../render/primitives/Strokes"; + function pointIsInArray(pt: Point3d, arr: Point3d[]): boolean { for (const arrPt of arr) { if (pt.isAlmostEqual(arrPt)) diff --git a/test-apps/testbed/frontend/Matrix.test.ts b/core/frontend/src/test/render/Matrix.test.ts similarity index 99% rename from test-apps/testbed/frontend/Matrix.test.ts rename to core/frontend/src/test/render/Matrix.test.ts index cc0040e..050a47d 100644 --- a/test-apps/testbed/frontend/Matrix.test.ts +++ b/core/frontend/src/test/render/Matrix.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { Matrix3, Matrix4, fromNormalizedCrossProduct, normalizedDifference } from "@bentley/imodeljs-frontend/lib/webgl"; import { Vector3d, Point3d, Matrix3d, Transform, Matrix4d } from "@bentley/geometry-core"; +import { Matrix3, Matrix4, fromNormalizedCrossProduct, normalizedDifference } from "../../render/webgl/Matrix"; describe("Matrix3", () => { it("constructor works as expected", () => { diff --git a/test-apps/testbed/frontend/Polyline.test.ts b/core/frontend/src/test/render/Polyline.test.ts similarity index 100% rename from test-apps/testbed/frontend/Polyline.test.ts rename to core/frontend/src/test/render/Polyline.test.ts diff --git a/test-apps/testbed/frontend/Primitives.test.ts b/core/frontend/src/test/render/Primitives.test.ts similarity index 97% rename from test-apps/testbed/frontend/Primitives.test.ts rename to core/frontend/src/test/render/Primitives.test.ts index 4eb7c43..8fddf11 100644 --- a/test-apps/testbed/frontend/Primitives.test.ts +++ b/core/frontend/src/test/render/Primitives.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { assert } from "chai"; -import { ToleranceRatio, GeometryOptions, NormalMode, SurfacesOnly, PreserveOrder, GenerateEdges } from "@bentley/imodeljs-frontend/lib/rendering"; +import { ToleranceRatio, GeometryOptions, NormalMode, SurfacesOnly, PreserveOrder, GenerateEdges } from "../../render/primitives/Primitives"; describe("ToleranceRatio", () => { it("ToleranceRatio works as expected", () => { diff --git a/test-apps/testbed/frontend/Strokes.test.ts b/core/frontend/src/test/render/Strokes.test.ts similarity index 96% rename from test-apps/testbed/frontend/Strokes.test.ts rename to core/frontend/src/test/render/Strokes.test.ts index 58815dd..cc9cc51 100644 --- a/test-apps/testbed/frontend/Strokes.test.ts +++ b/core/frontend/src/test/render/Strokes.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { assert, expect } from "chai"; import { Point3d } from "@bentley/geometry-core"; -import { StrokesPrimitivePointList, StrokesPrimitivePointLists } from "@bentley/imodeljs-frontend/lib/rendering"; +import { StrokesPrimitivePointList, StrokesPrimitivePointLists } from "../../render/primitives/Strokes"; describe("StrokesPrimitivePointList", () => { it("StrokesPrimitivePointList works as expected", () => { diff --git a/test-apps/testbed/frontend/VertexKey.test.ts b/core/frontend/src/test/render/VertexKey.test.ts similarity index 93% rename from test-apps/testbed/frontend/VertexKey.test.ts rename to core/frontend/src/test/render/VertexKey.test.ts index 10b66ca..976c893 100644 --- a/test-apps/testbed/frontend/VertexKey.test.ts +++ b/core/frontend/src/test/render/VertexKey.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from "chai"; import { QPoint3d, OctEncodedNormal } from "@bentley/imodeljs-common"; -import { VertexKey } from "@bentley/imodeljs-frontend/lib/rendering"; +import { VertexKey } from "../../render/primitives/VertexKey"; describe("VertexKey", () => { it("comparisons work as expected", () => { diff --git a/core/frontend/src/test/utils/WebGLTestContext.ts b/core/frontend/src/test/utils/WebGLTestContext.ts new file mode 100644 index 0000000..d27c190 --- /dev/null +++ b/core/frontend/src/test/utils/WebGLTestContext.ts @@ -0,0 +1,57 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +// FIXME: If we don't import these from the barrel, we get errors related to circular references... +import { IModelApp, NullRenderSystem, RenderSystem, RenderDiagnostics } from "../../imodeljs-frontend"; + +// Electron running inside a Windows VM fails to acquire a WebGLRenderingContext. +// This prevents us from creating a "real" RenderSystem during CI jobs. +// Use MaybeRenderApp in place of IModelApp in tests ONLY if the tests require a "real", WebGL-based RenderSystem. +// Tests which use MaybeRenderApp will NOT execute during Windows CI jobs. +// Prefer to use MockRender.App if the tests do not directly require/exercise the WebGL RenderSystem. +export class MaybeRenderApp extends IModelApp { + protected static supplyRenderSystem(): RenderSystem { + try { + return super.supplyRenderSystem(); + } catch (e) { + return new NullRenderSystem(); + } + } +} + +// See comments on MaybeRenderApp. In a nutshell: use this only if you are testing WebGL. Otherwise use MockRender.App. +export namespace WebGLTestContext { + export let isInitialized = false; + + export function startup() { + MaybeRenderApp.startup(); + isInitialized = MaybeRenderApp.hasRenderSystem; + MaybeRenderApp.renderSystem.enableDiagnostics(RenderDiagnostics.All); + } + + export function shutdown() { + MaybeRenderApp.renderSystem.enableDiagnostics(RenderDiagnostics.None); + MaybeRenderApp.shutdown(); + isInitialized = false; + } + + const canvasId = "WebGLTestCanvas"; + + export function createCanvas(width: number = 300, height: number = 150): HTMLCanvasElement | undefined { + let canvas = document.getElementById(canvasId) as HTMLCanvasElement; + if (null === canvas) { + canvas = document.createElement("canvas") as HTMLCanvasElement; + if (null === canvas) return undefined; + + canvas.id = canvasId; + document.body.appendChild(document.createTextNode("WebGL tests")); + document.body.appendChild(canvas); + } + + canvas.width = width; + canvas.height = height; + + return canvas; + } +} diff --git a/core/frontend/src/test/utils/webpack.config.js b/core/frontend/src/test/utils/webpack.config.js new file mode 100644 index 0000000..3347063 --- /dev/null +++ b/core/frontend/src/test/utils/webpack.config.js @@ -0,0 +1,80 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +const path = require("path"); +const webpack = require("webpack"); +const glob = require("glob"); + +const frontendLib = path.resolve(__dirname, "../../../lib"); + +function createConfig(shouldInstrument) { + const config = { + mode: "development", + entry: glob.sync(path.resolve(frontendLib, "test/**/*.test.js")), + output: { + path: path.resolve(frontendLib, "test/webpack/"), + filename: "bundled-tests.js", + devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]" + }, + devtool: "nosources-source-map", + module: { + noParse: [ + // Don't parse draco_*_nodejs.js modules for `require` calls. There are + // requires for fs that cause it to fail even though the fs dependency + // is not used. + /draco_decoder_nodejs.js$/, + /draco_encoder_nodejs.js$/ + ], + rules: [ + { + test: /\.js$/, + use: "source-map-loader", + enforce: "pre" + }, + { + test: /azure-storage|AzureFileHandler|UrlFileHandler/, + use: "null-loader" + }, + ] + }, + stats: "errors-only", + optimization: { + nodeEnv: "production" + }, + plugins: [ + // Makes some environment variables available to the JS code, for example: + // if (process.env.NODE_ENV === "development") { ... }. See `./env.js`. + new webpack.DefinePlugin({ + "process.env": Object.keys(process.env) + .reduce((env, key) => { + env[key] = JSON.stringify(process.env[key]); + return env; + }, {}), + }) + ] + }; + + if (shouldInstrument) { + config.output.filename = "bundled-tests.instrumented.js"; + config.module.rules.push({ + test: /\.(jsx?|tsx?)$/, + include: frontendLib, + exclude: path.join(frontendLib, "test"), + loader: require.resolve("istanbul-instrumenter-loader"), + options: { + debug: true + }, + enforce: "post", + }); + } + + return config; +} + +// Exporting two configs in a array like this actually tells webpack to run twice - once for each config. +module.exports = [ + createConfig(true), + createConfig(false) +] diff --git a/core/frontend/src/tile.ts b/core/frontend/src/tile.ts index 8743a15..e445c48 100644 --- a/core/frontend/src/tile.ts +++ b/core/frontend/src/tile.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ export * from "./tile/GltfTileIO"; +export * from "./tile/IModelTile"; export * from "./tile/IModelTileIO"; export * from "./tile/TileIO"; export * from "./tile/TileTree"; diff --git a/core/frontend/src/tile/B3dmTileIO.ts b/core/frontend/src/tile/B3dmTileIO.ts index 730467c..300d392 100644 --- a/core/frontend/src/tile/B3dmTileIO.ts +++ b/core/frontend/src/tile/B3dmTileIO.ts @@ -14,9 +14,10 @@ import { Transform } from "@bentley/geometry-core"; /** * Provides facilities for deserializing Batched 3D Model (B3dm) tiles. - * @hidden + * @internal */ export namespace B3dmTileIO { + /** @internal */ export class Header extends TileIO.Header { public readonly length: number; public readonly featureTableJsonLength: number; @@ -73,7 +74,7 @@ export namespace B3dmTileIO { /** * Deserializes a B3DM tile. - * @hidden + * @internal */ export class Reader extends GltfTileIO.Reader { public static create(stream: TileIO.StreamBuffer, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, transformToRoot?: Transform, isCanceled?: GltfTileIO.IsCanceled): Reader | undefined { diff --git a/core/frontend/src/tile/CompositeTileIO.ts b/core/frontend/src/tile/CompositeTileIO.ts index 371c815..9e8f496 100644 --- a/core/frontend/src/tile/CompositeTileIO.ts +++ b/core/frontend/src/tile/CompositeTileIO.ts @@ -7,9 +7,10 @@ import { TileIO } from "./TileIO"; /** * Provides facilities for deserializing Composite (cmpt) tiles. - * @hidden + * @internal */ export namespace CompositeTileIO { + /** @internal */ export class Header extends TileIO.Header { public readonly length: number; public readonly tileCount: number; diff --git a/core/frontend/src/tile/DracoDecoder.ts b/core/frontend/src/tile/DracoDecoder.ts index 8c1ed0d..ab41841 100644 --- a/core/frontend/src/tile/DracoDecoder.ts +++ b/core/frontend/src/tile/DracoDecoder.ts @@ -9,8 +9,9 @@ import { QPoint3dList/*, QParams3d, QParams2d, QPoint2dList */ } from "@bentley/ import { Point2d, Point3d } from "@bentley/geometry-core"; import { Triangle } from "../render/primitives/Primitives"; +/** @internal */ export class DracoDecoder { - private static _dracoDecoderModule: any; /** @hidden */ + private static _dracoDecoderModule: any; public static readDracoMesh(mesh: Mesh, _primitive: any, bufferData: Uint8Array): Mesh | undefined { if (!DracoDecoder._dracoDecoderModule) diff --git a/core/frontend/src/tile/GltfTileIO.ts b/core/frontend/src/tile/GltfTileIO.ts index 4ef92cc..2030f09 100644 --- a/core/frontend/src/tile/GltfTileIO.ts +++ b/core/frontend/src/tile/GltfTileIO.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ /** @module Tile */ +import { Tile } from "./TileTree"; import { TileIO } from "./TileIO"; import { DisplayParams } from "../render/primitives/DisplayParams"; import { Triangle } from "../render/primitives/Primitives"; @@ -38,29 +39,36 @@ import { IModelConnection } from "../IModelConnection"; // Defer Draco for now. import { DracoDecoder } from "./DracoDecoder"; -/** Provides facilities for deserializing tiles in the [glTF tile format](https://www.khronos.org/gltf/). */ +/** Provides facilities for deserializing tiles in the [glTF tile format](https://www.khronos.org/gltf/). + * @internal + */ export namespace GltfTileIO { - /** Known version of the [glTF format](https://www.khronos.org/gltf/). */ + /** Known version of the [glTF format](https://www.khronos.org/gltf/). + * @internal + */ export const enum Versions { Version1 = 1, Version2 = 2, CurrentVersion = Version1, Gltf1SceneFormat = 0, } + + /** @internal */ export const enum V2ChunkTypes { JSON = 0x4E4F534a, Binary = 0x004E4942, } - /** The result of [[GltfTileIO.Reader.read]]. */ - export interface ReaderResult { + + /** The result of [[GltfTileIO.Reader.read]]. + * @internal + */ + export interface ReaderResult extends Tile.Content { readStatus: TileIO.ReadStatus; - isLeaf: boolean; - contentRange?: ElementAlignedBox3d; - renderGraphic?: RenderGraphic; - sizeMultiplier?: number; } - /** Header preceding glTF tile data. */ + /** Header preceding glTF tile data. + * @internal + */ export class Header extends TileIO.Header { public readonly gltfLength: number; public readonly scenePosition: number = 0; @@ -104,14 +112,14 @@ export namespace GltfTileIO { } } - /** @hidden */ + /** @internal */ export const enum MeshMode { Lines = 1, LineStrip = 3, Triangles = 4, } - /** @hidden */ + /** @internal */ export const enum DataType { // SignedByte = 0x1400, UnsignedByte = 0x1401, @@ -131,7 +139,7 @@ export namespace GltfTileIO { // Sampler2d = 35678, } - /** @hidden */ + /** @internal */ export const enum Constants { CullFace = 2884, DepthTest = 2929, @@ -145,14 +153,14 @@ export namespace GltfTileIO { VertexShader = 35633, } - /** @hidden */ + /** @internal */ export type DataBuffer = Uint8Array | Uint16Array | Uint32Array | Float32Array; /** * A chunk of binary data exposed as a typed array. * The count member indicates how many elements exist. This may be less than this.buffer.length due to padding added to the * binary stream to ensure correct alignment. - * @hidden + * @internal */ export class BufferData { public readonly buffer: DataBuffer; @@ -215,7 +223,7 @@ export namespace GltfTileIO { * underlying type. For example, a buffer of 4 32-bit floating point 'vec2' elements will have a count of 4, * but its data member will contain 8 32-bit floating point values (2 per vec2). * The accessor member may contain additional JSON data specific to a particular buffer. - * @hidden + * @internal */ export class BufferView { public readonly data: Uint8Array; @@ -237,7 +245,9 @@ export namespace GltfTileIO { } } - /** Data required for creating a Reader capable of deserializing [glTF tile data](https://www.khronos.org/gltf/). */ + /** Data required for creating a Reader capable of deserializing [glTF tile data](https://www.khronos.org/gltf/). + * @internal + */ export class ReaderProps { private constructor(public readonly buffer: TileIO.StreamBuffer, public readonly binaryData: Uint8Array, @@ -286,7 +296,9 @@ export namespace GltfTileIO { } } - /** A function that returns true if Reader.read() should abort because the tile data is no longer needed. */ + /** A function that returns true if Reader.read() should abort because the tile data is no longer needed. + * @internal + */ export type IsCanceled = (reader: Reader) => boolean; /* ----------------------------------- @@ -302,53 +314,32 @@ export namespace GltfTileIO { declare var BUILD_SEMVER: string; -------------------------------------- */ - /** Deserializes [(glTF tile data](https://www.khronos.org/gltf/). */ + /** Deserializes [(glTF tile data](https://www.khronos.org/gltf/). + * @internal + */ export abstract class Reader { - /** @hidden */ protected readonly _buffer: TileIO.StreamBuffer; - /** @hidden */ protected readonly _scene: any; - /** @hidden */ protected readonly _accessors: any; - /** @hidden */ protected readonly _bufferViews: any; - /** @hidden */ protected readonly _meshes: any; - /** @hidden */ protected readonly _nodes: any; - /** @hidden */ protected readonly _batchData: any; - /** @hidden */ protected readonly _materialValues: any; - /** @hidden */ protected readonly _textures: any; - /** @hidden */ protected readonly _renderMaterials: any; // Materials that may be deserialized and created directly - /** @hidden */ protected readonly _namedTextures: any; // Textures that may be deserialized and created directly - /** @hidden */ protected readonly _images: any; - /** @hidden */ protected readonly _samplers: any; - /** @hidden */ protected readonly _techniques: any; - /** @hidden */ protected readonly _binaryData: Uint8Array; - /** @hidden */ protected readonly _iModel: IModelConnection; - /** @hidden */ protected readonly _is3d: boolean; - /** @hidden */ protected readonly _modelId: Id64String; - /** @hidden */ protected readonly _system: RenderSystem; - /** @hidden */ protected readonly _returnToCenter: number[] | undefined; - /** @hidden */ protected readonly _yAxisUp: boolean; - /** @hidden */ protected readonly _type: BatchType; - private readonly _canceled?: IsCanceled; /* ----------------------------------- @@ -365,12 +356,9 @@ export namespace GltfTileIO { /** Asynchronously deserialize the tile data and return the result. */ public async abstract read(): Promise; - /** @hidden */ protected get _isCanceled(): boolean { return undefined !== this._canceled && this._canceled(this); } - /** @hidden */ protected get _isClassifier(): boolean { return BatchType.Classifier === this._type; } - /** @hidden */ protected readGltfAndCreateGraphics(isLeaf: boolean, featureTable: FeatureTable, contentRange: ElementAlignedBox3d, transformToRoot?: Transform, sizeMultiplier?: number, instances?: InstancedGraphicParams): GltfTileIO.ReaderResult { if (this._isCanceled) return { readStatus: TileIO.ReadStatus.Canceled, isLeaf, sizeMultiplier }; @@ -414,9 +402,10 @@ export namespace GltfTileIO { isLeaf, sizeMultiplier, contentRange, - renderGraphic, + graphic: renderGraphic, }; } + private readNodeAndCreateGraphics(renderGraphicList: RenderGraphic[], node: any, featureTable: FeatureTable, parentTransform: Transform | undefined, instances?: InstancedGraphicParams): TileIO.ReadStatus { if (undefined === node) return TileIO.ReadStatus.InvalidTileData; @@ -471,7 +460,6 @@ export namespace GltfTileIO { return TileIO.ReadStatus.Success; } - /** @hidden */ public getBufferView(json: any, accessorName: string): BufferView | undefined { try { const accessorValue = JsonUtils.asString(json[accessorName]); @@ -519,16 +507,11 @@ export namespace GltfTileIO { } } - /** @hidden */ public readBufferData32(json: any, accessorName: string): BufferData | undefined { return this.readBufferData(json, accessorName, DataType.UInt32); } - /** @hidden */ public readBufferData16(json: any, accessorName: string): BufferData | undefined { return this.readBufferData(json, accessorName, DataType.UnsignedShort); } - /** @hidden */ public readBufferData8(json: any, accessorName: string): BufferData | undefined { return this.readBufferData(json, accessorName, DataType.UnsignedByte); } - /** @hidden */ public readBufferDataFloat(json: any, accessorName: string): BufferData | undefined { return this.readBufferData(json, accessorName, DataType.Float); } - /** @hidden */ protected constructor(props: ReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type: BatchType = BatchType.Classifier, isCanceled?: IsCanceled) { this._buffer = props.buffer; this._scene = props.scene; @@ -556,13 +539,11 @@ export namespace GltfTileIO { this._canceled = isCanceled; } - /** @hidden */ protected readBufferData(json: any, accessorName: string, type: DataType): BufferData | undefined { const view = this.getBufferView(json, accessorName); return undefined !== view ? view.toBufferData(type) : undefined; } - /** @hidden */ protected readFeatureIndices(_json: any): number[] | undefined { return undefined; } private colorFromJson(values: number[]): ColorDef { return ColorDef.from(values[0] * 255, values[1] * 255, values[2] * 255, (1.0 - values[3]) * 255); } @@ -604,7 +585,6 @@ export namespace GltfTileIO { return (rtc[0] === 0.0 && rtc[1] === 0.0 && rtc[2] === 0.0) ? undefined : rtc; } - /** @hidden */ protected readMeshPrimitive(primitive: any, featureTable?: FeatureTable): Mesh | undefined { const materialName = JsonUtils.asString(primitive.material); const hasBakedLighting = undefined === primitive.attributes.NORMAL; @@ -703,7 +683,6 @@ export namespace GltfTileIO { return mesh; } - /** @hidden */ protected readVertices(positions: QPoint3dList, primitive: any): boolean { const view = this.getBufferView(primitive.attributes, "POSITION"); if (undefined === view) @@ -753,7 +732,6 @@ export namespace GltfTileIO { return true; } - /** @hidden */ protected readIndices(json: any, accessorName: string): number[] | undefined { const data = this.readBufferData32(json, accessorName); if (undefined === data) @@ -766,7 +744,6 @@ export namespace GltfTileIO { return indices; } - /** @hidden */ protected readFeatures(features: Mesh.Features, json: any): boolean { const indices = this.readFeatureIndices(json); if (undefined === indices) @@ -776,7 +753,6 @@ export namespace GltfTileIO { return true; } - /** @hidden */ protected readMeshIndices(mesh: Mesh, json: any): boolean { const data = this.readBufferData32(json, "indices"); if (undefined === data) @@ -794,7 +770,6 @@ export namespace GltfTileIO { return true; } - /** @hidden */ protected readNormals(normals: OctEncodedNormal[], json: any, accessorName: string): boolean { const view = this.getBufferView(json, accessorName); if (undefined === view) @@ -833,7 +808,6 @@ export namespace GltfTileIO { } } - /** @hidden */ protected readUVParams(params: Point2d[], json: any, accessorName: string): boolean { const view = this.getBufferView(json, accessorName); let data: any; @@ -874,7 +848,6 @@ export namespace GltfTileIO { return true; } - /** @hidden */ protected readPolylines(polylines: MeshPolylineList, json: any, accessorName: string, disjoint: boolean): boolean { const view = this.getBufferView(json, accessorName); if (undefined === view) @@ -920,7 +893,6 @@ export namespace GltfTileIO { return true; } - /** @hidden */ protected async loadTextures(): Promise { if (undefined === this._textures) return Promise.resolve(); @@ -948,7 +920,6 @@ export namespace GltfTileIO { return promises.length > 0 ? Promise.all(promises).then((_) => undefined) : Promise.resolve(); } - /** @hidden */ protected async loadTextureImage(imageJson: any, samplerJson: any, isTransparent: boolean): Promise { try { const binaryImageJson = (imageJson.extensions && imageJson.extensions.KHR_binary_glTF) ? JsonUtils.asObject(imageJson.extensions.KHR_binary_glTF) : imageJson; @@ -984,7 +955,6 @@ export namespace GltfTileIO { } } - /** @hidden */ protected async loadTexture(textureId: string, isTransparent: boolean): Promise { const textureJson = JsonUtils.asObject(this._textures[textureId]); if (undefined === textureJson) @@ -995,7 +965,6 @@ export namespace GltfTileIO { }); } - /** @hidden */ protected findTextureMapping(textureId: string): TextureMapping | undefined { const textureJson = JsonUtils.asObject(this._textures[textureId]); const texture = undefined !== textureJson ? textureJson.renderTexture as RenderTexture : undefined; diff --git a/core/frontend/src/tile/I3dmTileIO.ts b/core/frontend/src/tile/I3dmTileIO.ts index e58dfb9..6e4cfd7 100644 --- a/core/frontend/src/tile/I3dmTileIO.ts +++ b/core/frontend/src/tile/I3dmTileIO.ts @@ -5,7 +5,7 @@ /** @module Tile */ import { TileIO } from "./TileIO"; import { GltfTileIO } from "./GltfTileIO"; -import { ElementAlignedBox3d, FeatureTable, Feature, BatchType } from "@bentley/imodeljs-common"; +import { ColorDef, ElementAlignedBox3d, FeatureTable, Feature, BatchType } from "@bentley/imodeljs-common"; import { Id64String, utf8ToString, JsonUtils } from "@bentley/bentleyjs-core"; import { InstancedGraphicParams, RenderSystem } from "../render/System"; import { Mesh } from "../render/primitives/mesh/MeshPrimitives"; @@ -42,9 +42,10 @@ function setTransform(transforms: Float32Array, index: number, rotation: Matrix3 /** * Provides facilities for deserializing Batched 3D Model (B3dm) tiles. - * @hidden + * @internal */ export namespace I3dmTileIO { + /** @internal */ export class Header extends TileIO.Header { public readonly length: number; public readonly featureTableJsonPosition: number; @@ -76,7 +77,7 @@ export namespace I3dmTileIO { /** * Deserializes a I3DM tile. - * @hidden + * @internal */ export class Reader extends GltfTileIO.Reader { public static create(stream: TileIO.StreamBuffer, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, isCanceled?: GltfTileIO.IsCanceled): Reader | undefined { @@ -98,6 +99,9 @@ export namespace I3dmTileIO { } public async read(): Promise { + const skipI3dm = false; // for debugging + if (skipI3dm) + return Promise.resolve({ readStatus: TileIO.ReadStatus.Canceled, isLeaf: this._isLeaf }); // TBD... Create an actual feature table if one exists. For now we are only reading tiles from scalable mesh which have no features. // NB: For reality models with no batch table, we want the model ID in the feature table @@ -134,11 +138,14 @@ export namespace I3dmTileIO { const positions = json.POSITION ? new Float32Array(binary.buffer, binary.byteOffset + json.POSITION.byteOffset, count * 3) : undefined; const upNormals = json.NORMAL_UP ? new Float32Array(binary.buffer, binary.byteOffset + json.NORMAL_UP.byteOffset, count * 3) : undefined; const rightNormals = json.NORMAL_RIGHT ? new Float32Array(binary.buffer, binary.byteOffset + json.NORMAL_RIGHT.byteOffset, count * 3) : undefined; + const scales = json.SCALE ? new Float32Array(binary.buffer, binary.byteOffset + json.SCALE.byteOffset, count) : undefined; + const nonUniformScales = json.SCALE_NON_UNIFORM ? new Float32Array(binary.buffer, binary.byteOffset + json.SCALE_NON_UNIFORM.byteOffset, count * 3) : undefined; const matrix = Matrix3d.createIdentity(); const position = Point3d.createZero(); const upNormal = Vector3d.create(0, 0, 1); const rightNormal = Vector3d.create(1, 0, 0); + const scale = Vector3d.create(1, 1, 1); const transforms = new Float32Array(12 * count); for (let i = 0; i < count; i++) { @@ -153,15 +160,55 @@ export namespace I3dmTileIO { if (rightNormals) rightNormal.set(rightNormals[index], rightNormals[index + 1], rightNormals[index + 2]); + if (scales) + scale.x = scale.y = scale.z = scales[i]; + + if (nonUniformScales) { + scale.x *= nonUniformScales[index + 0]; + scale.y *= nonUniformScales[index + 1]; + scale.z *= nonUniformScales[index + 2]; + } + Matrix3d.createRigidFromColumns(rightNormal, upNormal, AxisOrder.XYZ, matrix); + if (scales || nonUniformScales) + matrix.scaleColumnsInPlace(scale.x, scale.y, scale.z); + setTransform(transforms, i, matrix, position); } } - // ###TODO: Use actual feature IDs if feature table exists + // ###TODO_INSTANCING: Use actual feature IDs if feature table exists const featureIds = new Uint8Array(3 * count); - return { count, transforms, featureIds }; + // ###TODO_INSTANCING: Remove me when feature complete... + const testSymbologyOverrides = false; + let symbologyOverrides: Uint8Array | undefined; + if (testSymbologyOverrides) { + const colors = [ColorDef.red, ColorDef.green, ColorDef.blue, ColorDef.white]; + const weights = [1, 4, 8, 12, 16]; + const codes = [0, 1, 2, 3, 4, 5, 6, 7, 8]; + const alphas = [20, 127, 220]; + + symbologyOverrides = new Uint8Array(count * 8); + for (let i = 0; i < count; i++) { + const index = i * 8; + const color = colors[i % colors.length].colors; + const weight = weights[i % weights.length]; + const code = codes[i % codes.length]; + const alpha = alphas[i % alphas.length]; + const overrideAlpha = true; + + symbologyOverrides[index + 0] = overrideAlpha ? 78 : 74; // alpha 74; // OvrFlags: Rgb | Weight | LineCode + symbologyOverrides[index + 1] = weight; + symbologyOverrides[index + 2] = code; + symbologyOverrides[index + 4] = color.r; + symbologyOverrides[index + 5] = color.g; + symbologyOverrides[index + 6] = color.b; + symbologyOverrides[index + 7] = alpha; + } + } + + return { count, transforms, symbologyOverrides, featureIds }; } } } diff --git a/core/frontend/src/tile/IModelTile.ts b/core/frontend/src/tile/IModelTile.ts new file mode 100644 index 0000000..6191a23 --- /dev/null +++ b/core/frontend/src/tile/IModelTile.ts @@ -0,0 +1,305 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module Tile */ + +import { + assert, +} from "@bentley/bentleyjs-core"; +import { + Range3d, +} from "@bentley/geometry-core"; +import { + BatchType, + TileProps, + ViewFlag, +} from "@bentley/imodeljs-common"; +import { + Tile, + TileLoader, +} from "./TileTree"; +import { + TileRequest, +} from "./TileRequest"; +import { + IModelApp, +} from "../IModelApp"; +import { + IModelConnection, +} from "../IModelConnection"; +import { + IModelTileIO, +} from "./IModelTileIO"; + +function bisectRange3d(range: Range3d, takeUpper: boolean): void { + const diag = range.diagonal(); + const pt = takeUpper ? range.high : range.low; + if (diag.x > diag.y && diag.x > diag.z) + pt.x = (range.low.x + range.high.x) / 2.0; + else if (diag.y > diag.z) + pt.y = (range.low.y + range.high.y) / 2.0; + else + pt.z = (range.low.z + range.high.z) / 2.0; +} + +function bisectRange2d(range: Range3d, takeUpper: boolean): void { + const diag = range.diagonal(); + const pt = takeUpper ? range.high : range.low; + if (diag.x > diag.y) + pt.x = (range.low.x + range.high.x) / 2.0; + else + pt.y = (range.low.y + range.high.y) / 2.0; +} + +/** Contains facilities for deserializing tiles in iMdl format - Bentley's internal format for representing 3d tiles + * generated by the backend from the contents of geometric models. iMdl shares some similarities with glTF, but a quite + * different representation of geometry and materials. + * @internal + */ +export namespace IModelTile { + /** Flags controlling how tile content is produced. The flags are part of the ContentId. + * @internal + */ + const enum ContentFlags { + None = 0, + AllowInstancing = 1 << 0, + All = AllowInstancing, + } + + /** Describes the components of a tile's content Id. + * + * The depth specifies how many subdivisions from the root tile are to be performed to reach the sub-volume of interest. + * + * The i, j, and k parameters specify how to subdivide the tile's volume. Each sub-division is performed along the longest axis of the + * volume. The volume is first sub-divided based on `i`, then the result sub-divided based on `j`, and finally that result sub-divided + * based on `k`. + * + * The multiplier is an integer - generally a power of two - multiplied by the screen size of a tile (512 pixels) used to + * produce a higher-resolution tile for the same volume. + * @internal + */ + interface ContentIdSpec { + depth: number; + i: number; + j: number; + k: number; + multiplier: number; + } + + /** Contains logic for working with tile content Ids according to a specific content Id scheme. Which scheme is used depends on + * the major version of the tile format. + * @internal + */ + abstract class ContentIdProvider { + public get rootContentId(): string { + return this.computeId(0, 0, 0, 0, 1); + } + + public idFromParentAndMultiplier(parentId: string, multiplier: number): string { + const lastSepPos = parentId.lastIndexOf(this._separator); + assert(-1 !== lastSepPos); + return parentId.substring(0, lastSepPos + 1) + multiplier.toString(16); + } + + public specFromId(id: string): ContentIdSpec { + const parts = id.split(this._separator); + const len = parts.length; + assert(len >= 5); + return { + depth: parseInt(parts[len - 5], 16), + i: parseInt(parts[len - 4], 16), + j: parseInt(parts[len - 3], 16), + k: parseInt(parts[len - 2], 16), + multiplier: parseInt(parts[len - 1], 16), + }; + } + + public idFromSpec(spec: ContentIdSpec): string { + return this.computeId(spec.depth, spec.i, spec.j, spec.k, spec.multiplier); + } + + protected join(depth: number, i: number, j: number, k: number, mult: number): string { + const sep = this._separator; + return depth.toString(16) + sep + i.toString(16) + sep + j.toString(16) + sep + k.toString(16) + sep + mult.toString(16); + } + + protected abstract get _separator(): string; + protected abstract computeId(depth: number, i: number, j: number, k: number, mult: number): string; + + /** formatVersion is the maximum major version supported by the back-end supplying the tile tree. + * Must ensure front-end does not request tiles of a format the back-end cannot supply, and back-end does + * not supply tiles of a format the front-end doesn't recognize. + */ + public static create(formatVersion?: number): ContentIdProvider { + if (undefined !== formatVersion) { + const majorVersion = Math.min((formatVersion >>> 0x10), IModelTileIO.CurrentVersion.Major); + assert(majorVersion > 0); + if (majorVersion > 1) + return new ContentIdV2Provider(majorVersion); + } + + return new ContentIdV1Provider(); + } + } + + /** The original (major version 1) tile format used a content Id scheme of the format + * `depth/i/j/k/multiplier`. + * @internal + */ + class ContentIdV1Provider extends ContentIdProvider { + protected get _separator() { return "/"; } + protected computeId(depth: number, i: number, j: number, k: number, mult: number): string { + return this.join(depth, i, j, k, mult); + } + } + + /** The current (major version 2 or newer) tile format uses a content Id scheme encoding styling flags and the major format version + * into the content Id, of the format `_majorVersion_flags_depth_i_j_k_multiplier`. + * @internal + */ + class ContentIdV2Provider extends ContentIdProvider { + private readonly _prefix: string; + + public constructor(majorVersion: number) { + super(); + const flags = IModelApp.tileAdmin.enableInstancing ? ContentFlags.AllowInstancing : ContentFlags.None; + this._prefix = this._separator + majorVersion.toString(16) + this._separator + flags.toString(16) + this._separator; + } + + protected get _separator() { return "_"; } + protected computeId(depth: number, i: number, j: number, k: number, mult: number): string { + return this._prefix + this.join(depth, i, j, k, mult); + } + } + + /** @internal */ + export class Loader extends TileLoader { + private _iModel: IModelConnection; + private _type: BatchType; + private _edgesRequired: boolean; + private readonly _contentIdProvider: ContentIdProvider; + protected get _batchType() { return this._type; } + protected get _loadEdges(): boolean { return this._edgesRequired; } + + public constructor(iModel: IModelConnection, formatVersion: number | undefined, batchType: BatchType, edgesRequired: boolean = true) { + super(); + this._iModel = iModel; + this._type = batchType; + this._edgesRequired = edgesRequired; + this._contentIdProvider = ContentIdProvider.create(formatVersion); + } + + public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working. + public get priority(): Tile.LoadPriority { return BatchType.Classifier === this._batchType ? Tile.LoadPriority.Classifier : Tile.LoadPriority.Primary; } + public tileRequiresLoading(params: Tile.Params): boolean { return 0 !== params.maximumSize; } + public get rootContentId(): string { return this._contentIdProvider.rootContentId; } + + protected static _viewFlagOverrides = new ViewFlag.Overrides(); + public get viewFlagOverrides() { return Loader._viewFlagOverrides; } + + public async getChildrenProps(parent: Tile): Promise { + const kids: TileProps[] = []; + + // Leaf nodes have no children. + if (parent.isLeaf) + return kids; + + // One child, same range as parent, higher-resolution. + if (parent.hasSizeMultiplier) { + const sizeMultiplier = parent.sizeMultiplier * 2; + const contentId = this._contentIdProvider.idFromParentAndMultiplier(parent.contentId, sizeMultiplier); + kids.push({ + contentId, + range: parent.range, + contentRange: parent.contentRange, + sizeMultiplier, + isLeaf: false, + maximumSize: 512, + }); + + return kids; + } + + // Sub-divide parent's range into 4 (for 2d trees) or 8 (for 3d trees) child tiles. + const parentSpec = this._contentIdProvider.specFromId(parent.contentId); + assert(parent.depth === parentSpec.depth); + + const childSpec: ContentIdSpec = { ...parentSpec }; + childSpec.depth = parent.depth + 1; + + // This mask is a bitfield in which an 'on' bit indicates sub-volume containing no geometry. + // Don't bother creating children or requesting content for such empty volumes. + const admin = IModelApp.tileAdmin; + const emptyMask = admin.elideEmptyChildContentRequests ? parent.emptySubRangeMask : 0; + + const is2d = parent.root.is2d; + const bisectRange = is2d ? bisectRange2d : bisectRange3d; + for (let i = 0; i < 2; i++) { + for (let j = 0; j < 2; j++) { + for (let k = 0; k < (is2d ? 1 : 2); k++) { + const emptyBit = 1 << (i + j * 2 + k * 4); + if (0 !== (emptyMask & emptyBit)) { + admin.onTileElided(); + continue; // volume is known to contain no geometry. + } + + const range = parent.range.clone(); + bisectRange(range, 0 === i); + bisectRange(range, 0 === j); + if (!is2d) + bisectRange(range, 0 === k); + + childSpec.i = parentSpec.i * 2 + i; + childSpec.j = parentSpec.j * 2 + j; + childSpec.k = parentSpec.k * 2 + k; + + const childId = this._contentIdProvider.idFromSpec(childSpec); + kids.push({ contentId: childId, range, maximumSize: 512 }); + } + } + } + + return kids; + } + + public async requestTileContent(tile: Tile): Promise { + return this._iModel.tiles.getTileContent(tile.root.id, tile.contentId); + } + + public adjustContentIdSizeMultiplier(contentId: string, sizeMultiplier: number): string { + return this._contentIdProvider.idFromParentAndMultiplier(contentId, sizeMultiplier); + } + } +} + +/** + * Given a Tile, compute the ranges which would result from sub-dividing its range a la IModelTile.getChildrenProps(). + * This function exists strictly for debugging purposes. + * @internal + */ +export function computeChildRanges(tile: Tile): Array<{ range: Range3d, isEmpty: boolean }> { + const emptyMask = tile.emptySubRangeMask; + const is2d = tile.root.is2d; + const bisectRange = is2d ? bisectRange2d : bisectRange3d; + + const ranges: Array<{ range: Range3d, isEmpty: boolean }> = []; + for (let i = 0; i < 2; i++) { + for (let j = 0; j < 2; j++) { + for (let k = 0; k < (is2d ? 1 : 2); k++) { + const emptyBit = 1 << (i + j * 2 + k * 4); + const isEmpty = 0 !== (emptyMask & emptyBit); + + const range = tile.range.clone(); + bisectRange(range, 0 === i); + bisectRange(range, 0 === j); + if (!is2d) + bisectRange(range, 0 === k); + + ranges.push({ range, isEmpty }); + } + } + } + + return ranges; +} diff --git a/core/frontend/src/tile/IModelTileIO.ts b/core/frontend/src/tile/IModelTileIO.ts index b863f80..59c29e9 100644 --- a/core/frontend/src/tile/IModelTileIO.ts +++ b/core/frontend/src/tile/IModelTileIO.ts @@ -26,7 +26,7 @@ import { AuxChannelTableProps, } from "../render/primitives/AuxChannelTable"; import { Id64String, JsonUtils, assert } from "@bentley/bentleyjs-core"; -import { RenderSystem, RenderGraphic, PackedFeatureTable, GraphicBranch } from "../render/System"; +import { InstancedGraphicParams, RenderSystem, RenderGraphic, PackedFeatureTable, GraphicBranch } from "../render/System"; import { imageElementFromImageSource } from "../ImageUtil"; import { ElementAlignedBox3d, @@ -49,11 +49,11 @@ import { Mesh } from "../render/primitives/mesh/MeshPrimitives"; import { Range2d, Point3d, Range3d, Transform } from "@bentley/geometry-core"; /** Provides facilities for deserializing tiles in 'imodel' format. These tiles contain element geometry encoded into a format optimized for the imodeljs webgl renderer. - * @hidden + * @internal */ export namespace IModelTileIO { /** Flags describing the geometry contained within a tile. - * @hidden + * @internal */ export const enum Flags { /** No special flags */ @@ -64,23 +64,25 @@ export namespace IModelTileIO { Incomplete = 1 << 2, } - /** Describes the major and minor version of the tile format supported by this front-end package. */ + /** Describes the maximum major and minor version of the tile format supported by this front-end package. + * @internal + */ export const enum CurrentVersion { /** The unsigned 16-bit major version number. If the major version specified in the tile header is greater than this value, then this * front-end is not capable of reading the tile content. Otherwise, this front-end can read the tile content even if the header specifies a * greater minor version than CurrentVersion.Minor, although some data may be skipped. */ - Major = 1, + Major = 2, /** The unsigned 16-bit minor version number. If the major version in the tile header is equal to CurrentVersion.Major, then this front-end can * read the tile content even if the minor version in the tile header is greater than this value, although some data may be skipped. */ - Minor = 4, + Minor = 0, /** The unsigned 32-bit version number derived from the 16-bit major and minor version numbers. */ Combined = (Major << 0x10) | Minor, } /** Header embedded at the beginning of the binary tile data describing its contents. - * @hidden + * @internal */ export class Header extends TileIO.Header { /** The size of this header in bytes. */ @@ -97,6 +99,8 @@ export namespace IModelTileIO { public readonly numElementsExcluded: number; /** The total number of bytes in the binary tile data, including this header */ public readonly tileLength: number; + /** A bitfield wherein each set bit indicates an empty sub-volume. */ + public readonly emptySubRanges: number; public get versionMajor(): number { return this.version >>> 0x10; } public get versionMinor(): number { return (this.version & 0xffff) >>> 0; } @@ -123,6 +127,9 @@ export namespace IModelTileIO { this.numElementsExcluded = stream.nextUint32; this.tileLength = stream.nextUint32; + // empty sub-volume bit field introduced in format v02.00 + this.emptySubRanges = this.versionMajor >= 2 ? stream.nextUint32 : 0; + // Skip any unprocessed bytes in header const remainingHeaderBytes = this.headerLength - stream.curPos; assert(remainingHeaderBytes >= 0); @@ -133,7 +140,7 @@ export namespace IModelTileIO { } } - /** @hidden */ + /** @internal */ class FeatureTableHeader { public static readFrom(stream: TileIO.StreamBuffer) { const length = stream.nextUint32; @@ -153,7 +160,7 @@ export namespace IModelTileIO { const minElementsPerTile = 100; /** Deserializes an iModel tile. - * @hidden + * @internal */ export class Reader extends GltfTileIO.Reader { private readonly _sizeMultiplier?: number; @@ -201,7 +208,9 @@ export namespace IModelTileIO { if (emptyTile || this._isClassifier) { // Classifier algorithm currently supports only a single tile. isLeaf = true; } else { - const canSkipSubdivision = header.tolerance <= maxLeafTolerance; + // Non-spatial (2d) models are of arbitrary scale and contain geometry like line work and especially text which + // can be adversely affected by quantization issues when zooming in closely. + const canSkipSubdivision = this._is3d && header.tolerance <= maxLeafTolerance; if (canSkipSubdivision) { if (completeTile && 0 === header.numElementsExcluded && header.numElementsIncluded <= minElementsPerTile) { const containsCurves = 0 !== (header.flags & IModelTileIO.Flags.ContainsCurves); @@ -215,7 +224,7 @@ export namespace IModelTileIO { } } - return Promise.resolve(this.finishRead(isLeaf, featureTable, header.contentRange, sizeMultiplier)); + return Promise.resolve(this.finishRead(isLeaf, featureTable, header.contentRange, header.emptySubRanges, sizeMultiplier)); } /** @hidden */ @@ -457,13 +466,14 @@ export namespace IModelTileIO { const isPlanar = JsonUtils.asBool(primitive.isPlanar); const primitiveType = JsonUtils.asInt(primitive.type, Mesh.PrimitiveType.Mesh); + const instances = this.readInstances(primitive); switch (primitiveType) { case Mesh.PrimitiveType.Mesh: - return this.createMeshGraphic(primitive, displayParams, vertices, isPlanar, this.readAuxChannelTable(primitive)); + return this.createMeshGraphic(primitive, displayParams, vertices, isPlanar, this.readAuxChannelTable(primitive), instances); case Mesh.PrimitiveType.Polyline: - return this.createPolylineGraphic(primitive, displayParams, vertices, isPlanar); + return this.createPolylineGraphic(primitive, displayParams, vertices, isPlanar, instances); case Mesh.PrimitiveType.Point: - return this.createPointStringGraphic(primitive, displayParams, vertices); + return this.createPointStringGraphic(primitive, displayParams, vertices, instances); } assert(false, "unhandled primitive type"); @@ -554,18 +564,59 @@ export namespace IModelTileIO { return AuxChannelTable.fromJSON(props); } + // ###TODO_INSTANCING: Remove me once feature complete... + private static _forceInstancing = false; + private static _fakeInstanceParams = { + transforms: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]), + featureIds: new Uint8Array([0, 0, 0]), + count: 1, + }; + private readInstances(primitive: any): InstancedGraphicParams | undefined { + if (Reader._forceInstancing) + return Reader._fakeInstanceParams; + + const json = primitive.instances; + if (undefined === json) + return undefined; + + const count = JsonUtils.asInt(json.count, 0); + if (count <= 0) + return undefined; + + const featureIds = this.findBuffer(JsonUtils.asString(json.featureIds)); + if (undefined === featureIds) + return undefined; + + const transformBytes = this.findBuffer(JsonUtils.asString(json.transforms)); + if (undefined === transformBytes) + return undefined; + + // 1 transform = 3 rows of 4 floats = 12 floats per instance + const numFloats = transformBytes.byteLength / 4; + assert(Math.floor(numFloats) === numFloats); + assert(0 === numFloats % 12); + + const transforms = new Float32Array(transformBytes.buffer, transformBytes.byteOffset, numFloats); + + let symbologyOverrides: Uint8Array | undefined; + if (undefined !== json.symbologyOverrides) + symbologyOverrides = this.findBuffer(JsonUtils.asString(json.symbologyOverrides)); + + return { count, transforms, featureIds, symbologyOverrides }; + } + private readVertexIndices(json: any): VertexIndices | undefined { const bytes = this.findBuffer(json as string); return undefined !== bytes ? new VertexIndices(bytes) : undefined; } - private createPointStringGraphic(primitive: any, displayParams: DisplayParams, vertices: VertexTable): RenderGraphic | undefined { + private createPointStringGraphic(primitive: any, displayParams: DisplayParams, vertices: VertexTable, instances: InstancedGraphicParams | undefined): RenderGraphic | undefined { const indices = this.readVertexIndices(primitive.indices); if (undefined === indices) return undefined; const params = new PointStringParams(vertices, indices, displayParams.width); - return this._system.createPointString(params); + return this._system.createPointString(params, instances); } private readTesselatedPolyline(json: any): TesselatedPolyline | undefined { @@ -583,7 +634,7 @@ export namespace IModelTileIO { }; } - private createPolylineGraphic(primitive: any, displayParams: DisplayParams, vertices: VertexTable, isPlanar: boolean): RenderGraphic | undefined { + private createPolylineGraphic(primitive: any, displayParams: DisplayParams, vertices: VertexTable, isPlanar: boolean, instances: InstancedGraphicParams | undefined): RenderGraphic | undefined { const polyline = this.readTesselatedPolyline(primitive); if (undefined === polyline) return undefined; @@ -593,7 +644,7 @@ export namespace IModelTileIO { flags = (undefined === displayParams.gradient || displayParams.gradient.isOutlined) ? PolylineTypeFlags.Edge : PolylineTypeFlags.Outline; const params = new PolylineParams(vertices, polyline, displayParams.width, displayParams.linePixels, isPlanar, flags); - return this._system.createPolyline(params); + return this._system.createPolyline(params, instances); } private readSurface(mesh: any, displayParams: DisplayParams): SurfaceParams | undefined { @@ -663,7 +714,7 @@ export namespace IModelTileIO { return { succeeded, params }; } - private createMeshGraphic(primitive: any, displayParams: DisplayParams, vertices: VertexTable, isPlanar: boolean, auxChannels: AuxChannelTable | undefined): RenderGraphic | undefined { + private createMeshGraphic(primitive: any, displayParams: DisplayParams, vertices: VertexTable, isPlanar: boolean, auxChannels: AuxChannelTable | undefined, instances: InstancedGraphicParams | undefined): RenderGraphic | undefined { const surface = this.readSurface(primitive, displayParams); if (undefined === surface) return undefined; @@ -679,10 +730,10 @@ export namespace IModelTileIO { } const params = new MeshParams(vertices, surface, edgeParams, isPlanar, auxChannels); - return this._system.createMesh(params); + return this._system.createMesh(params, instances); } - private finishRead(isLeaf: boolean, featureTable: PackedFeatureTable, contentRange: ElementAlignedBox3d, sizeMultiplier?: number): GltfTileIO.ReaderResult { + private finishRead(isLeaf: boolean, featureTable: PackedFeatureTable, contentRange: ElementAlignedBox3d, emptySubRangeMask: number, sizeMultiplier?: number): GltfTileIO.ReaderResult { const graphics: RenderGraphic[] = []; if (undefined === this._nodes.Node_Root) { @@ -745,7 +796,8 @@ export namespace IModelTileIO { isLeaf, sizeMultiplier, contentRange: contentRange.isNull ? undefined : contentRange, - renderGraphic: tileGraphic, + graphic: tileGraphic, + emptySubRangeMask, }; } } diff --git a/core/frontend/src/tile/PntsTileIO.ts b/core/frontend/src/tile/PntsTileIO.ts index 2dd15f3..436785b 100644 --- a/core/frontend/src/tile/PntsTileIO.ts +++ b/core/frontend/src/tile/PntsTileIO.ts @@ -13,10 +13,10 @@ import { Transform, Point3d, Matrix3d, Angle, Vector3d } from "@bentley/geometry import { IModelConnection } from "../IModelConnection"; /** Deserializes a Pnts tile. - * @hidden + * @internal */ export namespace PntsTileIO { - /** @hidden */ + /** @internal */ class Header extends TileIO.Header { public readonly length: number; public readonly featureTableJsonLength: number; @@ -36,7 +36,7 @@ export namespace PntsTileIO { } /** Deserialize a point cloud tile and return it as a RenderGraphic. - * @hidden + * @internal */ export function readPointCloud(stream: TileIO.StreamBuffer, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem, yAxisUp: boolean): RenderGraphic | undefined { const header: Header = new Header(stream); diff --git a/core/frontend/src/tile/RealityModelTileTree.ts b/core/frontend/src/tile/RealityModelTileTree.ts index 1861864..468b181 100644 --- a/core/frontend/src/tile/RealityModelTileTree.ts +++ b/core/frontend/src/tile/RealityModelTileTree.ts @@ -13,9 +13,11 @@ import { TileTree, TileTreeState, Tile, TileLoader } from "./TileTree"; import { TileRequest } from "./TileRequest"; import { IModelApp } from "../IModelApp"; -/** @hidden */ -function getUrl(content: any) { return content ? (content.url ? content.url : content.uri) : undefined; } -/** @hidden */ +function getUrl(content: any) { + return content ? (content.url ? content.url : content.uri) : undefined; +} + +/** @internal */ export class RealityModelTileUtils { public static rangeFromBoundingVolume(boundingVolume: any): Range3d | undefined { if (undefined === boundingVolume) @@ -56,7 +58,7 @@ export class RealityModelTileUtils { } } -/** @hidden */ +/** @internal */ class RealityModelTileTreeProps implements TileTreeProps { public id: string = ""; public rootTile: TileProps; @@ -72,7 +74,7 @@ class RealityModelTileTreeProps implements TileTreeProps { } } -/** @hidden */ +/** @internal */ class RealityModelTileProps implements TileProps { public readonly contentId: string; public readonly range: Range3dProps; @@ -97,12 +99,12 @@ class RealityModelTileProps implements TileProps { } } -/** @hidden */ +/** @internal */ class FindChildResult { constructor(public id: string, public json: any, public transformToRoot?: Transform) { } } -/** @hidden */ +/** @internal */ class RealityModelTileLoader extends TileLoader { constructor(private _tree: RealityModelTileTreeProps) { super(); } public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working. @@ -182,7 +184,7 @@ class RealityModelTileLoader extends TileLoader { } } -/** @hidden */ +/** @internal */ export class RealityModelTileTree { public static loadRealityModelTileTree(url: string, tilesetToDb: any, tileTreeState: TileTreeState): void { @@ -220,7 +222,7 @@ interface RDSClientProps { /** * ###TODO temporarly here for testing, needs to be moved to the clients repo - * @hidden + * @internal * This class encapsulates access to a reality data wether it be from local access, http or RDS * The url provided at the creation is parsed to determine if this is a RDS (ProjectWise Context Share) reference. * If not then it is considered local (ex: C:\temp\TileRoot.json) or plain http access (http://someserver.com/data/TileRoot.json) diff --git a/core/frontend/src/tile/TileAdmin.ts b/core/frontend/src/tile/TileAdmin.ts index 994b335..e956fdf 100644 --- a/core/frontend/src/tile/TileAdmin.ts +++ b/core/frontend/src/tile/TileAdmin.ts @@ -16,12 +16,16 @@ import { IModelConnection } from "../IModelConnection"; * a set of active requests. On each update it identifies previously-requested tiles whose content no viewport is interested in any longer and * cancels them. It then pulls pending requests off the queue and dispatches them into the active set until either the maximum number of * simultaneously-active requests is reached or the queue becomes empty. - * @hidden + * @alpha */ export abstract class TileAdmin { + /** @internal */ public abstract get emptyViewportSet(): TileAdmin.ViewportSet; /** Returns basic statistics about the TileAdmin's current state. */ public abstract get statistics(): TileAdmin.Statistics; + /** Resets the cumulative (per-session) statistics like totalCompletedRequests, totalEmptyTiles, etc. */ + public abstract resetStatistics(): void; + /** Controls the maximum number of simultaneously-active requests allowed. * If the maximum is reduced below the current size of the active set, no active requests will be canceled - but no more will be dispatched until the * size of the active set falls below the new maximum. @@ -29,40 +33,76 @@ export abstract class TileAdmin { * @note Browsers impose their own limitations on maximum number of total connections, and connections per-domain. These limitations are * especially strict when using HTTP1.1 instead of HTTP2. Increasing the maximum above the default may significantly affect performance as well as * bandwidth and memory consumption. + * @alpha */ public abstract set maxActiveRequests(max: number); public abstract get maxActiveRequests(): number; /** @internal */ public abstract get enableInstancing(): boolean; + public abstract get elideEmptyChildContentRequests(): boolean; - /** Returns the union of the input set and the input viewport. */ + /** Returns the union of the input set and the input viewport. + * @internal + */ public abstract getViewportSet(vp: Viewport, vps?: TileAdmin.ViewportSet): TileAdmin.ViewportSet; - /** Invoked from the [[ToolAdmin]] event loop to process any pending or active requests for tiles. */ + + /** Invoked from the [[ToolAdmin]] event loop to process any pending or active requests for tiles. + * @internal + */ public abstract process(): void; + /** Specifies the set of tiles currently requested for use by a viewport. This set replaces any previously specified for the same viewport. * The requests are not actually processed until the next call to [[TileAdmin.process]. * This is typically invoked when the viewport recreates its scene, e.g. in response to camera movement. + * @internal */ public abstract requestTiles(vp: Viewport, tiles: Set): void; - /** Returns the number of pending and active requests associated with the specified viewport. */ + + /** Returns the number of pending and active requests associated with the specified viewport. + * @alpha + */ public abstract getNumRequestsForViewport(vp: Viewport): number; + /** Indicates that the TileAdmin should cease tracking the specified viewport, e.g. because it is about to be destroyed. * Any requests which are of interest only to the specified viewport will be canceled. + * @internal */ public abstract forgetViewport(vp: Viewport): void; + + /** @internal */ public abstract onShutDown(): void; + /** @internal */ public abstract async requestTileTreeProps(iModel: IModelConnection, treeId: string): Promise; + + /** @internal */ public abstract async requestTileContent(iModel: IModelConnection, treeId: string, contentId: string): Promise; + /** Create a TileAdmin. Chiefly intended for use by subclasses of [[IModelApp]] to customize the behavior of the TileAdmin. + * @param props Options for customizing the behavior of the TileAdmin. + * @returns the TileAdmin + * @beta + */ public static create(props?: TileAdmin.Props): TileAdmin { return new Admin(props); } + + /** @internal */ + public abstract onTileCompleted(tile: Tile): void; + /** @internal */ + public abstract onTileTimedOut(tile: Tile): void; + /** @internal */ + public abstract onTileFailed(tile: Tile): void; + /** @internal */ + public abstract onTileElided(): void; } -/** @hidden */ +/** @alpha */ export namespace TileAdmin { + /** Statistics regarding the current and cumulative state of the [[TileAdmin]]. Useful for monitoring performance and diagnosing problems. + * @alpha + */ export interface Statistics { /** The number of requests in the queue which have not yet been dispatched. */ numPendingRequests: number; @@ -70,10 +110,23 @@ export namespace TileAdmin { numActiveRequests: number; /** The number of requests canceled during the most recent update. */ numCanceled: number; + /** The total number of completed requests during this session. */ + totalCompletedRequests: number; + /** The total number of failed requests during this session. */ + totalFailedRequests: number; + /** The total number of timed-out requests during this session. */ + totalTimedOutRequests: number; + /** The total number of completed requests during this session which produced an empty tile. These tiles also contribute to totalCompletedRequests, but not to totalUndisplayableTiles. */ + totalEmptyTiles: number; + /** The total number of completed requests during this session which produced an undisplayable tile. These tiles also contribute to totalCompletedRequests, but not to totalEmptyTiles. */ + totalUndisplayableTiles: number; + /** The total number of tiles whose contents were not requested during this session because their volumes were determined to be empty. */ + totalElidedTiles: number; } /** Describes configuration of a [[TileAdmin]]. * @see [[TileAdmin.create]] + * @alpha */ export interface Props { /** The maximum number of simultaneously-active requests. Any requests beyond this maximum are placed into a priority queue. @@ -99,11 +152,19 @@ export namespace TileAdmin { /** If defined, requests for tile content or tile tree properties will be memoized and retried at the specified interval in milliseconds */ retryInterval?: number; + + /** If true, requests for content of a child tile will be elided if the child tile's range can be determined to be empty + * based on metadata embedded in the parent's content. + * + * Default value: false + */ + elideEmptyChildContentRequests?: boolean; } /** A set of [[Viewport]]s. * ViewportSets are managed and cached by [[TileAdmin]] such that any number of [[TileRequest]]s associated with the same set of viewports will * use the same ViewportSet object. + * @internal */ export class ViewportSet extends SortedArray { public constructor(vp?: Viewport) { @@ -232,12 +293,19 @@ class Admin extends TileAdmin { private readonly _throttle: boolean; private readonly _retryInterval: number; private readonly _enableInstancing: boolean; + private readonly _elideEmptyChildContentRequests: boolean; private readonly _removeIModelConnectionOnCloseListener: () => void; private _activeRequests = new Set(); private _swapActiveRequests = new Set(); private _pendingRequests = new Queue(); private _swapPendingRequests = new Queue(); private _numCanceled = 0; + private _totalCompleted = 0; + private _totalFailed = 0; + private _totalTimedOut = 0; + private _totalEmpty = 0; + private _totalUndisplayable = 0; + private _totalElided = 0; private _retryIntervalInitialized = false; private get _memoizeRequests() { return this._retryInterval > 0; } @@ -247,9 +315,19 @@ class Admin extends TileAdmin { numPendingRequests: this._pendingRequests.length, numActiveRequests: this._activeRequests.size, numCanceled: this._numCanceled, + totalCompletedRequests: this._totalCompleted, + totalFailedRequests: this._totalFailed, + totalTimedOutRequests: this._totalTimedOut, + totalEmptyTiles: this._totalEmpty, + totalUndisplayableTiles: this._totalUndisplayable, + totalElidedTiles: this._totalElided, }; } + public resetStatistics(): void { + this._totalCompleted = this._totalFailed = this._totalTimedOut = this._totalEmpty = this._totalUndisplayable = this._totalElided = 0; + } + public constructor(options?: TileAdmin.Props) { super(); @@ -260,11 +338,13 @@ class Admin extends TileAdmin { this._maxActiveRequests = undefined !== options.maxActiveRequests ? options.maxActiveRequests : 10; this._retryInterval = undefined !== options.retryInterval ? options.retryInterval : 0; this._enableInstancing = !!options.enableInstancing; + this._elideEmptyChildContentRequests = !!options.elideEmptyChildContentRequests; this._removeIModelConnectionOnCloseListener = IModelConnection.onClose.addListener((iModel) => this.onIModelClosed(iModel)); } public get enableInstancing() { return this._enableInstancing; } + public get elideEmptyChildContentRequests() { return this._elideEmptyChildContentRequests; } public get maxActiveRequests() { return this._maxActiveRequests; } public set maxActiveRequests(max: number) { @@ -437,4 +517,15 @@ class Admin extends TileAdmin { } } } + + public onTileFailed(_tile: Tile) { ++this._totalFailed; } + public onTileTimedOut(_tile: Tile) { ++this._totalTimedOut; } + public onTileElided() { ++this._totalElided; } + public onTileCompleted(tile: Tile) { + ++this._totalCompleted; + if (tile.isEmpty) + ++this._totalEmpty; + else if (!tile.isDisplayable) + ++this._totalUndisplayable; + } } diff --git a/core/frontend/src/tile/TileIO.ts b/core/frontend/src/tile/TileIO.ts index 10c1e1c..5951862 100644 --- a/core/frontend/src/tile/TileIO.ts +++ b/core/frontend/src/tile/TileIO.ts @@ -8,9 +8,13 @@ import { assert, Id64, Id64String } from "@bentley/bentleyjs-core"; import { Point3d } from "@bentley/geometry-core"; import { MeshList } from "../render/primitives/mesh/MeshPrimitives"; -/** Provides facilities for deserializing 3d tiles */ +/** Provides facilities for deserializing 3d tiles. + * @internal + */ export namespace TileIO { - /** Status codes for tile reading operations */ + /** Status codes for tile reading operations + * @internal + */ export const enum ReadStatus { Success = 0, InvalidTileData, @@ -22,7 +26,9 @@ export namespace TileIO { Canceled, } - /** Type codes for various tile formats. Often these are embedded as 'magic numbers' in a binary stream to indicate the format. */ + /** Type codes for various tile formats. Often these are embedded as 'magic numbers' in a binary stream to indicate the format. + * @internal + */ export const enum Format { Unknown = 0, B3dm = 0x6d643362, // "b3dm" @@ -59,6 +65,7 @@ export namespace TileIO { * Wraps a binary stream along with a current read position. The position can be adjusted by the caller. * Methods and properties beginning with 'next' consume data at the current read position and advance it * by the size of the data read. + * @internal */ export class StreamBuffer { private readonly _view: DataView; @@ -128,6 +135,7 @@ export namespace TileIO { * The base header preceding tile data, identifying the tile format and version of that format. * Specific tile formats may define their own headers as sub-types of this Header, appending * additional format-specific data. + * @internal */ export abstract class Header { private _format: Format; @@ -148,7 +156,7 @@ export namespace TileIO { protected invalidate(): void { this._format = Format.Unknown; } } - /** @hidden */ + /** @internal */ export class GeometryCollection { public constructor(public readonly meshes: MeshList, public readonly isComplete: boolean, diff --git a/core/frontend/src/tile/TileRequest.ts b/core/frontend/src/tile/TileRequest.ts index 2e11316..6888194 100644 --- a/core/frontend/src/tile/TileRequest.ts +++ b/core/frontend/src/tile/TileRequest.ts @@ -5,8 +5,7 @@ /** @module Tile */ import { assert, base64StringToUint8Array } from "@bentley/bentleyjs-core"; -import { ImageSource, ElementAlignedBox3d, ServerTimeoutError } from "@bentley/imodeljs-common"; -import { RenderGraphic } from "../render/System"; +import { ImageSource, ServerTimeoutError } from "@bentley/imodeljs-common"; import { Tile, TileTree, TileLoader } from "./TileTree"; import { TileAdmin } from "./TileAdmin"; import { Viewport } from "../Viewport"; @@ -14,7 +13,7 @@ import { IModelApp } from "../IModelApp"; /** Represents a pending or active request to load the contents of a [[Tile]]. The request coordinates with a [[TileLoader]] to execute the request for tile content and * convert the result into a renderable graphic. - * @hidden + * @internal */ export class TileRequest { /** The requested tile. While the request is pending or active, `tile.request` points back to this TileRequest. */ @@ -61,6 +60,7 @@ export class TileRequest { // Invalidate scene - if tile is re-selected, it will be re-requested. this.notifyAndClear(); this._state = TileRequest.State.Failed; + IModelApp.tileAdmin.onTileTimedOut(this.tile); } else { // Unknown error - not retryable. this.setFailed(); @@ -92,6 +92,7 @@ export class TileRequest { this.notifyAndClear(); this._state = TileRequest.State.Failed; this.tile.setNotFound(); + IModelApp.tileAdmin.onTileFailed(this.tile); } /** Invoked when the raw tile content becomes available, to convert it into a tile graphic. */ @@ -114,13 +115,14 @@ export class TileRequest { this._state = TileRequest.State.Loading; try { - const graphic = await this.loader.loadTileGraphic(this.tile, data); + const content = await this.loader.loadTileContent(this.tile, data); if (this.isCanceled) return Promise.resolve(); this._state = TileRequest.State.Completed; - this.tile.setGraphic(graphic.renderGraphic, graphic.isLeaf, graphic.contentRange, graphic.sizeMultiplier); + this.tile.setContent(content); this.notifyAndClear(); + IModelApp.tileAdmin.onTileCompleted(this.tile); } catch (_err) { this.setFailed(); } @@ -129,14 +131,20 @@ export class TileRequest { } } -/** @hidden */ +/** @internal */ export namespace TileRequest { - /** The type of a raw response to a request for tile content. Processed upon receipt into a [[TileRequest.Response]] type. */ + /** The type of a raw response to a request for tile content. Processed upon receipt into a [[TileRequest.Response]] type. + * @internal + */ export type Response = Uint8Array | ArrayBuffer | string | ImageSource | undefined; - /** The input to [[TileLoader.loadTileGraphic]], to be converted into a [[TileRequest.Graphic]]. */ + /** The input to [[TileLoader.loadTileContent]], to be converted into a [[Tile.Content]]. + * @internal + */ export type ResponseData = Uint8Array | ImageSource; - /** The states through which a TileRequest proceeds. During the first 3 states, the [[Tile]]'s `request` member is defined, and its [[Tile.LoadStatus]] is computed based on the state of its request. */ + /** The states through which a TileRequest proceeds. During the first 3 states, the [[Tile]]'s `request` member is defined, and its [[Tile.LoadStatus]] is computed based on the state of its request. + * @internal + */ export const enum State { /** Initial state. Request is pending but not yet dispatched. */ Queued, @@ -149,12 +157,4 @@ export namespace TileRequest { /** Follows any state in which an error prevents progression, or during which the request was canceled. */ Failed, } - - /** The result of [[TileLoader.loadTileGraphic]]. */ - export interface Graphic { - renderGraphic?: RenderGraphic; - isLeaf?: boolean; - contentRange?: ElementAlignedBox3d; - sizeMultiplier?: number; - } } diff --git a/core/frontend/src/tile/TileTree.ts b/core/frontend/src/tile/TileTree.ts index a3e0a79..f422ac9 100644 --- a/core/frontend/src/tile/TileTree.ts +++ b/core/frontend/src/tile/TileTree.ts @@ -4,9 +4,38 @@ *--------------------------------------------------------------------------------------------*/ /** @module Tile */ -import { assert, BeDuration, BeTimePoint, dispose, Id64, Id64String, IDisposable, JsonUtils } from "@bentley/bentleyjs-core"; -import { ClipPlaneContainment, ClipVector, Point3d, Range3d, Transform } from "@bentley/geometry-core"; -import { BatchType, ColorDef, ElementAlignedBox3d, Frustum, FrustumPlanes, RenderMode, TileProps, TileTreeProps, ViewFlag, ViewFlags, BoundingSphere } from "@bentley/imodeljs-common"; +import { + assert, + BeDuration, + BeTimePoint, + dispose, + Id64, + Id64String, + IDisposable, + JsonUtils, +} from "@bentley/bentleyjs-core"; +import { + Arc3d, + ClipPlaneContainment, + ClipVector, + Point3d, + Range3d, + Transform, + Vector3d, +} from "@bentley/geometry-core"; +import { + BatchType, + BoundingSphere, + ColorDef, + ElementAlignedBox3d, + Frustum, + FrustumPlanes, + RenderMode, + TileProps, + TileTreeProps, + ViewFlag, + ViewFlags, +} from "@bentley/imodeljs-common"; import { IModelApp } from "../IModelApp"; import { IModelConnection } from "../IModelConnection"; import { GraphicBranch, RenderGraphic, RenderMemory } from "../render/System"; @@ -17,11 +46,14 @@ import { CompositeTileIO } from "./CompositeTileIO"; import { GltfTileIO } from "./GltfTileIO"; import { I3dmTileIO } from "./I3dmTileIO"; import { IModelTileIO } from "./IModelTileIO"; +import { computeChildRanges } from "./IModelTile"; import { PntsTileIO } from "./PntsTileIO"; import { TileIO } from "./TileIO"; import { TileRequest } from "./TileRequest"; -/** @hidden */ +/** A 3d tile within a [[TileTree]]. + * @internal + */ export class Tile implements IDisposable, RenderMemory.Consumer { public readonly root: TileTree; public readonly range: ElementAlignedBox3d; @@ -45,6 +77,7 @@ export class Tile implements IDisposable, RenderMemory.Consumer { protected _transformToRoot?: Transform; protected _localRange?: ElementAlignedBox3d; protected _localContentRange?: ElementAlignedBox3d; + protected _emptySubRangeMask?: number; private _state: TileState; public constructor(props: Tile.Params) { @@ -144,7 +177,9 @@ export class Tile implements IDisposable, RenderMemory.Consumer { public get isNotFound(): boolean { return Tile.LoadStatus.NotFound === this.loadStatus; } public get isReady(): boolean { return Tile.LoadStatus.Ready === this.loadStatus; } - public setGraphic(graphic: RenderGraphic | undefined, isLeaf?: boolean, contentRange?: ElementAlignedBox3d, sizeMultiplier?: number): void { + public setContent(content: Tile.Content): void { + const { graphic, isLeaf, contentRange, sizeMultiplier } = content; + this._graphic = graphic; if (undefined === graphic) this._maximumSize = 0; @@ -158,7 +193,7 @@ export class Tile implements IDisposable, RenderMemory.Consumer { if (undefined !== sizeMultiplier && (undefined === this._sizeMultiplier || sizeMultiplier > this._sizeMultiplier)) { this._sizeMultiplier = sizeMultiplier; - this.contentId = this.contentId.substring(0, this.contentId.lastIndexOf("/") + 1) + sizeMultiplier; + this.contentId = this.loader.adjustContentIdSizeMultiplier(this.contentId, sizeMultiplier); if (undefined !== this._children && this._children.length > 1) this.unloadChildren(); } @@ -166,6 +201,8 @@ export class Tile implements IDisposable, RenderMemory.Consumer { if (undefined !== contentRange) this._contentRange = contentRange; + this._emptySubRangeMask = content.emptySubRangeMask; + this.setIsReady(); } @@ -187,6 +224,7 @@ export class Tile implements IDisposable, RenderMemory.Consumer { public get isLeaf(): boolean { return this._isLeaf; } public get isDisplayable(): boolean { return this.maximumSize > 0; } public get isParentDisplayable(): boolean { return undefined !== this.parent && this.parent.isDisplayable; } + public get emptySubRangeMask(): number { return undefined !== this._emptySubRangeMask ? this._emptySubRangeMask : 0; } public get graphics(): RenderGraphic | undefined { return this._graphic; } public get hasGraphics(): boolean { return undefined !== this.graphics; } @@ -217,6 +255,22 @@ export class Tile implements IDisposable, RenderMemory.Consumer { builder.setSymbology(ColorDef.red, ColorDef.red, 1); builder.addRangeBox(this.contentRange); } + } else if (Tile.DebugBoundingBoxes.ChildVolumes === type) { + const ranges = computeChildRanges(this); + for (const range of ranges) { + const color = range.isEmpty ? ColorDef.blue : ColorDef.green; + builder.setSymbology(color, color, 1); + builder.addRangeBox(range.range); + } + } else if (Tile.DebugBoundingBoxes.Sphere === type) { + builder.setSymbology(ColorDef.green, ColorDef.green, 1); + + const x = new Vector3d(this.radius, 0, 0); + const y = new Vector3d(0, this.radius, 0); + const z = new Vector3d(0, 0, this.radius); + builder.addArc(Arc3d.create(this.center, x, y), false, false); + builder.addArc(Arc3d.create(this.center, x, z), false, false); + builder.addArc(Arc3d.create(this.center, y, z), false, false); } else { const color = this.hasSizeMultiplier ? ColorDef.red : (this.isLeaf ? ColorDef.blue : ColorDef.green); builder.setSymbology(color, color, 1); @@ -481,11 +535,11 @@ export class Tile implements IDisposable, RenderMemory.Consumer { } } -/** @hidden */ +/** @internal */ export namespace Tile { /** * Describes the current status of a Tile. Tiles are loaded by making asynchronous requests to the backend. - * @hidden + * @internal */ export const enum LoadStatus { NotLoaded = 0, // No attempt to load the tile has been made, or the tile has since been unloaded. It currently has no graphics. @@ -498,7 +552,7 @@ export namespace Tile { /** * Describes the visibility of a tile based on its size and a view frustum. - * @hidden + * @internal */ export const enum Visibility { OutsideFrustum, // this tile is entirely outside of the viewing frustum @@ -508,7 +562,7 @@ export namespace Tile { /** * Returned by Tile.selectTiles() to indicate whether a parent tile should be drawn in place of a child tile. - * @hidden + * @internal */ export const enum SelectParent { No, @@ -518,12 +572,16 @@ export namespace Tile { /** * Loosely describes the "importance" of a tile. Requests for tiles of more "importance" are prioritized for loading. * @note A lower LoadPriority value indicates higher importance. - * @hidden + * @internal */ export const enum LoadPriority { + /** Typically, tiles generated from the contents of geometric models. */ Primary = 0, + /** Typically, context reality models. */ Context = 1, + /** Supplementary tiles used to classify the contents of geometric or reality models. */ Classifier = 2, + /** Typically, map tiles. */ Background = 3, } @@ -535,6 +593,7 @@ export namespace Tile { * - Green: An ordinary tile (sub-divides into 4 or 8 child tiles). * - Red: A tile which refines to a single higher-resolution child occupying the same volume. * @see [[Viewport.debugBoundingBoxes]] + * @internal */ export const enum DebugBoundingBoxes { /** Display no bounding boxes */ @@ -545,11 +604,15 @@ export namespace Tile { Content, /** Display both volume and content boxes. */ Both, + /** Display boxes for direct children, where blue boxes indicate empty volumes. */ + ChildVolumes, + /** Display bounding sphere. */ + Sphere, } /** * Arguments used when selecting and drawing tiles - * @hidden + * @internal */ export class DrawArgs { public readonly location: Transform; @@ -611,7 +674,7 @@ export namespace Tile { /** * Parameters used to construct a Tile. - * @hidden + * @internal */ export class Params { public constructor( @@ -631,6 +694,23 @@ export namespace Tile { return new Params(root, props.contentId, Range3d.fromJSON(props.range), props.maximumSize, props.isLeaf, parent, contentRange, transformToRoot, props.sizeMultiplier); } } + + /** + * Describes the contents of a Tile. + * @internal + */ + export interface Content { + /** Graphical representation of the tile's geometry. */ + graphic?: RenderGraphic; + /** Bounding box tightly enclosing the tile's geometry. */ + contentRange?: ElementAlignedBox3d; + /** True if this tile requires no subdivision or refinement. */ + isLeaf?: boolean; + /** If this tile was produced by refinement, the multiplier applied to its screen size. */ + sizeMultiplier?: number; + /** A bitfield describing empty sub-volumes of this tile's volume. */ + emptySubRangeMask?: number; + } } // Tile.LoadStatus is computed from the combination of Tile._state and, if Tile.request is defined, Tile.request.state. @@ -641,7 +721,9 @@ const enum TileState { Abandoned = Tile.LoadStatus.Abandoned, // tile was abandoned. } -/** @hidden */ +/** A hierarchical level-of-detail tree of 3d [[Tile]]s to be rendered in a [[Viewport]]. + * @internal + */ export class TileTree implements IDisposable, RenderMemory.Consumer { public readonly iModel: IModelConnection; public readonly is3d: boolean; @@ -720,7 +802,9 @@ const defaultViewFlagOverrides = new ViewFlag.Overrides(ViewFlags.fromJSON({ noSolarLight: true, })); -/** @hidden */ +/** Serves as a "handler" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content. + * @internal + */ export abstract class TileLoader { public abstract async getChildrenProps(parent: Tile): Promise; public abstract async requestTileContent(tile: Tile): Promise; @@ -731,7 +815,6 @@ export abstract class TileLoader { public abstract tileRequiresLoading(params: Tile.Params): boolean; /** Given two tiles of the same [[Tile.LoadPriority]], determine which should be prioritized. * A negative value indicates lhs should load first, positive indicates rhs should load first, and zero indicates no distinction in priority. - * @hidden */ public compareTilePriorities(lhs: Tile, rhs: Tile): number { return lhs.depth - rhs.depth; } public get parentsAndChildrenExclusive(): boolean { return true; } @@ -739,13 +822,13 @@ export abstract class TileLoader { public processSelectedTiles(selected: Tile[], _args: Tile.DrawArgs): Tile[] { return selected; } // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state. - public async loadTileGraphic(tile: Tile, data: TileRequest.ResponseData, isCanceled?: () => boolean): Promise { + public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, isCanceled?: () => boolean): Promise { assert(data instanceof Uint8Array); const blob = data as Uint8Array; const streamBuffer: TileIO.StreamBuffer = new TileIO.StreamBuffer(blob.buffer); - return this.loadTileGraphicFromStream(tile, streamBuffer, isCanceled); + return this.loadTileContentFromStream(tile, streamBuffer, isCanceled); } - public async loadTileGraphicFromStream(tile: Tile, streamBuffer: TileIO.StreamBuffer, isCanceled?: () => boolean): Promise { + public async loadTileContentFromStream(tile: Tile, streamBuffer: TileIO.StreamBuffer, isCanceled?: () => boolean): Promise { const position = streamBuffer.curPos; const format = streamBuffer.nextUint32; @@ -757,7 +840,7 @@ export abstract class TileLoader { let reader: GltfTileIO.Reader | undefined; switch (format) { case TileIO.Format.Pnts: - return { renderGraphic: PntsTileIO.readPointCloud(streamBuffer, tile.root.iModel, tile.root.modelId, tile.root.is3d, tile.range, IModelApp.renderSystem, tile.yAxisUp) }; + return { graphic: PntsTileIO.readPointCloud(streamBuffer, tile.root.iModel, tile.root.modelId, tile.root.is3d, tile.range, IModelApp.renderSystem, tile.yAxisUp) }; case TileIO.Format.B3dm: reader = B3dmTileIO.Reader.create(streamBuffer, tile.root.iModel, tile.root.modelId, tile.root.is3d, tile.range, IModelApp.renderSystem, tile.yAxisUp, tile.isLeaf, tile.transformToRoot, isCanceled); @@ -777,145 +860,42 @@ export abstract class TileLoader { streamBuffer.advance(8); // Skip magic and version. const tileBytes = streamBuffer.nextUint32; streamBuffer.curPos = tilePosition; - const result = await this.loadTileGraphicFromStream(tile, streamBuffer, isCanceled); - if (result.renderGraphic) - branch.add(result.renderGraphic); + const result = await this.loadTileContentFromStream(tile, streamBuffer, isCanceled); + if (result.graphic) + branch.add(result.graphic); streamBuffer.curPos = tilePosition + tileBytes; } - return { renderGraphic: branch.isEmpty ? undefined : IModelApp.renderSystem.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf, sizeMultiplier: tile.sizeMultiplier }; + return { graphic: branch.isEmpty ? undefined : IModelApp.renderSystem.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf, sizeMultiplier: tile.sizeMultiplier }; default: assert(false, "unknown tile format " + format); break; } - let graphic: TileRequest.Graphic = {}; + let content: Tile.Content = {}; if (undefined !== reader) { try { - graphic = await reader.read(); + content = await reader.read(); } catch (_err) { - // + // Failure to load should prevent us from trying to load children + content.isLeaf = true; } } - return graphic; + return content; } public get viewFlagOverrides(): ViewFlag.Overrides { return defaultViewFlagOverrides; } + public adjustContentIdSizeMultiplier(contentId: string, _sizeMultipler: number): string { return contentId; } } -function bisectRange3d(range: Range3d, takeUpper: boolean): void { - const diag = range.diagonal(); - const pt = takeUpper ? range.high : range.low; - if (diag.x > diag.y && diag.x > diag.z) - pt.x = (range.low.x + range.high.x) / 2.0; - else if (diag.y > diag.z) - pt.y = (range.low.y + range.high.y) / 2.0; - else - pt.z = (range.low.z + range.high.z) / 2.0; -} - -function bisectRange2d(range: Range3d, takeUpper: boolean): void { - const diag = range.diagonal(); - const pt = takeUpper ? range.high : range.low; - if (diag.x > diag.y) - pt.x = (range.low.x + range.high.x) / 2.0; - else - pt.y = (range.low.y + range.high.y) / 2.0; -} - -/** @hidden */ -export class IModelTileLoader extends TileLoader { - private _iModel: IModelConnection; - private _type: BatchType; - private _edgesRequired: boolean; - protected get _batchType() { return this._type; } - protected get _loadEdges(): boolean { return this._edgesRequired; } - - public constructor(iModel: IModelConnection, batchType: BatchType, edgesRequired: boolean = true) { - super(); - this._iModel = iModel; - this._type = batchType; - this._edgesRequired = edgesRequired; - } - - public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working. - public get priority(): Tile.LoadPriority { return BatchType.Classifier === this._batchType ? Tile.LoadPriority.Classifier : Tile.LoadPriority.Primary; } - public tileRequiresLoading(params: Tile.Params): boolean { return 0 !== params.maximumSize; } - - protected static _viewFlagOverrides = new ViewFlag.Overrides(); - public get viewFlagOverrides() { return IModelTileLoader._viewFlagOverrides; } - - public async getChildrenProps(parent: Tile): Promise { - const kids: TileProps[] = []; - - // Leaf nodes have no children. - if (parent.isLeaf) - return kids; - - // One child, same range as parent, higher-resolution. - if (parent.hasSizeMultiplier) { - const sizeMultiplier = 2 * parent.sizeMultiplier; - let contentId = parent.contentId; - const lastSlashPos = contentId.lastIndexOf("/"); - assert(-1 !== lastSlashPos); - contentId = contentId.substring(0, lastSlashPos + 1) + sizeMultiplier.toString(16); - kids.push({ - contentId, - range: parent.range, - contentRange: parent.contentRange, - sizeMultiplier, - isLeaf: false, - maximumSize: 512, - }); - - return kids; - } - - // Sub-divide parent's range into 4 (for 2d trees) or 8 (for 3d trees) child tiles. - const parentIdParts = parent.contentId.split("/"); - assert(5 === parentIdParts.length); - - const pDepth = parseInt(parentIdParts[0], 16); - assert(parent.depth === pDepth); - const pI = parseInt(parentIdParts[1], 16); - const pJ = parseInt(parentIdParts[2], 16); - const pK = parseInt(parentIdParts[3], 16); - - const is2d = parent.root.is2d; - const bisectRange = is2d ? bisectRange2d : bisectRange3d; - for (let i = 0; i < 2; i++) { - for (let j = 0; j < 2; j++) { - for (let k = 0; k < (is2d ? 1 : 2); k++) { - const range = parent.range.clone(); - bisectRange(range, 0 === i); - bisectRange(range, 0 === j); - if (!is2d) - bisectRange(range, 0 === k); - - const cI = pI * 2 + i; - const cJ = pJ * 2 + j; - const cK = pK * 2 + k; - const childId = (parent.depth + 1).toString(16) + "/" + cI.toString(16) + "/" + cJ.toString(16) + "/" + cK.toString(16) + "/1"; - - kids.push({ contentId: childId, range, maximumSize: 512 }); - } - } - } - - return kids; - } - - public async requestTileContent(tile: Tile): Promise { - return this._iModel.tiles.getTileContent(tile.root.id, tile.contentId); - } -} - -/** @hidden */ +/** A hierarchical level-of-detail tree of 3d [[Tile]]s to be rendered in a [[Viewport]]. + * @internal + */ export namespace TileTree { /** * Parameters used to construct a TileTree - * @hidden + * @internal */ export class Params { public constructor( @@ -936,7 +916,7 @@ export namespace TileTree { } } - /** @hidden */ + /** @internal */ export enum LoadStatus { NotLoaded, Loading, @@ -945,7 +925,7 @@ export namespace TileTree { } } -/** @hidden */ +/** @internal */ export class TileTreeState { public tileTree?: TileTree; public loadStatus: TileTree.LoadStatus = TileTree.LoadStatus.NotLoaded; diff --git a/core/frontend/src/tile/WebMercatorTileTree.ts b/core/frontend/src/tile/WebMercatorTileTree.ts index 9ecbfef..9d67da8 100644 --- a/core/frontend/src/tile/WebMercatorTileTree.ts +++ b/core/frontend/src/tile/WebMercatorTileTree.ts @@ -302,21 +302,21 @@ class WebMercatorTileLoader extends TileLoader { return this._imageryProvider.loadTile(quadId.row, quadId.column, quadId.level); } - public async loadTileGraphic(tile: Tile, data: TileRequest.ResponseData, isCanceled?: () => boolean): Promise { + public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, isCanceled?: () => boolean): Promise { if (undefined === isCanceled) isCanceled = () => !tile.isLoading; assert(data instanceof ImageSource); - const graphic: TileRequest.Graphic = {}; + const content: Tile.Content = {}; const system = IModelApp.renderSystem; const texture = await this.loadTextureImage(data as ImageSource, this._iModel, system, isCanceled); if (undefined !== texture) { // we put the corners property on WebMercatorTiles const corners = (tile as any).corners; - graphic.renderGraphic = system.createTile(texture, corners); + content.graphic = system.createTile(texture, corners); } - return graphic; + return content; } private async loadTextureImage(imageSource: ImageSource, iModel: IModelConnection, system: RenderSystem, isCanceled: () => boolean): Promise { @@ -697,7 +697,8 @@ class MapBoxProvider extends ImageryProvider { } const enum GcsConverterStatus { Uninitialized, Pending, NotAvailable, Available } -/** @hidden */ + +/** @internal */ export class BackgroundMapState { private _tileTree?: TileTree; private _loadStatus: TileTree.LoadStatus = TileTree.LoadStatus.NotLoaded; diff --git a/core/frontend/src/tools/ToolAdmin.ts b/core/frontend/src/tools/ToolAdmin.ts index a10adb1..68869a0 100644 --- a/core/frontend/src/tools/ToolAdmin.ts +++ b/core/frontend/src/tools/ToolAdmin.ts @@ -20,6 +20,7 @@ import { PrimitiveTool } from "./PrimitiveTool"; import { BeButton, BeButtonEvent, BeButtonState, BeModifierKeys, BeTouchEvent, BeWheelEvent, CoordSource, EventHandled, InputCollector, InputSource, InteractiveTool, Tool } from "./Tool"; import { ViewTool } from "./ViewTool"; import { ToolSettingsPropertySyncItem } from "../properties/ToolSettingsValue"; +import { LocateOptions } from "../ElementLocateManager"; export const enum CoordinateLockOverrides { None = 0, @@ -85,15 +86,17 @@ export class ToolState { export class SuspendedToolState { private readonly _toolState: ToolState; private readonly _accuSnapState: AccuSnap.ToolState; + private readonly _locateOptions: LocateOptions; private readonly _viewCursor?: string; private _inDynamics: boolean; private _shuttingDown = false; constructor() { - const { toolAdmin, viewManager, accuSnap } = IModelApp; + const { toolAdmin, viewManager, accuSnap, locateManager } = IModelApp; toolAdmin.setIncompatibleViewportCursor(true); // Don't save this this._toolState = toolAdmin.toolState.clone(); this._accuSnapState = accuSnap.toolState.clone(); + this._locateOptions = locateManager.options.clone(); this._viewCursor = viewManager.cursor; this._inDynamics = viewManager.inDynamicsMode; if (this._inDynamics) @@ -104,10 +107,11 @@ export class SuspendedToolState { if (this._shuttingDown) return; - const { toolAdmin, viewManager, accuSnap } = IModelApp; + const { toolAdmin, viewManager, accuSnap, locateManager } = IModelApp; toolAdmin.setIncompatibleViewportCursor(true); // Don't restore this toolAdmin.toolState.setFrom(this._toolState); accuSnap.toolState.setFrom(this._accuSnapState); + locateManager.options.setFrom(this._locateOptions); viewManager.setViewCursor(this._viewCursor); if (this._inDynamics) viewManager.beginDynamicsMode(); @@ -389,8 +393,8 @@ export class ToolAdmin { this._idleTool = IModelApp.tools.create("Idle") as IdleTool; ["keydown", "keyup"].forEach((type) => { - document.addEventListener(type, ToolAdmin._keyEventHandler as EventListener, true); - ToolAdmin._removals.push(() => { document.removeEventListener(type, ToolAdmin._keyEventHandler as EventListener, true); }); + document.addEventListener(type, ToolAdmin._keyEventHandler as EventListener, false); + ToolAdmin._removals.push(() => { document.removeEventListener(type, ToolAdmin._keyEventHandler as EventListener, false); }); }); // the list of currently down keys can get out of sync if a key goes down and then we lose focus. Clear the list every time we get focus. @@ -440,10 +444,10 @@ export class ToolAdmin { this._toolEvents.push(event); // otherwise put it at the end of the queue. } - private getMousePosition(event: ToolEvent): Point2d { + private getMousePosition(event: ToolEvent): XAndY { const ev = event.ev as MouseEvent; const rect = event.vp!.getClientRect(); - return Point2d.createFrom({ x: ev.clientX - rect.left, y: ev.clientY - rect.top }); + return { x: ev.clientX - rect.left, y: ev.clientY - rect.top }; } private getMouseButton(button: number) { @@ -1150,8 +1154,10 @@ export class ToolAdmin { if (wentDown && keyEvent.ctrlKey) { switch (keyEvent.key) { case "z": + case "Z": return this.doUndoOperation(); case "y": + case "Y": return this.doRedoOperation(); } } diff --git a/core/frontend/src/tools/ViewTool.ts b/core/frontend/src/tools/ViewTool.ts index f3ba537..aca927a 100644 --- a/core/frontend/src/tools/ViewTool.ts +++ b/core/frontend/src/tools/ViewTool.ts @@ -526,6 +526,16 @@ export abstract class ViewManip extends ViewTool { const aspect = viewport.viewRect.aspect; const before = viewport.getWorldFrustum(); + const clip = viewport.view.getViewClip(); + if (undefined !== clip) { + const clipRange = clip.getRange(); + if (undefined !== clipRange) { + range.intersect(clipRange, clipRange); + if (!clipRange.isNull) + range.setFrom(clipRange); + } + } + if (this._useViewAlignedVolume) viewport.view.lookAtViewAlignedVolume(range, aspect, marginPercent); else @@ -539,6 +549,13 @@ export abstract class ViewManip extends ViewTool { viewport.synchWithView(true); } + public static async zoomToAlwaysDrawnExclusive(viewport: ScreenViewport, doAnimate: boolean, marginPercent?: MarginPercent): Promise { + if (!viewport.isAlwaysDrawnExclusive || undefined === viewport.alwaysDrawn || 0 === viewport.alwaysDrawn.size) + return false; + await viewport.zoomToElements(viewport.alwaysDrawn, { animateFrustumChange: doAnimate, marginPercent }); + return true; + } + public setCameraLensAngle(lensAngle: Angle, retainEyePoint: boolean): ViewStatus { const vp = this.viewport; if (!vp) @@ -1686,16 +1703,18 @@ export class FitViewTool extends ViewTool { public static toolId = "View.Fit"; public oneShot: boolean; public doAnimate: boolean; - constructor(viewport: ScreenViewport, oneShot: boolean, doAnimate = true) { + public isolatedOnly: boolean; + constructor(viewport: ScreenViewport, oneShot: boolean, doAnimate = true, isolatedOnly = true) { super(viewport); this.viewport = viewport; this.oneShot = oneShot; this.doAnimate = doAnimate; + this.isolatedOnly = isolatedOnly; } - public async onDataButtonDown(_ev: BeButtonEvent): Promise { - if (_ev.viewport) - return this.doFit(_ev.viewport, false, this.doAnimate) ? EventHandled.Yes : EventHandled.No; + public async onDataButtonDown(ev: BeButtonEvent): Promise { + if (ev.viewport) + return await this.doFit(ev.viewport, this.oneShot, this.doAnimate, this.isolatedOnly) ? EventHandled.Yes : EventHandled.No; return EventHandled.No; } @@ -1706,11 +1725,12 @@ export class FitViewTool extends ViewTool { ViewTool.showPrompt("Fit.Prompts.FirstPoint"); if (this.viewport) - this.doFit(this.viewport, this.oneShot, this.doAnimate); + this.doFit(this.viewport, this.oneShot, this.doAnimate, this.isolatedOnly); // tslint:disable-line:no-floating-promises } - public doFit(viewport: ScreenViewport, oneShot: boolean, doAnimate = true): boolean { - ViewManip.fitView(viewport, doAnimate); + public async doFit(viewport: ScreenViewport, oneShot: boolean, doAnimate = true, isolatedOnly = true): Promise { + if (!isolatedOnly || !await ViewManip.zoomToAlwaysDrawnExclusive(viewport, doAnimate)) + ViewManip.fitView(viewport, doAnimate); if (oneShot) this.exitTool(); return oneShot; diff --git a/core/geometry/CHANGELOG.json b/core/geometry/CHANGELOG.json index 1c03efb..ce0d582 100644 --- a/core/geometry/CHANGELOG.json +++ b/core/geometry/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@bentley/geometry-core", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/geometry-core_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Rename/Refactor triangulation" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/geometry-core_v0.189.0", diff --git a/core/geometry/CHANGELOG.md b/core/geometry/CHANGELOG.md index 3af566b..fbbb876 100644 --- a/core/geometry/CHANGELOG.md +++ b/core/geometry/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @bentley/geometry-core -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Rename/Refactor triangulation ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/geometry/package.json b/core/geometry/package.json index 3d442cc..c9cce50 100644 --- a/core/geometry/package.json +++ b/core/geometry/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/geometry-core", - "version": "0.189.0", + "version": "0.190.0", "license": "MIT", "description": "Bentley Core Geometry library", "main": "lib/geometry-core.js", @@ -39,8 +39,8 @@ "url": "http://www.bentley.com" }, "devDependencies": { - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/mocha": "^5.2.5", "@types/node": "10.12.18", diff --git a/core/geometry/src/clipping/ClipPrimitive.ts b/core/geometry/src/clipping/ClipPrimitive.ts index 893479e..18219a2 100644 --- a/core/geometry/src/clipping/ClipPrimitive.ts +++ b/core/geometry/src/clipping/ClipPrimitive.ts @@ -663,8 +663,8 @@ export class ClipShape extends ClipPrimitive { /** Given a concave polygon defined as an array of points, populate the given UnionOfConvexClipPlaneSets with multiple ConvexClipPlaneSets defining the bounded region. Returns true if successful. */ private parseConcavePolygonPlanes(set: UnionOfConvexClipPlaneSets, polygon: Point3d[], cameraFocalLength?: number): boolean { - const triangulatedPolygon = Triangulator.earcutSingleLoop(polygon); - Triangulator.cleanupTriangulation(triangulatedPolygon); + const triangulatedPolygon = Triangulator.createTriangulatedGraphFromSingleLoop(polygon); + Triangulator.flipTriangles(triangulatedPolygon); triangulatedPolygon.announceFaceLoops((_graph: HalfEdgeGraph, edge: HalfEdge): boolean => { // For every facet in the triangulated polygon.... if (!edge.isMaskSet(HalfEdgeMask.EXTERIOR)) { diff --git a/core/geometry/src/geometry3d/Point2dVector2d.ts b/core/geometry/src/geometry3d/Point2dVector2d.ts index 5bfd0f0..4266944 100644 --- a/core/geometry/src/geometry3d/Point2dVector2d.ts +++ b/core/geometry/src/geometry3d/Point2dVector2d.ts @@ -453,7 +453,7 @@ export class Vector2d extends XY implements BeJSONFunctions { return this.scale(length / mag, result); } /** return the dot product of this with vectorB */ - public dotProduct(vectorB: Vector2d): number { return this.x * vectorB.x + this.y * vectorB.y; } + public dotProduct(vectorB: XAndY): number { return this.x * vectorB.x + this.y * vectorB.y; } /** dot product with vector from pointA to pointB */ public dotProductStartEnd(pointA: XAndY, pointB: XAndY): number { @@ -462,9 +462,9 @@ export class Vector2d extends XY implements BeJSONFunctions { } /** vector cross product {this CROSS vectorB} */ - public crossProduct(vectorB: Vector2d): number { return this.x * vectorB.y - this.y * vectorB.x; } + public crossProduct(vectorB: XAndY): number { return this.x * vectorB.y - this.y * vectorB.x; } /** return the (signed) angle from this to vectorB. This is positive if the shortest turn is counterclockwise, negative if clockwise. */ - public angleTo(vectorB: Vector2d): Angle { + public angleTo(vectorB: XAndY): Angle { return Angle.createAtan2(this.crossProduct(vectorB), this.dotProduct(vectorB)); } diff --git a/core/geometry/src/serialization/GeometrySamples.ts b/core/geometry/src/serialization/GeometrySamples.ts index 1ea9b39..57fa35a 100644 --- a/core/geometry/src/serialization/GeometrySamples.ts +++ b/core/geometry/src/serialization/GeometrySamples.ts @@ -1806,4 +1806,44 @@ export class Sample { points.push(center.clone()); return points; } + /** + * * let ay = 4 + * * base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0). + * * shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering) + * * shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering) + * * This is useful for testing non-y-monootonic face situations. + * * Return as points. + * @param dy1 + * @param dy2 + * @param dy3 + * @param dy4 + */ + public static creatVerticalStaggerPolygon(dy1: number, dy2: number, dy3: number, dy4: number, + ax: number, + ay: number, + dx1: number, + dx4: number): Point3d[] { + return [Point3d.create(0, 0), + Point3d.create(ax + dx1, dy1), + Point3d.create(2 * ax, dy2), + Point3d.create(2 * ax, ay + dy3), + Point3d.create(ax + dx4, ay + dy4), + Point3d.create(0.0, ay), + Point3d.create(0, 0)]; + } + /** + * make line segments for each pair of adjacent points. + * @param points array of points + * @param forceClosure if true, inspect coordinates to determine if a closure edge is needed. + */ + public static convertPointsToSegments(points: Point3d[], forceClosure: boolean = false): LineSegment3d[] { + const segments = []; + const n = points.length; + for (let i = 0; i + 1 < n; i++) { + segments.push(LineSegment3d.create(points[i], points[i + 1])); + } + if (forceClosure && n > 1 && !points[0].isAlmostEqual(points[n - 1])) + segments.push(LineSegment3d.create(points[n - 1], points[0])); + return segments; + } } diff --git a/core/geometry/src/solid/SweepContour.ts b/core/geometry/src/solid/SweepContour.ts index 90234fa..f66e59d 100644 --- a/core/geometry/src/solid/SweepContour.ts +++ b/core/geometry/src/solid/SweepContour.ts @@ -100,7 +100,7 @@ export class SweepContour { this.localToWorld.multiplyInversePoint3dArrayInPlace(points); if (PolygonOps.sumTriangleAreasXY(points) < 0) points.reverse(); - const graph = Triangulator.earcutSingleLoop(points); + const graph = Triangulator.createTriangulatedGraphFromSingleLoop(points); const unflippedPoly = PolyfaceBuilder.graphToPolyface(graph, options); this._facets = unflippedPoly; this._facets.tryTransformInPlace(this.localToWorld); @@ -119,7 +119,7 @@ export class SweepContour { strokes.push(c.packedPoints); } } - const graph = Triangulator.triangulateStrokedLoops(strokes); + const graph = Triangulator.createTriangulatedGraphFromLoops(strokes); if (graph) { const unflippedPoly = PolyfaceBuilder.graphToPolyface(graph, options); this._facets = unflippedPoly; diff --git a/core/geometry/src/test/GeometryCoreTestIO.ts b/core/geometry/src/test/GeometryCoreTestIO.ts index e11a52a..3ab42be 100644 --- a/core/geometry/src/test/GeometryCoreTestIO.ts +++ b/core/geometry/src/test/GeometryCoreTestIO.ts @@ -27,11 +27,16 @@ export class GeometryCoreTestIO { const imjs = IModelJson.Writer.toIModelJson(geometry); fs.writeFileSync(fullPath, prettyPrint(imjs)); } - public static captureGeometry(collection: GeometryQuery[], newGeometry: GeometryQuery, dx: number = 0, dy: number = 0, dz: number = 0) { - if (newGeometry) { + public static captureGeometry(collection: GeometryQuery[], newGeometry: GeometryQuery | GeometryQuery[], dx: number = 0, dy: number = 0, dz: number = 0) { + if (newGeometry instanceof GeometryQuery) { if (Geometry.hypotenuseSquaredXYZ(dx, dy, dz) !== 0) newGeometry.tryTranslateInPlace(dx, dy, dz); collection.push(newGeometry); + return; + } + if (Array.isArray(newGeometry)) { + for (const g of newGeometry) + this.captureGeometry(collection, g, dx, dy, dz); } } /** diff --git a/core/geometry/src/test/clipping/ClipPrimitives.test.ts b/core/geometry/src/test/clipping/ClipPrimitives.test.ts index 79caaba..5ed3c6e 100644 --- a/core/geometry/src/test/clipping/ClipPrimitives.test.ts +++ b/core/geometry/src/test/clipping/ClipPrimitives.test.ts @@ -631,8 +631,8 @@ describe("ClipPrimitive", () => { continue; } - const polygonGraph = Triangulator.earcutSingleLoop(polygon); - Triangulator.cleanupTriangulation(polygonGraph); + const polygonGraph = Triangulator.createTriangulatedGraphFromSingleLoop(polygon); + Triangulator.flipTriangles(polygonGraph); polygonGraph.announceFaceLoops((_graph: HalfEdgeGraph, edge: HalfEdge): boolean => { if (!edge.getMask(HalfEdgeMask.EXTERIOR)) { @@ -660,8 +660,8 @@ describe("ClipPrimitive", () => { const clippedPolygons = ClipUtilities.clipPolygonToClipShape(polygonB, clipShape); for (const polygon of clippedPolygons) { - const polygonGraph = Triangulator.earcutSingleLoop(polygon); - Triangulator.cleanupTriangulation(polygonGraph); + const polygonGraph = Triangulator.createTriangulatedGraphFromSingleLoop(polygon); + Triangulator.flipTriangles(polygonGraph); polygonGraph.announceFaceLoops((_graph: HalfEdgeGraph, edge: HalfEdge): boolean => { if (!edge.getMask(HalfEdgeMask.EXTERIOR)) { diff --git a/core/geometry/src/test/topology/Graph.test.ts b/core/geometry/src/test/topology/Graph.test.ts index 750d9c6..e6c462b 100644 --- a/core/geometry/src/test/topology/Graph.test.ts +++ b/core/geometry/src/test/topology/Graph.test.ts @@ -8,380 +8,264 @@ import { expect } from "chai"; import { Checker } from "../Checker"; import { LineString3d } from "../../curve/LineString3d"; -import { LineSegment3d } from "../../curve/LineSegment3d"; import { Point3d, Vector3d } from "../../geometry3d/Point3dVector3d"; -import { Range3d } from "../../geometry3d/Range"; import { Transform } from "../../geometry3d/Transform"; -import { Matrix3d } from "../../geometry3d/Matrix3d"; -import { PolyfaceBuilder } from "../../polyface/PolyfaceBuilder"; import { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from "../../topology/Graph"; import { HalfEdgeGraphSearch } from "../../topology/HalfEdgeGraphSearch"; import { HalfEdgeMaskValidation, HalfEdgePointerInspector } from "../../topology/HalfEdgeGraphValidation"; -import { Merger, GraphMerge } from "../../topology/Merging"; -import { Triangulator } from "../../topology/Triangulation"; +import { HalfEdgeGraphMerge } from "../../topology/Merging"; import { Angle } from "../../geometry3d/Angle"; -import { Sample } from "../../serialization/GeometrySamples"; import { GeometryCoreTestIO } from "../GeometryCoreTestIO"; -import { Loop } from "../../curve/Loop"; import { GeometryQuery } from "../../curve/GeometryQuery"; import { Geometry } from "../../Geometry"; -import { AngleSweep } from "../../geometry3d/AngleSweep"; -function exportGraph(graph: HalfEdgeGraph, filename: string) { - const toExport = PolyfaceBuilder.graphToPolyface(graph); - GeometryCoreTestIO.saveGeometry([toExport], "Graph", filename); -} - -function rotateArray(data: Point3d[], index0: number) { - const out = []; - for (let i = 0; i < data.length; i++) out.push(data[(index0 + i) % data.length].clone()); - return out; -} -function captureAnnotatedGraph(data: GeometryQuery[], graph: HalfEdgeGraph, dx: number = 0, dy: number = 0) { - const maxTick = 0.01; - const numTick = 20; - const allNodes = graph.allHalfEdges; - const xyzA = Point3d.create(); - const xyz = Point3d.create(); // work point - const xyzB = Point3d.create(); - const vectorAB = Vector3d.create(); - const perpAB = Vector3d.create(); - const perpAC = Vector3d.create(); - const vectorAC = Vector3d.create(); - const count0 = data.length; - - for (const nodeA of allNodes) { - const nodeB = nodeA.faceSuccessor; - const nodeC = nodeA.vertexSuccessor; - Point3d.create(nodeA.x, nodeA.y, nodeA.z, xyzA); - Point3d.create(nodeB.x, nodeB.y, nodeB.z, xyzB); - nodeA.vectorToFaceSuccessor(vectorAB); - nodeC.vectorToFaceSuccessor(vectorAC); - vectorAB.unitPerpendicularXY(perpAB); - vectorAC.unitPerpendicularXY(perpAC); - const dAB = xyzA.distanceXY(xyzB); - const dTick = Math.min(dAB / numTick, maxTick); - const tickFraction = dTick / dAB; - perpAB.scaleInPlace(dTick); - - const linestring = LineString3d.create(); - linestring.clear(); - linestring.addPoint(xyzA); - xyzA.plusScaled(vectorAB, 2 * tickFraction, xyz); - if (nodeC === nodeA) - linestring.addPoint(xyz); - linestring.addPoint(xyz.plus(perpAB, xyz)); - linestring.addPoint(xyzB); - data.push(linestring); - - if (!vectorAB.isParallelTo(vectorAC)) { - let theta = vectorAB.angleToXY(vectorAC); - if (theta.radians < 0.0) - theta = Angle.createDegrees(theta.degrees + 360); - if (vectorAB.tryNormalizeInPlace() && vectorAC.tryNormalizeInPlace()) { - const linestringV = LineString3d.create(); - linestringV.clear(); - linestringV.addPoint(xyzA.plusScaled(vectorAB, dTick)); - if (theta.degrees > 90) { - let numStep = 3; - if (theta.degrees > 180) numStep = 5; - if (theta.degrees > 270) numStep = 7; - const stepRadians = theta.radians / numStep; - for (let i = 1; i <= numStep; i++) { - vectorAB.rotateXY(Angle.createRadians(stepRadians), vectorAB); - linestringV.addPoint(xyzA.plusScaled(vectorAB, dTick)); +export class GraphChecker { + public static captureAnnotatedGraph(data: GeometryQuery[], graph: HalfEdgeGraph, dx: number = 0, dy: number = 0) { + const maxTick = 0.01; + const numTick = 20; + const allNodes = graph.allHalfEdges; + const xyzA = Point3d.create(); + const xyz = Point3d.create(); // work point + const xyzB = Point3d.create(); + const vectorAB = Vector3d.create(); + const perpAB = Vector3d.create(); + const perpAC = Vector3d.create(); + const vectorAC = Vector3d.create(); + const count0 = data.length; + + for (const nodeA of allNodes) { + const nodeB = nodeA.faceSuccessor; + const nodeC = nodeA.vertexSuccessor; + Point3d.create(nodeA.x, nodeA.y, 0, xyzA); + Point3d.create(nodeB.x, nodeB.y, 0, xyzB); + nodeA.vectorToFaceSuccessor(vectorAB); + nodeC.vectorToFaceSuccessor(vectorAC); + vectorAB.unitPerpendicularXY(perpAB); + vectorAC.unitPerpendicularXY(perpAC); + const dAB = xyzA.distanceXY(xyzB); + const dTick = Math.min(dAB / numTick, maxTick); + const tickFraction = Geometry.safeDivideFraction(dTick, dAB, 0.0); + perpAB.scaleInPlace(dTick); + + const linestring = LineString3d.create(); + linestring.clear(); + linestring.addPoint(xyzA); + xyzA.plusScaled(vectorAB, 2 * tickFraction, xyz); + if (nodeC === nodeA) + linestring.addPoint(xyz); + linestring.addPoint(xyz.plus(perpAB, xyz)); + linestring.addPoint(xyzB); + data.push(linestring); + + if (!vectorAB.isParallelTo(vectorAC)) { + let theta = vectorAB.angleToXY(vectorAC); + if (theta.radians < 0.0) + theta = Angle.createDegrees(theta.degrees + 360); + if (vectorAB.tryNormalizeInPlace() && vectorAC.tryNormalizeInPlace()) { + const linestringV = LineString3d.create(); + linestringV.clear(); + linestringV.addPoint(xyzA.plusScaled(vectorAB, dTick)); + if (theta.degrees > 90) { + let numStep = 3; + if (theta.degrees > 180) numStep = 5; + if (theta.degrees > 270) numStep = 7; + const stepRadians = theta.radians / numStep; + for (let i = 1; i <= numStep; i++) { + vectorAB.rotateXY(Angle.createRadians(stepRadians), vectorAB); + linestringV.addPoint(xyzA.plusScaled(vectorAB, dTick)); + } } + linestringV.addPoint(xyzA.plusScaled(vectorAC, dTick)); + data.push(linestringV); } - linestringV.addPoint(xyzA.plusScaled(vectorAC, dTick)); - data.push(linestringV); } } + const transform = Transform.createTranslationXYZ(dx, dy, 0); + for (let i = count0; i < data.length; i++) + data[i].tryTransformInPlace(transform); } - const transform = Transform.createTranslationXYZ(dx, dy, 0); - for (let i = count0; i < data.length; i++) - data[i].tryTransformInPlace(transform); -} -const printToConsole = false; -function dumpGraph(graph: HalfEdgeGraph) { - const faces = graph.collectFaceLoops(); - const vertices = graph.collectVertexLoops(); - const faceData = []; - for (const f of faces) { - faceData.push(f.collectAroundFace(HalfEdge.nodeToIdXYString)); - } - if (printToConsole) { - console.log("**FACE LOOPS " + faces.length); - console.log(faceData); - } - const vdata = []; - for (const v of vertices) { - const totalDistance = v.sumAroundVertex((node: HalfEdge) => node.distanceXY(v)); - if (totalDistance !== 0) { // output full coordinates all the way around. - vdata.push("INCONSISTENT VERTEX XY"); - vdata.push(JSON.stringify(v.collectAroundVertex(HalfEdge.nodeToIdMaskXY))); - } else - vdata.push([HalfEdge.nodeToIdXYString(v), v.collectAroundVertex(HalfEdge.nodeToId)]); - } - if (printToConsole) { - console.log("**VERTEX LOOPS " + vertices.length); - console.log(vdata); + public static printToConsole = false; + public static dumpGraph(graph: HalfEdgeGraph) { + const faces = graph.collectFaceLoops(); + const vertices = graph.collectVertexLoops(); + const faceData = []; + for (const f of faces) { + faceData.push(f.collectAroundFace(HalfEdge.nodeToIdXYString)); + } + if (this.printToConsole) { + console.log("**FACE LOOPS " + faces.length); + console.log(faceData); + } + const vdata = []; + for (const v of vertices) { + const totalDistance = v.sumAroundVertex((node: HalfEdge) => node.distanceXY(v)); + if (totalDistance !== 0) { // output full coordinates all the way around. + vdata.push("INCONSISTENT VERTEX XY"); + vdata.push(JSON.stringify(v.collectAroundVertex(HalfEdge.nodeToIdMaskXY))); + } else + vdata.push([HalfEdge.nodeToIdXYString(v), v.collectAroundVertex(HalfEdge.nodeToId)]); + } + if (this.printToConsole) { + console.log("**VERTEX LOOPS " + vertices.length); + console.log(vdata); + } } -} -/** - * * call various "fast" mask methods at every node. - * * call expesnive methods (those requiring full graph search) for a few nodes. - */ -function exerciseMaskMethods(ck: Checker, graph: HalfEdgeGraph) { - const myMask = HalfEdgeMask.PRIMARY_EDGE; - graph.clearMask(myMask); - const numNode = graph.allHalfEdges.length; - ck.testExactNumber(0, graph.countMask(myMask), "graph.setMask"); - graph.clearMask(HalfEdgeMask.VISITED); - graph.setMask(myMask); - ck.testExactNumber(numNode, graph.countMask(myMask), "graph.clearMask"); - graph.clearMask(myMask); - let numSet = 0; - // do some tedius stuff at "a few" nodes .. 0,3,9,21.... - const mask1 = HalfEdgeMask.PRIMARY_VERTEX_MASK; // ignore the name -- it is a mask to work with - const mask2 = HalfEdgeMask.POLAR_LOOP_MASK; // ignore the name -- it is a mask to work with. - let numMask2InSet = 0; - graph.clearMask(mask1); - ck.testExactNumber(0, graph.countMask(mask1), "clear mask " + mask1); - for (let i = 0; i < numNode; i += 3 + i) { - const node = graph.allHalfEdges[i]; - ck.testFalse(node.isMaskSet(myMask), "0 mask"); - ck.testTrue(node.testAndSetMask(myMask) === 0, "testAndSet from 0"); - ck.testTrue(node.isMaskSet(myMask), "after testAndSet"); - numSet++; - // confirm "around vertex ops" -- some tests are full-graph sweeps. + /** + * * call various "fast" mask methods at every node. + * * call expesnive methods (those requiring full graph search) for a few nodes. + */ + public static exerciseMaskMethods(ck: Checker, graph: HalfEdgeGraph) { + const myMask = HalfEdgeMask.PRIMARY_EDGE; + graph.clearMask(myMask); + const numNode = graph.allHalfEdges.length; + ck.testExactNumber(0, graph.countMask(myMask), "graph.setMask"); + graph.clearMask(HalfEdgeMask.VISITED); + graph.setMask(myMask); + ck.testExactNumber(numNode, graph.countMask(myMask), "graph.clearMask"); + graph.clearMask(myMask); + let numSet = 0; + // do some tedius stuff at "a few" nodes .. 0,3,9,21.... + const mask1 = HalfEdgeMask.PRIMARY_VERTEX_MASK; // ignore the name -- it is a mask to work with + const mask2 = HalfEdgeMask.POLAR_LOOP_MASK; // ignore the name -- it is a mask to work with. + let numMask2InSet = 0; graph.clearMask(mask1); - const numNodesAroundVertex = node.countEdgesAroundVertex(); - const numNodesAroundFace = node.countEdgesAroundFace(); + ck.testExactNumber(0, graph.countMask(mask1), "clear mask " + mask1); + for (let i = 0; i < numNode; i += 3 + i) { + const node = graph.allHalfEdges[i]; + ck.testFalse(node.isMaskSet(myMask), "0 mask"); + ck.testTrue(node.testAndSetMask(myMask) === 0, "testAndSet from 0"); + ck.testTrue(node.isMaskSet(myMask), "after testAndSet"); + numSet++; + // confirm "around vertex ops" -- some tests are full-graph sweeps. + graph.clearMask(mask1); + const numNodesAroundVertex = node.countEdgesAroundVertex(); + const numNodesAroundFace = node.countEdgesAroundFace(); + + ck.testExactNumber(numNodesAroundVertex, node.countMaskAroundVertex(mask1, false), "count unmasked around vertex"); + ck.testExactNumber(numNodesAroundFace, node.countMaskAroundFace(mask1, false), "count unmasked around face"); + + node.setMaskAroundVertex(mask1); + ck.testExactNumber(numNodesAroundFace - 1, node.countMaskAroundFace(mask1, false), "count unmasked around face after vertex set"); + + const nodesAroundVertex = node.collectAroundVertex(); + ck.testExactNumber(numNodesAroundVertex, nodesAroundVertex.length, "count nodes == collected array length"); + const masksAroundVertex = node.countMaskAroundVertex(mask1); + ck.testExactNumber(nodesAroundVertex.length, masksAroundVertex); + ck.testExactNumber(nodesAroundVertex.length, graph.countMask(mask1), "confirm count for setmaskAroundvertex"); + node.clearMaskAroundVertex(mask1); + ck.testExactNumber(0, graph.countMask(mask1), "clear around vertex"); + const numMask2ThisFace = node.countMaskAroundFace(mask2); + node.setMaskAroundFace(mask2); + ck.testExactNumber(numNodesAroundFace, node.countMaskAroundFace(mask2)); + numMask2InSet += node.countMaskAroundFace(mask2) - numMask2ThisFace; + ck.testExactNumber(numMask2InSet, graph.countMask(mask2), "global mask count versus per-face update"); - ck.testExactNumber(numNodesAroundVertex, node.countMaskAroundVertex(mask1, false), "count unmasked around vertex"); - ck.testExactNumber(numNodesAroundFace, node.countMaskAroundFace(mask1, false), "count unmasked around face"); - - node.setMaskAroundVertex(mask1); - ck.testExactNumber(numNodesAroundFace - 1, node.countMaskAroundFace(mask1, false), "count unmasked around face after vertex set"); - - const nodesAroundVertex = node.collectAroundVertex(); - ck.testExactNumber(numNodesAroundVertex, nodesAroundVertex.length, "count nodes == collected array length"); - const masksAroundVertex = node.countMaskAroundVertex(mask1); - ck.testExactNumber(nodesAroundVertex.length, masksAroundVertex); - ck.testExactNumber(nodesAroundVertex.length, graph.countMask(mask1), "confirm count for setmaskAroundvertex"); - node.clearMaskAroundVertex(mask1); - ck.testExactNumber(0, graph.countMask(mask1), "clear around vertex"); - const numMask2ThisFace = node.countMaskAroundFace(mask2); - node.setMaskAroundFace(mask2); - ck.testExactNumber(numNodesAroundFace, node.countMaskAroundFace(mask2)); - numMask2InSet += node.countMaskAroundFace(mask2) - numMask2ThisFace; - ck.testExactNumber(numMask2InSet, graph.countMask(mask2), "global mask count versus per-face update"); - - } - ck.testExactNumber(numSet, graph.countMask(myMask), " count mask after various testAndSet"); - graph.reverseMask(myMask); - ck.testExactNumber(numNode - numSet, graph.countMask(myMask), "count mask after reverse"); -} - -function validateCleanLoopsAndCoordinates(ck: Checker, graph: HalfEdgeGraph) { - for (const he of graph.allHalfEdges) { - ck.testTrue(he === he.vertexSuccessor.vertexPredecessor, "vertex successor/predecessor relation"); - ck.testTrue(he === he.faceSuccessor.facePredecessor, "face successor/predecessor relation"); - const vs = he.vertexSuccessor; - const faceSuccessor = he.faceSuccessor; - ck.testTrue(he.isEqualXY(vs), "Exact xy around vertex loop"); - ck.testFalse(he.isEqualXY(faceSuccessor), "different xy around face loop"); - ck.testTrue(he === HalfEdge.nodeToSelf(he), "HalfEdge.nodeToSelf"); + } + ck.testExactNumber(numSet, graph.countMask(myMask), " count mask after various testAndSet"); + graph.reverseMask(myMask); + ck.testExactNumber(numNode - numSet, graph.countMask(myMask), "count mask after reverse"); } -} -function verifyGraphCounts(ck: Checker, - graph: HalfEdgeGraph, - numFace: number | undefined, - numVertex: number | undefined, - positiveFaceAreaSum: undefined | number) { - const error0 = ck.getNumErrors(); - const faces = graph.collectFaceLoops(); - const vertices = graph.collectVertexLoops(); - - if (numFace) ck.testExactNumber(numFace, faces.length, "face count"); - if (numFace) ck.testExactNumber(numFace, graph.countFaceLoops(), "face count"); - if (numVertex) ck.testExactNumber(numVertex, vertices.length, "vertex count"); - if (numVertex) ck.testExactNumber(numVertex, graph.countVertexLoops(), "vertex count"); - // is EXTERIOR_MASK consistent around all faces? - let maskErrors = 0; - for (const node of graph.allHalfEdges) { - if (node.isMaskSet(HalfEdgeMask.EXTERIOR) !== node.faceSuccessor.isMaskSet(HalfEdgeMask.EXTERIOR)) - maskErrors++; - } - if (maskErrors !== 0) - ck.announceError("EXTERIOR_MASK inconsistent at " + maskErrors + " nodes"); - if (positiveFaceAreaSum) { - let sum = 0.0; - for (const face of faces) { - const faceArea = face.signedFaceArea(); - if (faceArea > 0.0) sum += faceArea; + public static validateCleanLoopsAndCoordinates(ck: Checker, graph: HalfEdgeGraph) { + for (const he of graph.allHalfEdges) { + ck.testTrue(he === he.vertexSuccessor.vertexPredecessor, "vertex successor/predecessor relation"); + ck.testTrue(he === he.faceSuccessor.facePredecessor, "face successor/predecessor relation"); + const vs = he.vertexSuccessor; + const faceSuccessor = he.faceSuccessor; + ck.testTrue(he.isEqualXY(vs), "Exact xy around vertex loop"); + ck.testFalse(he.isEqualXY(faceSuccessor), "different xy around face loop"); + ck.testTrue(he === HalfEdge.nodeToSelf(he), "HalfEdge.nodeToSelf"); } - ck.testCoordinate(positiveFaceAreaSum, sum, "area sum"); } - - if (ck.getNumErrors() > error0) dumpGraph(graph); -} - -describe("Triangulation", () => { - const ck = new Checker(); - - it("TriangulateLoops", () => { - let yShift = 0; - const dx = 20.0; - const dy = 30.0; - const allGeometry: GeometryQuery[] = []; - for (const myLoops of [ - [[ - // Outer - Point3d.create(0, 0, 0), - Point3d.create(3, -2, 0), - Point3d.create(6, 2, 0), - Point3d.create(5, 5, 0), - Point3d.create(4, 2, 0), - Point3d.create(1, 3, 0)], - [ - // Hole - Point3d.create(1, 1, 0), - Point3d.create(2, 2, 0), - Point3d.create(3, 1, 0)]], - // triangle with one hole - [[Point3d.create(0, 0, 0), Point3d.create(5, -5, 0), Point3d.create(5, 5, 0)], - [Point3d.create(2, 1, 0), Point3d.create(3, 1, 0), Point3d.create(3, 0, 0)]], - // triangle with one hole, CCW orientation on the hole (expect it to be corrected) - [[Point3d.create(0, 0, 0), Point3d.create(5, -5, 0), Point3d.create(5, 5, 0)], - [Point3d.create(2, 1, 0), Point3d.create(3, 0, 0), Point3d.create(3, 1, 0)]], - // rectangle with 2 holes - [[Point3d.create(0, 0, 0), Point3d.create(5, 0, 0), Point3d.create(5, 5, 0), Point3d.create(0, 5, 0)], - [Point3d.create(1, 1, 0), Point3d.create(2, 2, 0), Point3d.create(2, 1, 0)], - [Point3d.create(3, 1.5, 0), Point3d.create(4, 3, 0), Point3d.create(4, 1.5, 0)]], - // rectangle with 2 holes, duplicate points here and there - [[Point3d.create(0, 0, 0), Point3d.create(5, 0, 0), Point3d.create(5, 0, 0), Point3d.create(5, 5, 0), Point3d.create(0, 5, 0)], - [Point3d.create(1, 1, 0), Point3d.create(2, 2, 0), Point3d.create(2, 1, 0), Point3d.create(2, 1, 0)], - [Point3d.create(3, 1.5, 0), Point3d.create(4, 3, 0), Point3d.create(4, 1.5, 0), Point3d.create(3, 1.5, 0)]]]) { - let xShift = 0; - // triangulate and flip in the outer loop only . . . - const graph1 = Triangulator.earcutSingleLoop(myLoops[0]); - const unflippedOuter = PolyfaceBuilder.graphToPolyface(graph1); - unflippedOuter.tryTranslateInPlace(xShift, yShift, 0); - allGeometry.push(unflippedOuter); - xShift += dx; - - Triangulator.cleanupTriangulation(graph1); - const flippedOuter = PolyfaceBuilder.graphToPolyface(graph1); - flippedOuter.tryTranslateInPlace(xShift, yShift, 0); - allGeometry.push(flippedOuter); - xShift += 2 * dx; - - // triangulate with the hole - const graph2 = Triangulator.earcutOuterAndInnerLoops(myLoops); - const unflipped2 = PolyfaceBuilder.graphToPolyface(graph2); - unflipped2.tryTranslateInPlace(xShift, yShift, 0); - allGeometry.push(unflipped2); - xShift += dx; - - Triangulator.cleanupTriangulation(graph2); - const flipped2 = PolyfaceBuilder.graphToPolyface(graph2); - flipped2.tryTranslateInPlace(xShift, yShift, 0); - allGeometry.push(flipped2); - xShift += dx; - - yShift += dy; + public static verifyMaskAroundFaces(ck: Checker, + graph: HalfEdgeGraph, + mask: HalfEdgeMask): boolean { + // is EXTERIOR_MASK consistent around all faces? + let maskErrors = 0; + for (const node of graph.allHalfEdges) { + if (node.isMaskSet(mask) !== node.faceSuccessor.isMaskSet(mask)) + maskErrors++; } - GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "TriangulateAndFlip"); - ck.checkpoint("TriangulateAndFlip"); - expect(ck.getNumErrors()).equals(0); - }); - - it("SquareWaves", () => { - let degreeCount = 0; - for (const degrees of [0, 10, 30, 95, -20]) { - let y0 = 0.0; - for (const numPhase of [1, 3, 7, 15]) { - const x0 = 4.0 + 6.0 * numPhase * degreeCount; - const name = "SquareWave" + degreeCount + "." + numPhase; - const pointA = Point3d.create(1.5 * numPhase, 0, 0); - const yShiftVector = Vector3d.create(0, 2, 0); - const rotation = Transform.createFixedPointAndMatrix( - Point3d.create(1.5 * numPhase, 0, 0), - Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(degrees)) as Matrix3d); - const points = Sample.createSquareWave(Point3d.create(0, 0, 0), 1, 0.5, 2, numPhase, 1); - rotation.multiplyVector(yShiftVector, yShiftVector); - if (degrees !== 0.0) - rotation.multiplyPoint3dArrayInPlace(points); - if (Checker.noisy.squareWaves) - console.log(name, "Rotation angle ", degrees, " numPhase", numPhase); - const graph = Triangulator.earcutSingleLoop(points); - const pfA = PolyfaceBuilder.graphToPolyface(graph); - Triangulator.cleanupTriangulation(graph); - - if (Checker.noisy.squareWaves) - dumpGraph(graph); - verifyGraphCounts(ck, graph, undefined, undefined, undefined); - const pfB = PolyfaceBuilder.graphToPolyface(graph); - // const pfC = PolyfaceBuilder.graphToPolyface(graph); - const ls = LineString3d.create(points); - const ls1 = LineString3d.create(Point3d.create(), pointA); - ls.tryTranslateInPlace(x0, y0); - pfA.tryTranslateInPlace(x0 + yShiftVector.x, y0 + yShiftVector.y, 0); - pfB.tryTranslateInPlace(x0 + 2 * yShiftVector.x, y0 + 2 * yShiftVector.y, 0); - // pfC.tryTranslateInPlace(x0 + 4 * yShiftVector.x, y0 + 4 * yShiftVector.y, 0); - - ls1.tryTranslateInPlace(x0, y0); - y0 += 3 + 4 * numPhase; - GeometryCoreTestIO.saveGeometry([ls1, ls, pfA, pfB], "Graph", name); + if (maskErrors !== 0) + ck.announceError("EXTERIOR_MASK inconsistent at " + maskErrors + " nodes"); + return maskErrors === 0; + } + /** + * + * @param ck checker for error reports + * @param graph graph to inspect + * @param checkConsistentExteriorMask if true, verify that HalfEdgemask.EXTERIOR is consistent within each face (entirely on or entirely off) + * @param numFace (optional) precise expected face count + * @param numVertex (optional) precise expected vertex count + * @param positiveFaceAreaSum (optional) precise expected positive area face sum + */ + public static verifyGraphCounts(ck: Checker, + graph: HalfEdgeGraph, + checkConsistentExteriorMask: boolean, + numFace: number | undefined, + numVertex: number | undefined, + positiveFaceAreaSum: undefined | number) { + const error0 = ck.getNumErrors(); + const faces = graph.collectFaceLoops(); + const vertices = graph.collectVertexLoops(); + + if (numFace) ck.testExactNumber(numFace, faces.length, "face count"); + if (numFace) ck.testExactNumber(numFace, graph.countFaceLoops(), "face count"); + if (numVertex) ck.testExactNumber(numVertex, vertices.length, "vertex count"); + if (numVertex) ck.testExactNumber(numVertex, graph.countVertexLoops(), "vertex count"); + if (checkConsistentExteriorMask) + this.verifyMaskAroundFaces(ck, graph, HalfEdgeMask.EXTERIOR); + if (positiveFaceAreaSum) { + let sum = 0.0; + for (const face of faces) { + const faceArea = face.signedFaceArea(); + if (faceArea > 0.0) sum += faceArea; } - degreeCount++; + ck.testCoordinate(positiveFaceAreaSum, sum, "area sum"); } - ck.checkpoint("SquareWaves"); - expect(ck.getNumErrors()).equals(0); - }); -}); -describe("MonotoneFaces", () => { - const ck = new Checker(); - const testSegs: LineSegment3d[] = [ - LineSegment3d.create(Point3d.create(0, 20), Point3d.create(0, 0)), - LineSegment3d.create(Point3d.create(0, 0), Point3d.create(3, 3)), - LineSegment3d.create(Point3d.create(3, 3), Point3d.create(6, 0)), - LineSegment3d.create(Point3d.create(6, 0), Point3d.create(6, 8)), - LineSegment3d.create(Point3d.create(6, 8), Point3d.create(9, 5)), - LineSegment3d.create(Point3d.create(9, 5), Point3d.create(10, 2)), - LineSegment3d.create(Point3d.create(10, 2), Point3d.create(12, 7)), - LineSegment3d.create(Point3d.create(12, 7), Point3d.create(14, 5)), - LineSegment3d.create(Point3d.create(14, 5), Point3d.create(18, 15)), - LineSegment3d.create(Point3d.create(18, 15), Point3d.create(16, 17)), - LineSegment3d.create(Point3d.create(16, 17), Point3d.create(16.5, 20)), - LineSegment3d.create(Point3d.create(16.5, 20), Point3d.create(14, 18)), - LineSegment3d.create(Point3d.create(14, 18), Point3d.create(15, 22)), - LineSegment3d.create(Point3d.create(15, 22), Point3d.create(12, 21)), - LineSegment3d.create(Point3d.create(12, 21), Point3d.create(10, 20)), - LineSegment3d.create(Point3d.create(10, 20), Point3d.create(9, 17)), - LineSegment3d.create(Point3d.create(9, 17), Point3d.create(6, 15)), - LineSegment3d.create(Point3d.create(6, 15), Point3d.create(0, 20)), - ]; + if (ck.getNumErrors() > error0) GraphChecker.dumpGraph(graph); + } + /** + * Return arrays with faces, distributed by sign of face area. + * @param graph + */ + public static collectFacesByArea(graph: HalfEdgeGraph): any { + const faces = graph.collectFaceLoops(); + const result: any = {}; + result.absAreaSum = 0; + result.zeroAreaTolerance = 0; + result.positiveFaces = []; + result.negativeFaces = []; + result.nearZeroFaces = []; - it("SpecificCase", () => { - const theGraph = Merger.formGraphFromSegments(testSegs); - exportGraph(theGraph, "BeforeSweep"); - Merger.formMonotoneFaces(theGraph); - exportGraph(theGraph, "AfterSweep"); - // console.log("Total Faces: ", theGraph.collectFaceLoops().length); - // for (const face of faces) { - // Triangulator.earcutFromSingleFaceLoop(face); - // } - exportGraph(theGraph, "AfterTriangulation"); + for (const face of faces) { + result.absAreaSum += Math.abs(face.signedFaceArea()); + result.zeroAreaTolerance = 1.0e-12 * result.absAreaSum; + } + for (const face of faces) { + const a = face.signedFaceArea(); + if (Math.abs(a) <= result.zeroAreaTolerance) + result.nearZeroFaces.push(face); + else if (a > 0.0) result.positiveFaces.push(face); + else /* strict negative */ + result.negativeFaces.push(face); - ck.checkpoint("MonotoneFaces"); - expect(ck.getNumErrors()).equals(0); - }); -}); + } + return result; + } + public static verifySignedFaceCounts(ck: Checker, graph: HalfEdgeGraph, numPositive: number | undefined, numNegative: number | undefined, numNearZero: number | undefined): boolean { + const faceData = this.collectFacesByArea(graph); + const okPositive = numPositive === undefined || faceData.positiveFaces.length === numPositive; + const okNegative = numNegative === undefined || faceData.negativeFaces.length === numNegative; + const okNearZero = numNearZero === undefined || faceData.nearZeroFaces.length === numNearZero; + ck.testTrue(okPositive, "PositiveAreaFaceCount ", numPositive); + ck.testTrue(okNegative, "NegativeAreaFaceCount ", numNegative); + ck.testTrue(okPositive, "PositiveAreaFaceCount ", numNearZero); + return okPositive && okNegative && okNearZero; + } +} describe("VUGraph", () => { it("HelloWorld", () => { @@ -419,19 +303,19 @@ describe("VUGraph", () => { // // before merging, each edge hangs alone in space and creates a face and two vertices . . const numEdge = 2 * numX * numY; - verifyGraphCounts(ck, graph, + GraphChecker.verifyGraphCounts(ck, graph, true, numEdge, 2 * numEdge, undefined); ck.testExactNumber(2 * numEdge, graph.countNodes(), "dangling nodes"); const geometry: GeometryQuery[] = []; - captureAnnotatedGraph(geometry, graph, 0, 0); + GraphChecker.captureAnnotatedGraph(geometry, graph, 0, 0); - GraphMerge.clusterAndMergeXYTheta(graph); + HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph); // after merge, there are interior faces and a single exterior face . . const numInteriorFaces = (numX - 1) * (numY - 1); const numFaces = numInteriorFaces + 1; - verifyGraphCounts(ck, graph, numFaces, (numX + 1) * (numY + 1) - 1, undefined); - dumpGraph(graph); - captureAnnotatedGraph(geometry, graph, 0, 10); + GraphChecker.verifyGraphCounts(ck, graph, true, numFaces, (numX + 1) * (numY + 1) - 1, undefined); + GraphChecker.dumpGraph(graph); + GraphChecker.captureAnnotatedGraph(geometry, graph, 0, 10); const segments = graph.collectSegments(); ck.testExactNumber(numEdge, segments.length, "segmentCount"); GeometryCoreTestIO.saveGeometry(geometry, "Graph", "GridFixup"); @@ -442,7 +326,7 @@ describe("VUGraph", () => { } ck.testExactNumber(1, graph.countFaceLoopsWithMaskFilter(HalfEdge.filterIsMaskOn, HalfEdgeMask.EXTERIOR), "Single exterior after parity"); ck.testExactNumber(numInteriorFaces, graph.countFaceLoopsWithMaskFilter(HalfEdge.filterIsMaskOff, HalfEdgeMask.EXTERIOR), "Single exterior after parity"); - validateCleanLoopsAndCoordinates(ck, graph); + GraphChecker.validateCleanLoopsAndCoordinates(ck, graph); ck.testTrue(HalfEdgePointerInspector.inspectGraph(graph, true), "Merged Graph HalfEdgeGraph pointer properties"); ck.testTrue(HalfEdgePointerInspector.inspectGraph(graph, false), "Merged Graph HalfEdgeGraph pointer properties"); @@ -461,7 +345,7 @@ describe("VUGraph", () => { } } } - exerciseMaskMethods(ck, graph); + GraphChecker.exerciseMaskMethods(ck, graph); graph.decommission(); expect(ck.getNumErrors()).equals(0); }); @@ -470,7 +354,7 @@ describe("VUGraph", () => { const graph = new HalfEdgeGraph(); const node = graph.addEdgeXY(1, 2, 3, 4); const node1 = node.facePredecessor; - if (printToConsole) { + if (GraphChecker.printToConsole) { console.log("NodeToId:", HalfEdge.nodeToId(node1)); console.log("nodeToIdString:", HalfEdge.nodeToIdString(node1)); console.log("nodeToXY:", HalfEdge.nodeToXY(node1)); @@ -480,219 +364,19 @@ describe("VUGraph", () => { } }); - it("LargeCountTriangulation", () => { - const baseVectorA = Vector3d.create(0, 0, 0); - const allGeometry = []; - // REMARK - // EDL Feb 20 2019 - // Triangulation introduces a search zheap (not understood by me at this time) for very large polygons. - // With original trigger of 80 edges, some invalid triangulations occur for numRecursion = 2 (the original limit) - // Raise the trigger to 200 and all is fine. - // But the statement coverage drops significantly -- 94% to 93.37 - // numRecursion = 3 generates larger polygons (around 400) and again there are some failures. - // so we conclude the zheap is large chunk of code with some bugs. - // This is an unlikely use case at this time. So - // 1) the heap trigger is left at 200 (see Triangulation.ts) - // 2) add a method `Triangulation.setAndReturnHeapTrigger (number): number` - // Someday debug that .... - for (const numRecursion of [1, 2, 3]) { - for (const perpendicularFactor of [0.85, -1.0, -0.5]) { - let yMax = 0.0; - const baseVectorB = baseVectorA.clone(); - for (const generatorFunction of [ - Sample.createFractalSquareReversingPattern, - Sample.createFractalDiamonConvexPattern, - Sample.createFractalLReversingPatterh, - Sample.createFractalHatReversingPattern, - Sample.createFractalLMildConcavePatter]) { - const points = generatorFunction(numRecursion, perpendicularFactor); - const range = Range3d.createArray(points); - const dy = range.yLength(); - yMax = Math.max(yMax, dy); - const transform = Transform.createTranslation(baseVectorB); - transform.multiplyPoint3dArray(points, points); - baseVectorB.addInPlace(Vector3d.create(2 * range.xLength(), 0, 0)); - allGeometry.push(Loop.create(LineString3d.create(points))); - const graph = Triangulator.earcutSingleLoop(points); - if (graph) { - const pfA = PolyfaceBuilder.graphToPolyface(graph); - pfA.tryTranslateInPlace(0, 2.0 * dy, 0); - allGeometry.push(pfA); - Triangulator.cleanupTriangulation(graph); - const pfB = PolyfaceBuilder.graphToPolyface(graph); - pfB.tryTranslateInPlace(0, 4.0 * dy, 0); - allGeometry.push(pfB); - } - } - baseVectorA.addInPlace(Vector3d.create(0, 8.0 * yMax, 0)); - } - baseVectorA.x += 100; - baseVectorA.y = 0.0; - } - - GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "LargeCountTriangulation"); - }); - /* These cases had problems -- but maybe only due to bad input? - it.only("ProblemTriangulation", () => { - Triangulator.setAndReturnHeapTrigger(80); - const baseVectorA = Vector3d.create(0, 0, 0); - const allGeometry = []; - for (let maxCut = 50; maxCut < 91; maxCut++) { - const numRecursion = 2; - const perpendicularFactor = 0.8; - let yMax = 0.0; - let xStep = 0.0; - const baseVectorB = baseVectorA.clone(); - for (const generatorFunction of [ - Sample.createFractalLMildConcavePatter, - ]) { - const points = generatorFunction(numRecursion, perpendicularFactor); - const range = Range3d.createArray(points); - const dy = range.yLength(); - yMax = Math.max(yMax, dy); - xStep += 2.0 * range.xLength(); - const transform = Transform.createTranslation(baseVectorB); - transform.multiplyPoint3dArray(points, points); - baseVectorB.addInPlace(Vector3d.create(2 * range.xLength(), 0, 0)); - allGeometry.push(Loop.create(LineString3d.create(points))); - const graph = Triangulator.earcutSingleLoop(points); - if (graph) { - const pfA = PolyfaceBuilder.graphToPolyface(graph); - pfA.tryTranslateInPlace(0, 2.0 * dy, 0); - allGeometry.push(pfA); - Triangulator.cleanupTriangulation(graph); - const pfB = PolyfaceBuilder.graphToPolyface(graph); - pfB.tryTranslateInPlace(0, 4.0 * dy, 0); - allGeometry.push(pfB); - } - } - baseVectorA.x += 2.0 * xStep; - } - Triangulator.setAndReturnHeapTrigger(undefined); - GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "ProblemTriangulation"); - }); - it("ProblemTriangulationB", () => { - Triangulator.setAndReturnHeapTrigger(5); - - const baseVectorA = Vector3d.create(0, 0, 0); - const allGeometry = []; - let yMax = 0.0; - let xStep = 0.0; - const basePoints = [ - Point3d.create(0.250, -0.100, 0.000), - Point3d.create(0.750, -0.100, 0.000), - Point3d.create(1.000, 1.000, 0.000), - Point3d.create(1.350, 1.150, 0.000), - Point3d.create(2.000, 2.000, 0.000), - Point3d.create(2.100, 2.250, 0.000), - Point3d.create(2.100, 2.750, 0.000)]; - for (const rotateIndex of [0, 1, 2, 3, 4, 5, 6]) { - const points = rotateArray(basePoints, rotateIndex); - const range = Range3d.createArray(points); - const dy = range.yLength(); - yMax = Math.max(yMax, dy); - xStep = 2.0 * range.xLength(); - const transform = Transform.createTranslation(baseVectorA); - transform.multiplyPoint3dArray(points, points); - allGeometry.push(Loop.create(LineString3d.create(points))); - const graph = Triangulator.earcutSingleLoop(points); - if (graph) { - const pfA = PolyfaceBuilder.graphToPolyface(graph); - pfA.tryTranslateInPlace(0, 2.0 * dy, 0); - allGeometry.push(pfA); - Triangulator.cleanupTriangulation(graph); - const pfB = PolyfaceBuilder.graphToPolyface(graph); - pfB.tryTranslateInPlace(0, 4.0 * dy, 0); - allGeometry.push(pfB); - } - baseVectorA.x += xStep; - } - // get back to base heap trigger ... - Triangulator.setAndReturnHeapTrigger(undefined); - - GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "ProblemTriangulationB"); - }); - */ - it("TriangulationWithColinearVertices", () => { - const numTheta = 5; - const numThetaSkip = 1; - const allGeometry = []; - const r = 1.0; - let x0 = 0.0; - const dy = 2.0; - for (const numColinear of [1, 3, 7]) { - const points = [Point3d.create(-r, 0, 0)]; - for (let i = 0; i <= numColinear; i++) - points.push(Point3d.create(Geometry.interpolate(-r, i / numColinear, r), 0, 0)); - for (let i = 1; i < numTheta; i++) { - const theta = Angle.createDegrees(i * 180 / numTheta); - points.push(Point3d.create(r * theta.cos(), r * theta.sin(), 0)); - } - // run the triangulator with the array rotated to each x-axis point, and one of every numThetaSkip points around the arc. - let y0 = 0.0; - for (let rotation = 0; rotation < points.length; rotation += (rotation < numColinear ? 1 : numThetaSkip)) { - const pointsB = rotateArray(points, rotation); - const graph = Triangulator.earcutSingleLoop(pointsB); - if (graph) { - const pfA = PolyfaceBuilder.graphToPolyface(graph); - pfA.tryTranslateInPlace(x0, y0 + 2.0 * dy, 0); - allGeometry.push(pfA); - Triangulator.cleanupTriangulation(graph); - const pfB = PolyfaceBuilder.graphToPolyface(graph); - pfB.tryTranslateInPlace(x0, y0 + 4.0 * dy, 0); - allGeometry.push(pfB); - y0 += 10.0; - } - } - x0 += 4.0; + it("CoordinatesOnEdges", () => { + const ck = new Checker(); + const graph = new HalfEdgeGraph(); + const edgeA = graph.addEdgeXY(1, 2, 4, 3); + const edgeB = graph.addEdgeXY(2, -1, 3, 4); + const uvAB = HalfEdge.transverseIntersectionFractions(edgeA, edgeB); + if (ck.testPointer(uvAB, "intersection of edges exists") && uvAB) { + const pointA = edgeA.fractionToPoint2d(uvAB.x); + const pointB = edgeB.fractionToPoint2d(uvAB.y); + ck.testPoint2d(pointA, pointB, "intersection xy"); } - GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "TriangulationWithColinearVertices"); + ck.testUndefined(HalfEdge.transverseIntersectionFractions(edgeA, edgeA), "identical edges"); + expect(ck.getNumErrors()).equals(0); }); - // public static createCutPie(x0: number, y0: number, radius: number, sweep: AngleSweep, numRadialEdges: number, numArcEdges: number, addClosure = false) { - it("PieCuts", () => { - const numThetaSkip = 3; - const allGeometry = []; - const r = 1.0; - let x0 = 0.0; - // proimise: all x above x0 is free space. - for (const points of [ - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 1, 4, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 5, 12, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 90), 2, 5, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 3, 9, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 90), 3, 4, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 5, 12, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 270), 2, 8, false), - Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 270), 5, 12, false), - Sample.createCutPie(0, 0, 100 * r, AngleSweep.createStartEndDegrees(0, 180), 5, 12, false), - ]) { - // run the triangulator with the array rotated to each x-axis point, and one of every numThetaSkip points around the arc. - let y0 = 0.0; - const range = Range3d.createArray(points); - const dx = range.xLength(); - const dy = range.yLength(); - const ex = x0 - range.low.x; - x0 += r; - for (let rotation = 0; rotation < points.length; rotation += (rotation < 4 ? 1 : numThetaSkip)) { - const pointsB = rotateArray(points, rotation); - const graph = Triangulator.earcutSingleLoop(pointsB); - const ls = LineString3d.create(points); - ls.tryTranslateInPlace(ex, 0); - allGeometry.push(ls); - if (graph) { - const pfA = PolyfaceBuilder.graphToPolyface(graph); - pfA.tryTranslateInPlace(ex, y0 + 1.5 * dy, 0); - allGeometry.push(pfA); - Triangulator.cleanupTriangulation(graph); - const pfB = PolyfaceBuilder.graphToPolyface(graph); - pfB.tryTranslateInPlace(ex, y0 + 3.0 * dy, 0); - allGeometry.push(pfB); - y0 += 8.0 * dy; - } - } - x0 += 2.0 * dx; - } - GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "PieCuts"); - }); }); diff --git a/core/geometry/src/test/topology/Triangulator.test.ts b/core/geometry/src/test/topology/Triangulator.test.ts new file mode 100644 index 0000000..ea09c5c --- /dev/null +++ b/core/geometry/src/test/topology/Triangulator.test.ts @@ -0,0 +1,497 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { expect } from "chai"; +import { Checker } from "../Checker"; +import { LineString3d } from "../../curve/LineString3d"; +import { LineSegment3d } from "../../curve/LineSegment3d"; +import { Point3d, Vector3d } from "../../geometry3d/Point3dVector3d"; +import { Range3d } from "../../geometry3d/Range"; +import { Transform } from "../../geometry3d/Transform"; +import { Matrix3d } from "../../geometry3d/Matrix3d"; +import { PolyfaceBuilder } from "../../polyface/PolyfaceBuilder"; + +import { HalfEdgeGraphMerge, HalfEdgeGraphOps } from "../../topology/Merging"; +import { Triangulator } from "../../topology/Triangulation"; + +import { Angle } from "../../geometry3d/Angle"; +import { Sample } from "../../serialization/GeometrySamples"; +import { GeometryCoreTestIO } from "../GeometryCoreTestIO"; +import { Loop } from "../../curve/Loop"; +import { GeometryQuery } from "../../curve/GeometryQuery"; +import { Geometry } from "../../Geometry"; +import { AngleSweep } from "../../geometry3d/AngleSweep"; +import { GraphChecker } from "./Graph.test"; +import { HalfEdgeMask } from "../../topology/Graph"; +import { prettyPrint } from "../testFunctions"; + +function rotateArray(data: Point3d[], index0: number) { + const out = []; + for (let i = 0; i < data.length; i++) out.push(data[(index0 + i) % data.length].clone()); + return out; +} + +/* tslint:disable: no-console */ +describe("Triangulation", () => { + const ck = new Checker(); + + it("TriangulateLoops", () => { + let yShift = 0; + const dx = 20.0; + const dy = 30.0; + const allGeometry: GeometryQuery[] = []; + for (const myLoops of [ + [[ + // Outer + Point3d.create(0, 0, 0), + Point3d.create(3, -2, 0), + Point3d.create(6, 2, 0), + Point3d.create(5, 5, 0), + Point3d.create(4, 2, 0), + Point3d.create(1, 3, 0)], + [ + // Hole + Point3d.create(1, 1, 0), + Point3d.create(2, 2, 0), + Point3d.create(3, 1, 0)]], + // triangle with one hole + [[Point3d.create(0, 0, 0), Point3d.create(5, -5, 0), Point3d.create(5, 5, 0)], + [Point3d.create(2, 1, 0), Point3d.create(3, 1, 0), Point3d.create(3, 0, 0)]], + // triangle with one hole, CCW orientation on the hole (expect it to be corrected) + [[Point3d.create(0, 0, 0), Point3d.create(5, -5, 0), Point3d.create(5, 5, 0)], + [Point3d.create(2, 1, 0), Point3d.create(3, 0, 0), Point3d.create(3, 1, 0)]], + // rectangle with 2 holes + [[Point3d.create(0, 0, 0), Point3d.create(5, 0, 0), Point3d.create(5, 5, 0), Point3d.create(0, 5, 0)], + [Point3d.create(1, 1, 0), Point3d.create(2, 2, 0), Point3d.create(2, 1, 0)], + [Point3d.create(3, 1.5, 0), Point3d.create(4, 3, 0), Point3d.create(4, 1.5, 0)]], + // rectangle with 2 holes, duplicate points here and there + [[Point3d.create(0, 0, 0), Point3d.create(5, 0, 0), Point3d.create(5, 0, 0), Point3d.create(5, 5, 0), Point3d.create(0, 5, 0)], + [Point3d.create(1, 1, 0), Point3d.create(2, 2, 0), Point3d.create(2, 1, 0), Point3d.create(2, 1, 0)], + [Point3d.create(3, 1.5, 0), Point3d.create(4, 3, 0), Point3d.create(4, 1.5, 0), Point3d.create(3, 1.5, 0)]]]) { + let xShift = 0; + // triangulate and flip in the outer loop only . . . + const graph1 = Triangulator.createTriangulatedGraphFromSingleLoop(myLoops[0]); + const unflippedOuter = PolyfaceBuilder.graphToPolyface(graph1); + unflippedOuter.tryTranslateInPlace(xShift, yShift, 0); + allGeometry.push(unflippedOuter); + xShift += dx; + + Triangulator.flipTriangles(graph1); + const flippedOuter = PolyfaceBuilder.graphToPolyface(graph1); + flippedOuter.tryTranslateInPlace(xShift, yShift, 0); + allGeometry.push(flippedOuter); + xShift += 2 * dx; + + // triangulate with the hole + const graph2 = Triangulator.createTriangulatedGraphFromLoops(myLoops)!; + const unflipped2 = PolyfaceBuilder.graphToPolyface(graph2); + unflipped2.tryTranslateInPlace(xShift, yShift, 0); + allGeometry.push(unflipped2); + xShift += dx; + + Triangulator.flipTriangles(graph2); + const flipped2 = PolyfaceBuilder.graphToPolyface(graph2); + flipped2.tryTranslateInPlace(xShift, yShift, 0); + allGeometry.push(flipped2); + xShift += dx; + + yShift += dy; + } + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "TriangulateAndFlip"); + ck.checkpoint("TriangulateAndFlip"); + expect(ck.getNumErrors()).equals(0); + }); + + it("SquareWaves", () => { + let degreeCount = 0; + for (const degrees of [0, 10, 30, 95, -20]) { + let y0 = 0.0; + for (const numPhase of [1, 3, 7, 15]) { + const x0 = 4.0 + 6.0 * numPhase * degreeCount; + const name = "SquareWave" + degreeCount + "." + numPhase; + const pointA = Point3d.create(1.5 * numPhase, 0, 0); + const yShiftVector = Vector3d.create(0, 2, 0); + const rotation = Transform.createFixedPointAndMatrix( + Point3d.create(1.5 * numPhase, 0, 0), + Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(degrees)) as Matrix3d); + const points = Sample.createSquareWave(Point3d.create(0, 0, 0), 1, 0.5, 2, numPhase, 1); + rotation.multiplyVector(yShiftVector, yShiftVector); + if (degrees !== 0.0) + rotation.multiplyPoint3dArrayInPlace(points); + if (Checker.noisy.squareWaves) + console.log(name, "Rotation angle ", degrees, " numPhase", numPhase); + const graph = Triangulator.createTriangulatedGraphFromSingleLoop(points); + const pfA = PolyfaceBuilder.graphToPolyface(graph); + Triangulator.flipTriangles(graph); + + GraphChecker.verifyMaskAroundFaces(ck, graph, HalfEdgeMask.EXTERIOR); + const pfB = PolyfaceBuilder.graphToPolyface(graph); + // const pfC = PolyfaceBuilder.graphToPolyface(graph); + const ls = LineString3d.create(points); + const ls1 = LineString3d.create(Point3d.create(), pointA); + ls.tryTranslateInPlace(x0, y0); + pfA.tryTranslateInPlace(x0 + yShiftVector.x, y0 + yShiftVector.y, 0); + pfB.tryTranslateInPlace(x0 + 2 * yShiftVector.x, y0 + 2 * yShiftVector.y, 0); + // pfC.tryTranslateInPlace(x0 + 4 * yShiftVector.x, y0 + 4 * yShiftVector.y, 0); + + ls1.tryTranslateInPlace(x0, y0); + y0 += 3 + 4 * numPhase; + GeometryCoreTestIO.saveGeometry([ls1, ls, pfA, pfB], "Graph", name); + } + degreeCount++; + } + ck.checkpoint("SquareWaves"); + expect(ck.getNumErrors()).equals(0); + }); +}); + +function testGraphFromSegments(ck: Checker, x0: number, segments: LineSegment3d[], expectSingleLoop: boolean, fileName: string, outputAnnotatedGeometry: boolean = true) { + const theGraph = HalfEdgeGraphMerge.formGraphFromSegments(segments); + GraphChecker.verifySignedFaceCounts(ck, theGraph, undefined, 1, undefined); + const dx = x0; + const yStep = 25; + let dy = -yStep; + const allGeometry: GeometryQuery[] = []; + GeometryCoreTestIO.captureGeometry(allGeometry, segments, dx, dy += yStep); + if (outputAnnotatedGeometry) + GraphChecker.captureAnnotatedGraph(allGeometry, theGraph, dx, dy += yStep); + if (expectSingleLoop) + GraphChecker.verifyGraphCounts(ck, theGraph, true, 2, undefined, undefined); + HalfEdgeGraphOps.formMonotoneFaces(theGraph); + GraphChecker.verifySignedFaceCounts(ck, theGraph, undefined, 1, undefined); + GeometryCoreTestIO.captureGeometry(allGeometry, PolyfaceBuilder.graphToPolyface(theGraph), dx, dy += yStep); + if (outputAnnotatedGeometry) + GraphChecker.captureAnnotatedGraph(allGeometry, theGraph, dx, dy += yStep); + + // console.log("Total Faces: ", theGraph.collectFaceLoops().length); + // for (const face of faces) { + // Triangulator.earcutFromSingleFaceLoop(face); + // } + // exportGraph(theGraph, "AfterTriangulation"); + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", fileName); + +} +describe("MonotoneFaces", () => { + // 5 sides -- tall rectangle with upward V at bottom edge. + + // somewhat nasty polygon .... + const loopB: LineSegment3d[] = [ + LineSegment3d.create(Point3d.create(0, 20), Point3d.create(0, 0)), + LineSegment3d.create(Point3d.create(0, 0), Point3d.create(3, 3)), + LineSegment3d.create(Point3d.create(3, 3), Point3d.create(6, 0)), + LineSegment3d.create(Point3d.create(6, 0), Point3d.create(6, 8)), + LineSegment3d.create(Point3d.create(6, 8), Point3d.create(9, 5)), + LineSegment3d.create(Point3d.create(9, 5), Point3d.create(10, 2)), + LineSegment3d.create(Point3d.create(10, 2), Point3d.create(12, 7)), + LineSegment3d.create(Point3d.create(12, 7), Point3d.create(14, 5)), + LineSegment3d.create(Point3d.create(14, 5), Point3d.create(18, 15)), + LineSegment3d.create(Point3d.create(18, 15), Point3d.create(16, 17)), + LineSegment3d.create(Point3d.create(16, 17), Point3d.create(16.5, 20)), + LineSegment3d.create(Point3d.create(16.5, 20), Point3d.create(14, 18)), + LineSegment3d.create(Point3d.create(14, 18), Point3d.create(15, 22)), + LineSegment3d.create(Point3d.create(15, 22), Point3d.create(12, 21)), + LineSegment3d.create(Point3d.create(12, 21), Point3d.create(10, 20)), + LineSegment3d.create(Point3d.create(10, 20), Point3d.create(9, 17)), + LineSegment3d.create(Point3d.create(9, 17), Point3d.create(6, 15)), + LineSegment3d.create(Point3d.create(6, 15), Point3d.create(0, 20)), + ]; + + it("loopA", () => { + const ck = new Checker(); + let id = 0; + const ax = 5.0; + const ay = 10.0; + // const e = 0.1; + for (const loopA of [ + Sample.creatVerticalStaggerPolygon(-1, -2, 4, 3, ax, ay, 0, 0), + Sample.creatVerticalStaggerPolygon(3, 0, 0, 4, ax, ay, 0, 0), + // Sample.creatVerticalStaggerPolygon(3, e, e, 3, ax, ay, 0, 0), + // Sample.creatVerticalStaggerPolygon(3, 0, 0, 3, ax, ay, 0, 0), + // Sample.creatVerticalStaggerPolygon(-3, 2, 1, 2, ax, ay, 0, 0), + // Sample.creatVerticalStaggerPolygon(3, 0, 0, 3, ax, ay, 0, 0), + // Sample.creatVerticalStaggerPolygon(3, 0, 0, -3, ax, ay, 0, 0), + // Sample.creatVerticalStaggerPolygon(3, 0, 0, -5, ax, ay, -1, 0), + // Sample.creatVerticalStaggerPolygon(7, 0, 0, -6, ax, ay, -0.5, 0), + ]) { + const segmentA = Sample.convertPointsToSegments(loopA); + console.log("hello"); + const s = prettyPrint(loopA); + console.log("loopA", s); + testGraphFromSegments(ck, id * 30, segmentA, true, "LoopA" + id++, false); + } + expect(ck.getNumErrors()).equals(0); + }); + + it("loopB", () => { + const ck = new Checker(); + testGraphFromSegments(ck, 0, loopB, true, "LoopB"); + expect(ck.getNumErrors()).equals(0); + }); + + it("HashMerge", () => { + const ck = new Checker(); + const a = 1.0; + const b = 2.0; + const allGeometry: GeometryQuery[] = []; + let dx = 0.0; + let dy = 0.0; + for (const numLine of [2]) { + const lines = []; + const xMin = 0; + const xMax = (numLine + 1) * a; + const yMin = 0; + const yMax = (numLine + 1) * b; + const yStep = yMax + b; + // horizontal lines ... + for (let i = 1; i <= numLine; i++) { + lines.push(LineSegment3d.createXYXY(xMin, i * b, xMax, i * b)); + } + // vertical lines + for (let i = 1; i <= numLine; i++) { + lines.push(LineSegment3d.createXYXY(i * a, yMin, i * a, yMax)); + } + const theGraph = HalfEdgeGraphMerge.formGraphFromSegments(lines); + + GeometryCoreTestIO.captureGeometry(allGeometry, lines, dx, dy); + dy += yStep; + + GraphChecker.captureAnnotatedGraph(allGeometry, theGraph, dx, dy); + dy += yStep; + + const numFace = (numLine - 1) * (numLine - 2); + GraphChecker.verifyGraphCounts(ck, theGraph, true, numFace, (numLine + 2) * (numLine + 2) - 4, a * b * numFace); + + HalfEdgeGraphOps.formMonotoneFaces(theGraph); + GraphChecker.captureAnnotatedGraph(allGeometry, theGraph, dx, dy); + dy += yStep; + // console.log("Total Faces: ", theGraph.collectFaceLoops().length); + // for (const face of faces) { + // Triangulator.earcutFromSingleFaceLoop(face); + // } + // exportGraph(theGraph, "AfterTriangulation"); + dx += a * (numLine + 4); + } + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "HashMerge"); + expect(ck.getNumErrors()).equals(0); + }); + +}); + +describe("Triangulation", () => { + it("LargeCountTriangulation", () => { + const baseVectorA = Vector3d.create(0, 0, 0); + const allGeometry = []; + // REMARK + // EDL Feb 20 2019 + // Triangulation introduces a search zheap (not understood by me at this time) for very large polygons. + // With original trigger of 80 edges, some invalid triangulations occur for numRecursion = 2 (the original limit) + // Raise the trigger to 200 and all is fine. + // But the statement coverage drops significantly -- 94% to 93.37 + // numRecursion = 3 generates larger polygons (around 400) and again there are some failures. + // so we conclude the zheap is large chunk of code with some bugs. + // This is an unlikely use case at this time. So + // 1) the heap trigger is left at 200 (see Triangulation.ts) + // 2) add a method `Triangulation.setAndReturnHeapTrigger (number): number` + // Someday debug that .... + for (const numRecursion of [1, 2, 3]) { + for (const perpendicularFactor of [0.85, -1.0, -0.5]) { + let yMax = 0.0; + const baseVectorB = baseVectorA.clone(); + for (const generatorFunction of [ + Sample.createFractalSquareReversingPattern, + Sample.createFractalDiamonConvexPattern, + Sample.createFractalLReversingPatterh, + Sample.createFractalHatReversingPattern, + Sample.createFractalLMildConcavePatter]) { + const points = generatorFunction(numRecursion, perpendicularFactor); + const range = Range3d.createArray(points); + const dy = range.yLength(); + yMax = Math.max(yMax, dy); + const transform = Transform.createTranslation(baseVectorB); + transform.multiplyPoint3dArray(points, points); + baseVectorB.addInPlace(Vector3d.create(2 * range.xLength(), 0, 0)); + allGeometry.push(Loop.create(LineString3d.create(points))); + const graph = Triangulator.createTriangulatedGraphFromSingleLoop(points); + if (graph) { + const pfA = PolyfaceBuilder.graphToPolyface(graph); + pfA.tryTranslateInPlace(0, 2.0 * dy, 0); + allGeometry.push(pfA); + Triangulator.flipTriangles(graph); + const pfB = PolyfaceBuilder.graphToPolyface(graph); + pfB.tryTranslateInPlace(0, 4.0 * dy, 0); + allGeometry.push(pfB); + } + } + baseVectorA.addInPlace(Vector3d.create(0, 8.0 * yMax, 0)); + } + baseVectorA.x += 100; + baseVectorA.y = 0.0; + } + + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "LargeCountTriangulation"); + }); + /* These cases had problems -- but maybe only due to bad input? + it.only("ProblemTriangulation", () => { + Triangulator.setAndReturnHeapTrigger(80); + const baseVectorA = Vector3d.create(0, 0, 0); + const allGeometry = []; + for (let maxCut = 50; maxCut < 91; maxCut++) { + const numRecursion = 2; + const perpendicularFactor = 0.8; + let yMax = 0.0; + let xStep = 0.0; + const baseVectorB = baseVectorA.clone(); + for (const generatorFunction of [ + Sample.createFractalLMildConcavePatter, + ]) { + const points = generatorFunction(numRecursion, perpendicularFactor); + const range = Range3d.createArray(points); + const dy = range.yLength(); + yMax = Math.max(yMax, dy); + xStep += 2.0 * range.xLength(); + const transform = Transform.createTranslation(baseVectorB); + transform.multiplyPoint3dArray(points, points); + baseVectorB.addInPlace(Vector3d.create(2 * range.xLength(), 0, 0)); + allGeometry.push(Loop.create(LineString3d.create(points))); + const graph = Triangulator.earcutSingleLoop(points); + if (graph) { + const pfA = PolyfaceBuilder.graphToPolyface(graph); + pfA.tryTranslateInPlace(0, 2.0 * dy, 0); + allGeometry.push(pfA); + Triangulator.cleanupTriangulation(graph); + const pfB = PolyfaceBuilder.graphToPolyface(graph); + pfB.tryTranslateInPlace(0, 4.0 * dy, 0); + allGeometry.push(pfB); + } + } + baseVectorA.x += 2.0 * xStep; + } + Triangulator.setAndReturnHeapTrigger(undefined); + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "ProblemTriangulation"); + }); + it("ProblemTriangulationB", () => { + Triangulator.setAndReturnHeapTrigger(5); + + const baseVectorA = Vector3d.create(0, 0, 0); + const allGeometry = []; + let yMax = 0.0; + let xStep = 0.0; + const basePoints = [ + Point3d.create(0.250, -0.100, 0.000), + Point3d.create(0.750, -0.100, 0.000), + Point3d.create(1.000, 1.000, 0.000), + Point3d.create(1.350, 1.150, 0.000), + Point3d.create(2.000, 2.000, 0.000), + Point3d.create(2.100, 2.250, 0.000), + Point3d.create(2.100, 2.750, 0.000)]; + for (const rotateIndex of [0, 1, 2, 3, 4, 5, 6]) { + const points = rotateArray(basePoints, rotateIndex); + const range = Range3d.createArray(points); + const dy = range.yLength(); + yMax = Math.max(yMax, dy); + xStep = 2.0 * range.xLength(); + const transform = Transform.createTranslation(baseVectorA); + transform.multiplyPoint3dArray(points, points); + allGeometry.push(Loop.create(LineString3d.create(points))); + const graph = Triangulator.earcutSingleLoop(points); + if (graph) { + const pfA = PolyfaceBuilder.graphToPolyface(graph); + pfA.tryTranslateInPlace(0, 2.0 * dy, 0); + allGeometry.push(pfA); + Triangulator.cleanupTriangulation(graph); + const pfB = PolyfaceBuilder.graphToPolyface(graph); + pfB.tryTranslateInPlace(0, 4.0 * dy, 0); + allGeometry.push(pfB); + } + baseVectorA.x += xStep; + } + // get back to base heap trigger ... + Triangulator.setAndReturnHeapTrigger(undefined); + + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "ProblemTriangulationB"); + }); + */ + it("TriangulationWithColinearVertices", () => { + const numTheta = 5; + const numThetaSkip = 1; + const allGeometry = []; + const r = 1.0; + let x0 = 0.0; + const dy = 2.0; + for (const numColinear of [1, 3, 7]) { + const points = [Point3d.create(-r, 0, 0)]; + for (let i = 0; i <= numColinear; i++) + points.push(Point3d.create(Geometry.interpolate(-r, i / numColinear, r), 0, 0)); + for (let i = 1; i < numTheta; i++) { + const theta = Angle.createDegrees(i * 180 / numTheta); + points.push(Point3d.create(r * theta.cos(), r * theta.sin(), 0)); + } + // run the triangulator with the array rotated to each x-axis point, and one of every numThetaSkip points around the arc. + let y0 = 0.0; + for (let rotation = 0; rotation < points.length; rotation += (rotation < numColinear ? 1 : numThetaSkip)) { + const pointsB = rotateArray(points, rotation); + const graph = Triangulator.createTriangulatedGraphFromSingleLoop(pointsB); + if (graph) { + const pfA = PolyfaceBuilder.graphToPolyface(graph); + pfA.tryTranslateInPlace(x0, y0 + 2.0 * dy, 0); + allGeometry.push(pfA); + Triangulator.flipTriangles(graph); + const pfB = PolyfaceBuilder.graphToPolyface(graph); + pfB.tryTranslateInPlace(x0, y0 + 4.0 * dy, 0); + allGeometry.push(pfB); + y0 += 10.0; + } + } + x0 += 4.0; + } + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "TriangulationWithColinearVertices"); + }); + // public static createCutPie(x0: number, y0: number, radius: number, sweep: AngleSweep, numRadialEdges: number, numArcEdges: number, addClosure = false) { + it("PieCuts", () => { + + const numThetaSkip = 3; + const allGeometry = []; + const r = 1.0; + let x0 = 0.0; + // proimise: all x above x0 is free space. + for (const points of [ + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 1, 4, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 5, 12, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 90), 2, 5, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 3, 9, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 90), 3, 4, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 180), 5, 12, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 270), 2, 8, false), + Sample.createCutPie(0, 0, r, AngleSweep.createStartEndDegrees(0, 270), 5, 12, false), + Sample.createCutPie(0, 0, 100 * r, AngleSweep.createStartEndDegrees(0, 180), 5, 12, false), + ]) { + // run the triangulator with the array rotated to each x-axis point, and one of every numThetaSkip points around the arc. + let y0 = 0.0; + const range = Range3d.createArray(points); + const dx = range.xLength(); + const dy = range.yLength(); + const ex = x0 - range.low.x; + x0 += r; + for (let rotation = 0; rotation < points.length; rotation += (rotation < 4 ? 1 : numThetaSkip)) { + const pointsB = rotateArray(points, rotation); + const graph = Triangulator.createTriangulatedGraphFromSingleLoop(pointsB); + const ls = LineString3d.create(points); + ls.tryTranslateInPlace(ex, 0); + allGeometry.push(ls); + if (graph) { + const pfA = PolyfaceBuilder.graphToPolyface(graph); + pfA.tryTranslateInPlace(ex, y0 + 1.5 * dy, 0); + allGeometry.push(pfA); + Triangulator.flipTriangles(graph); + const pfB = PolyfaceBuilder.graphToPolyface(graph); + pfB.tryTranslateInPlace(ex, y0 + 3.0 * dy, 0); + allGeometry.push(pfB); + y0 += 8.0 * dy; + } + } + x0 += 2.0 * dx; + } + GeometryCoreTestIO.saveGeometry(allGeometry, "Graph", "PieCuts"); + }); +}); diff --git a/core/geometry/src/topology/Graph.ts b/core/geometry/src/topology/Graph.ts index 6d33618..02bacbe 100644 --- a/core/geometry/src/topology/Graph.ts +++ b/core/geometry/src/topology/Graph.ts @@ -5,10 +5,11 @@ /** @module Topology */ -import { Vector2d } from "../geometry3d/Point2dVector2d"; +import { Vector2d, Point2d } from "../geometry3d/Point2dVector2d"; import { Point3d, Vector3d } from "../geometry3d/Point3dVector3d"; import { LineSegment3d } from "../curve/LineSegment3d"; import { Geometry } from "../Geometry"; +import { SmallSystem } from "../numerics/Polynomials"; export type NodeFunction = (node: HalfEdge) => any; export type NodeToNumberFunction = (node: HalfEdge) => number; export type HalfEdgeToBooleanFunction = (node: HalfEdge) => boolean; @@ -38,7 +39,7 @@ export class HalfEdge { public x: number; public y: number; public z: number; - + public sortAngle?: number; // used in sorting around vertex. private _id: any; // immutable id useful for debuggging. public get id() { return this._id; } @@ -151,8 +152,8 @@ export class HalfEdge { } // These members are specific to the z-sweep trapezoidal decomposition and earlobe triangulation. // previous and next nodes in z-order - public prevZ!: HalfEdge; - public nextZ!: HalfEdge; + // public prevZ?: HalfEdge; + // public nextZ?: HalfEdge; // indicates whether this is a steiner point public steiner: boolean; // z-order curve value @@ -358,8 +359,6 @@ export class HalfEdge { (this._facePredecessor as any) = undefined; (this._faceSuccessor as any) = undefined; (this._edgeMate as any) = undefined; - (this.nextZ as any) = undefined; - (this.prevZ as any) = undefined; } /** @returns Return the node. This identity function is useful as the NodeFunction in collector methods. */ @@ -527,6 +526,56 @@ export class HalfEdge { } while (node0 !== this); return 0.5 * sum; } + /** + * interpolate xy coordinates between this node and its face successor. + * @param fraction fractional position along this edge. + * @param result xy coordinates + */ + public fractionToPoint2d(fraction: number, result?: Point2d): Point2d { + const node1 = this.faceSuccessor; + return Point2d.create( + this.x + (node1.x - this.x) * fraction, + this.y + (node1.y - this.y) * fraction, + result); + } + /** + * * Compute fractional coordintes of the intersection of edges from given base nodes + * * If parallel or colinear, return undefined. + * * If (possibly extended) lines intersect, return the fractions of intersection as x,y in the result. + * @param nodeA0 Base node of edge A + * @param nodeB0 Base node of edge B + * @param result optional preallocated result + */ + public static transverseIntersectionFractions(nodeA0: HalfEdge, nodeB0: HalfEdge, result?: Vector2d): Vector2d | undefined { + const nodeA1 = nodeA0.faceSuccessor; + const nodeB1 = nodeB0.faceSuccessor; + if (!result) + result = Vector2d.create(); + if (SmallSystem.linearSystem2d( + nodeA1.x - nodeA0.x, nodeB0.x - nodeB1.x, + nodeA1.y - nodeA0.y, nodeB0.y - nodeB1.y, + nodeB0.x - nodeA0.x, nodeB0.y - nodeA0.y, + result)) + return result; + return undefined; + } + /** + * * Compute fractional coordintes of the intersection of a horizontal line with an edge. + * * If the edge is horizontal with (approximate) identical y, return the node. + * * If the edge is horizontal with different y, return undefined. + * * If the edge is not horizontal, return the fractional position (possibly outside 0..1) of the intersection. + * @param nodeA Base node of edge + * @param result optional preallocated result + */ + public static horizontalScanFraction(node0: HalfEdge, y: number): number | undefined | HalfEdge { + const node1 = node0.faceSuccessor; + const dy = node1.y - node0.y; + if (Geometry.isSameCoordinate(y, node0.y) && Geometry.isSameCoordinate(y, node1.y)) + return node0; + if (Geometry.isSameCoordinate(dy, 0.0)) + return undefined; + return Geometry.conditionalDivideFraction(y - node0.y, dy); + } } /** diff --git a/core/geometry/src/topology/Merging.ts b/core/geometry/src/topology/Merging.ts index e22d816..de6ad8f 100644 --- a/core/geometry/src/topology/Merging.ts +++ b/core/geometry/src/topology/Merging.ts @@ -12,46 +12,35 @@ import { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from "./Graph"; import { GrowableFloat64Array } from "../geometry3d/GrowableFloat64Array"; import { ClusterableArray } from "../numerics/ClusterableArray"; -class SweepEvent { - // Node from segment array - public node0: HalfEdge; - public node1: HalfEdge; - - public leftEvent: SweepEvent | undefined; // The top-most node of the segment paired left (node0) - public rightEvent: SweepEvent | undefined; // The bottom-most node of the segment paired right (node1) - // Alternates, if left or right pairs at a face vertex - public leftAlt: SweepEvent | undefined; - public rightAlt: SweepEvent | undefined; - - public constructor(node0: HalfEdge, node1: HalfEdge) { - this.node0 = node0; - this.node1 = node1; - } -} - -export class Merger { +/** + * * Assorted methods used in algorithms on HalfEdgeGraph. + * @internal + */ +export class HalfEdgeGraphOps { // SORTING FUNCTIONS (compare methods used by sort() in larger algorithms) ----------------------------------------------------------- - /** Compare function for sorting X, Y, and theta componenets stored in a Point3d, useful for forming a graph from an array of segments */ - private static xyThetaCompare(a: any, b: any) { + /** Compare function for sorting X, Y, and sortAngle components of ndoes. */ + public static compareNodeXYTheta(a: HalfEdge, b: HalfEdge) { // Check x's - if (!Geometry.isSameCoordinate(a.xyTheta.x, b.xyTheta.x)) - if (a.xyTheta.x < b.xyTheta.x) + if (!Geometry.isSameCoordinate(a.x, b.x)) + if (a.x < b.x) return -1; - else if (a.xyTheta.x > b.xyTheta.x) + else if (a.x > b.x) return 1; // Check y's - if (!Geometry.isSameCoordinate(a.xyTheta.y, b.xyTheta.y)) - if (a.xyTheta.y < b.xyTheta.y) + if (!Geometry.isSameCoordinate(a.y, b.y)) + if (a.y < b.y) return -1; - else if (a.xyTheta.y > b.xyTheta.y) + else if (a.y > b.y) return 1; - // Check theta - if (a.xyTheta.z < b.xyTheta.z) - return -1; - else if (a.xyTheta.z > b.xyTheta.z) - return 1; + if (a.sortAngle !== undefined && b.sortAngle !== undefined) { + // Check theta + if (a.sortAngle < b.sortAngle) + return -1; + else if (a.z > b.z) + return 1; + } return 0; } @@ -64,15 +53,6 @@ export class Merger { return 0; } - /** Compare function for sorting the "event queue" when sweeping a polygon forming trapezoid sections (y increasing) */ - private static eventCompareTrapezoidation(a: SweepEvent, b: SweepEvent): number { - if (a.node0.y > b.node0.y) - return -1; - else if (a.node0.y < b.node0.y) - return 1; - return 0; - } - // --------------------------------------------------------------------------------------------------------------------- // QUERY FUNCTIONS (methods to grab specific extremities of a segment or node connection) ----------------------------------------- @@ -137,33 +117,29 @@ export class Merger { // ---------------------------------------------------------------------------------------------------------------------- - /** Returns an array of a Point3d holding x, y, and theta values for a point, and a corresponding node. Useful for organizing/sorting nodes */ - private static segmentsToXYThetaNode(segments: LineSegment3d[], returnGraph: HalfEdgeGraph): Array<{ xyTheta: Point3d, node: HalfEdge }> { - const arr = []; + /** Returns an array of a all nodes (both ends) of edges created from segments. */ + public static segmentArrayToGraphEdges(segments: LineSegment3d[], returnGraph: HalfEdgeGraph, mask: HalfEdgeMask): HalfEdge[] { + const result = []; let idxCounter = 0; // Push the endpoints of each segment onto arr[] in the form {(x, y, theta), Node} for (const segment of segments) { - // Endpoint 0 - let theta0 = Math.atan2((segment.point1Ref.y - segment.point0Ref.y), (segment.point1Ref.x - segment.point0Ref.x)); - if (theta0 < 0) theta0 = theta0 + 2 * Math.PI; - const point0 = Point3d.create(segment.point0Ref.x, segment.point0Ref.y, theta0); - let theta1 = Math.atan2(-(segment.point1Ref.y - segment.point0Ref.y), -(segment.point1Ref.x - segment.point0Ref.x)); - if (theta1 < 0) theta1 = theta1 + 2 * Math.PI; - const point1 = Point3d.create(segment.point1Ref.x, segment.point1Ref.y, theta1); + const node0 = returnGraph.createEdgeXYZXYZ( + segment.point0Ref.x, segment.point0Ref.y, segment.point0Ref.z, + idxCounter, + segment.point1Ref.x, segment.point1Ref.y, segment.point1Ref.z, + idxCounter + 1); - const node0 = returnGraph.createEdgeXYZXYZ(point0.x, point0.y, point0.z, idxCounter, point1.x, point1.y, point1.z, idxCounter + 1); const node1 = node0.edgeMate; idxCounter += 2; - node0.setMaskAroundFace(HalfEdgeMask.BOUNDARY); // Original given coordinates must be part of boundary - arr.push({ xyTheta: point0, node: node0 }); - arr.push({ xyTheta: point1, node: node1 }); - returnGraph.allHalfEdges.push(node0); + node0.setMaskAroundFace(mask); // Original given coordinates must be part of boundary + result.push(node0); + result.push(node1); } - return arr; + return result; } /** Given two segments, uses the equations of the two representative lines and the determinant to give a point of intersection; @@ -190,10 +166,10 @@ export class Merger { if (checkInBounds) { // Ensure the point is within bounds of both segments - if ((intersection.x >= Merger.getLeftValueOfSegment(seg1) && intersection.x <= Merger.getRightValueOfSegment(seg1) && - intersection.y >= Merger.getLowValueOfSegment(seg1) && intersection.y <= Merger.getHighValueOfSegment(seg1))) { - if (intersection.x >= Merger.getLeftValueOfSegment(seg2) && intersection.x <= Merger.getRightValueOfSegment(seg2) && - intersection.y >= Merger.getLowValueOfSegment(seg2) && intersection.y <= Merger.getHighValueOfSegment(seg2)) { + if ((intersection.x >= HalfEdgeGraphOps.getLeftValueOfSegment(seg1) && intersection.x <= HalfEdgeGraphOps.getRightValueOfSegment(seg1) && + intersection.y >= HalfEdgeGraphOps.getLowValueOfSegment(seg1) && intersection.y <= HalfEdgeGraphOps.getHighValueOfSegment(seg1))) { + if (intersection.x >= HalfEdgeGraphOps.getLeftValueOfSegment(seg2) && intersection.x <= HalfEdgeGraphOps.getRightValueOfSegment(seg2) && + intersection.y >= HalfEdgeGraphOps.getLowValueOfSegment(seg2) && intersection.y <= HalfEdgeGraphOps.getHighValueOfSegment(seg2)) { return intersection; } else { return undefined; @@ -207,7 +183,7 @@ export class Merger { * sorts a number array and filters out 0's, 1's, and duplicates... * useful when trying to simplify the found intersections of each segment in an array */ - private static sortAndFilterCrossings(arr: number[]) { + public static sortAndFilterCrossings(arr: number[]) { if (arr.length === 0) return arr; arr.sort(GrowableFloat64Array.compare); let r = 0; @@ -227,20 +203,20 @@ export class Merger { * * For each 'event' in the queue, check its corresponding segment for intersections with segments whose left-most points * appear before this event's right-most point */ - private static findCrossings(segments: LineSegment3d[]): number[][] { + public static findCrossings(segments: LineSegment3d[]): number[][] { const queue: Array<{ leftPoint: Point3d, rightPoint: Point3d, segIdx: number }> = []; const crossings: number[][] = []; for (let i = 0; i < segments.length; i++) { queue.push({ - leftPoint: Merger.getLeftmostPointOfSegment(segments[i]), - rightPoint: Merger.getRightmostPointOfSegment(segments[i]), + leftPoint: HalfEdgeGraphOps.getLeftmostPointOfSegment(segments[i]), + rightPoint: HalfEdgeGraphOps.getRightmostPointOfSegment(segments[i]), segIdx: i, }); } // Sort the eQueue of points from left to right - queue.sort(Merger.eventCompareCrossings); + queue.sort(HalfEdgeGraphOps.eventCompareCrossings); for (let i = 0; i < queue.length; i++) { const iSegIdx = queue[i].segIdx; @@ -257,7 +233,7 @@ export class Merger { const jSegIdx = queue[j].segIdx; const iSeg = segments[iSegIdx]; const jSeg = segments[jSegIdx]; - const intersection = Merger.getIntersectionOfSegments(iSeg, jSeg, true); + const intersection = HalfEdgeGraphOps.getIntersectionOfSegments(iSeg, jSeg, true); if (intersection !== undefined) { const fractionForISeg = iSeg.point0Ref.distance(intersection) / iSeg.curveLength(); @@ -276,313 +252,46 @@ export class Merger { } /** - * Returns a graph structure formed from the given LineSegment array + * * For each face with positive area . . . add edges as needed so that each face has one definitely lower node and one definite upper node. + * * Hence tracing edges from the low node, there is a sequence of upward edges, reaching the upper, then a sequence of downward edges reaching the low node. + * * This is an essential step for subsequent triangulation. * - * * Find all intersections of each segment, and split them if necessary - * * Record endpoints of every segment in the form X, Y, Theta; This information is stored as a new node and sorted to match up - * vertices. - * * For vertices that match up, pinch the nodes to create vertex loops, which in closed objects, will also eventually form face - * loops + * @param graph */ - public static formGraphFromSegments(lineSegments: LineSegment3d[]): HalfEdgeGraph { - // Structure of an index of the array: { xyTheta: Point3d, node: Node } - const returnGraph = new HalfEdgeGraph(); - const segments: LineSegment3d[] = []; - - // Obtain an array of all of the fractional intersections for each segment... remove duplicates and endpoints - const intersectArray = Merger.findCrossings(lineSegments); - for (const item of intersectArray) { - // Get rid of duplicate intersection findings - Merger.sortAndFilterCrossings(item); - } + public static formMonotoneFaces(graph: HalfEdgeGraph) { - // Create new segment array that contains the split segments - for (let i = 0; i < intersectArray.length; i++) { - if (intersectArray[i].length === 0) { - segments.push(lineSegments[i]); + const allFaces = graph.collectFaceLoops(); + graph.clearMask(HalfEdgeMask.VISITED); + // For every face, break the face down into monotone sections + for (const node of allFaces) { + if (node.isMaskSet(HalfEdgeMask.VISITED)) + continue; + const area = node.signedFaceArea(); + if (area <= 0.0) { + node.setMaskAroundFace(HalfEdgeMask.VISITED); continue; } - let newStart = 0; - for (const f of intersectArray[i]) { - segments.push(LineSegment3d.create(lineSegments[i].fractionToPoint(newStart), - lineSegments[i].fractionToPoint(f))); - newStart = f; - } - // Add last segment, which is from last element of break array to end of original segment - segments.push(LineSegment3d.create(lineSegments[i].fractionToPoint(newStart), - lineSegments[i].fractionToPoint(1))); - } - - const arr = Merger.segmentsToXYThetaNode(segments, returnGraph); - - // Sort lexically - arr.sort(Merger.xyThetaCompare); - let lastNode = 0; - - // Connect nodes at vertices - for (let i = 1; i <= arr.length; i++) { - if (i === arr.length || !Geometry.isSameCoordinate(arr[i].node.x, arr[lastNode].node.x) || - !Geometry.isSameCoordinate(arr[i].node.y, arr[lastNode].node.y)) { - // pinch matching vertices - for (let j = lastNode; j < i - 1; j++) { - HalfEdge.pinch(arr[j].node, arr[j + 1].node); - } - lastNode = i; - } - } - - return returnGraph; - } - - // TODO: IMPROVE PERFORMANCE FROM N^2, N BEING THE # OF NODES IN THE FACE - /** For every event, pair it with other events of the closest segments that this event's horizontal would hit on the left and right */ - private static setQueuePairings(queue: SweepEvent[]) { - // Segment to be reused when testing intersections - const unitSegment = LineSegment3d.createXYXY(0, 0, 0, 0); - for (const event of queue) { - // Segment to be reused when testing intersections - const segToCheck = LineSegment3d.createXYXY(0, 0, 0, 0); - - // Left pairing - LineSegment3d.createXYXY(event.node0.x, event.node0.y, event.node0.x - 1, event.node0.y, undefined, unitSegment); - let closestDistance = Number.MAX_VALUE; - let lastIntersection: Point3d | undefined; - for (const toCheck of queue) { - if (event.node0 === toCheck.node0) - continue; - - LineSegment3d.createXYXY(toCheck.node0.x, toCheck.node0.y, toCheck.node1.x, toCheck.node1.y, undefined, segToCheck); - const intersection = Merger.getIntersectionOfSegments( - unitSegment, segToCheck, false); - if (intersection) { // found possible match - - if ((segToCheck.point0Ref.y <= event.node0.y && segToCheck.point1Ref.y >= event.node0.y) || - (segToCheck.point0Ref.y >= event.node0.y && segToCheck.point1Ref.y <= event.node0.y)) { // Check that segment is of correct height - - if (intersection.x < event.node0.x) { // Is to left of point - - if (!(Geometry.isSameCoordinate(intersection.x, event.node0.x))) { // Intersection does not occur at same coord as endpoint - const distanceToSegment = Geometry.distanceXYXY(intersection.x, intersection.y, event.node0.x, event.node0.y); - - if (lastIntersection && Geometry.isSamePoint3d(lastIntersection, intersection)) { // For pairing at vertice, save alt. - event.leftAlt = toCheck; - lastIntersection = intersection; - } else if (distanceToSegment < closestDistance) { - event.leftEvent = toCheck; - event.leftAlt = undefined; - lastIntersection = intersection; - closestDistance = distanceToSegment; - } - } - } - } - } - } - - // Right pairing - LineSegment3d.createXYXY(event.node0.x, event.node0.y, event.node0.x + 1, event.node0.y, undefined, unitSegment); - closestDistance = Number.MAX_VALUE; - lastIntersection = undefined; - for (const toCheck of queue) { - if (event.node0 === toCheck.node0) - continue; - - LineSegment3d.createXYXY(toCheck.node0.x, toCheck.node0.y, toCheck.node1.x, toCheck.node1.y, undefined, segToCheck); - const intersection = Merger.getIntersectionOfSegments(unitSegment, segToCheck, false); - if (intersection) { // found possible match - - if ((segToCheck.point0Ref.y <= event.node0.y && segToCheck.point1Ref.y >= event.node0.y) || - (segToCheck.point0Ref.y >= event.node0.y && segToCheck.point1Ref.y <= event.node0.y)) { // Check that segment is of correct height - - if (intersection.x > event.node0.x) { // Is to right of point - - if (!(Geometry.isSameCoordinate(intersection.x, event.node0.x))) { // Intersection does not occur at same coord as endpoint - const distanceToSegment = Geometry.distanceXYXY(intersection.x, intersection.y, event.node0.x, event.node0.y); - - if (lastIntersection && Geometry.isSamePoint3d(lastIntersection, intersection)) { // For pairing at vertice, save alt. - event.rightAlt = toCheck; - lastIntersection = intersection; - } else if (distanceToSegment < closestDistance) { - event.rightEvent = toCheck; - event.rightAlt = undefined; - lastIntersection = intersection; - closestDistance = distanceToSegment; - } - } - } - } - } - } } } - /** - * Form a new connection between two nodes, patching up pointers in the creation of new face loops - * * !! mark both new half edges visited!!! (This is strange) + * Compute and save sort angle in all nodes of the graph. + * * the sort angle is the atan2 of the vector to face successor. + * * Hence the sort angle range is -PI to PI + * @param graph graph to update. */ - private static join(node0: HalfEdge, node1: HalfEdge, graph: HalfEdgeGraph) { - const alpha = graph.createEdgeXYZXYZ( - node0.x, node0.y, node0.z, node0.i, - node1.x, node1.y, node1.z, node1.i); - const beta = alpha.edgeMate; - HalfEdge.pinch(node0, alpha); - HalfEdge.pinch(node1, beta); - alpha.setMask(HalfEdgeMask.VISITED); - beta.setMask(HalfEdgeMask.VISITED); - } - - private static getNodeToJoin(eventNode: HalfEdge, toCheckNode: HalfEdge): HalfEdge | undefined { - // Check if there already exists some form of connection between these two points in space - // (Otherwise, duplicates will not be recognized due to previous connections that cause the node to split) - for (const item1 of toCheckNode.collectAroundVertex()) - for (const item2 of eventNode.collectAroundVertex()) - if (item1.faceSuccessor === item2) - return undefined; - - // If node toCheck already formed a connection, possible to have > 2 nodes at vertex (find out) - const possibleConnections = toCheckNode.collectAroundVertex(); - if (possibleConnections.length <= 2) - return toCheckNode; - else { - let currNode; - // Only make a connection to the node in the same face loop - for (const node of possibleConnections) { - // Loop around face and return the node that is part of the face the eventNode is in - currNode = node; - do { - if (currNode === eventNode) - return node; - currNode = currNode.faceSuccessor; - } while (currNode !== node); - } - - // Not in same face loop - return undefined; - } - } - - /** Check a variety of cases by which adding a diagonal is allowed. If one is found, link nodes and return. */ - private static checkAndAddDiagonal(event: SweepEvent, toCheck: SweepEvent, graph: HalfEdgeGraph) { - if (!event.leftEvent && !event.rightEvent) // No side of trapezoid.. continue to next event - return; - - if (event.node0.facePredecessor === toCheck.node0 || event.node0.faceSuccessor === toCheck.node0) // Can't join two neighbors - return; - - // Case 1: Both left and right pairings of events are equal - if (event.leftEvent && toCheck.leftEvent && event.rightEvent && toCheck.rightEvent) { - if (event.leftEvent.node0 === toCheck.leftEvent.node0 && event.rightEvent.node0 === toCheck.rightEvent.node0) { - const toJoin = Merger.getNodeToJoin(event.node0, toCheck.node0); - if (toJoin) - Merger.join(event.node0, toJoin!, graph); - return; - } - } - // Case 2: Event(1) left pairing is event(2) who's right pairing is event(1) - if (event.leftEvent && toCheck.rightEvent) { - if (event.node0 === toCheck.rightEvent.node0 && toCheck.node0 === event.leftEvent.node0) { - const toJoin = Merger.getNodeToJoin(event.node0, toCheck.node0); - if (toJoin) - Merger.join(event.node0, toJoin!, graph); - return; - } - } - // Case 3: Event(1) right pairing is event(2) who's left pairing is event(1) - if (event.rightEvent && toCheck.leftEvent) { - if (event.node0 === toCheck.leftEvent.node0 && toCheck.node0 === event.rightEvent.node0) { - const toJoin = Merger.getNodeToJoin(event.node0, toCheck.node0); - if (toJoin) - Merger.join(event.node0, toJoin!, graph); - return; - } - } - // Case 4: Event(1) has a left pairing of event(2), and both events have same right pairing - if (toCheck.leftEvent && toCheck.rightEvent && event.rightEvent) { - if (event.node0 === toCheck.leftEvent.node0 && event.rightEvent.node0 === toCheck.rightEvent.node0) { - const toJoin = Merger.getNodeToJoin(event.node0, toCheck.node0); - if (toJoin) - Merger.join(event.node0, toJoin!, graph); - return; - } - } - // Case 5: Event(1) has a right pairing of event(2), and both events have same left pairing - if (toCheck.leftEvent && toCheck.rightEvent && event.leftEvent) { - if (event.node0 === toCheck.rightEvent.node0 && event.leftEvent.node0 === toCheck.leftEvent.node0) { - const toJoin = Merger.getNodeToJoin(event.node0, toCheck.node0); - if (toJoin) - Merger.join(event.node0, toJoin!, graph); - return; - } - } - } - - /** Sweep over an event queue, adding new diagonal segments where possible in the formation of monotone faces */ - private static sweepDownUp(queue: SweepEvent[], graph: HalfEdgeGraph) { - // Sweep going down... - for (let i = 0; i < queue.length; i++) { - for (let j = i + 1; j < queue.length; j++) { - if (queue[i].node0 === queue[j].node0) - continue; - - const event = queue[i]; - const toCheck = queue[j]; - - Merger.checkAndAddDiagonal(event, toCheck, graph); - - } - } - // Sweep going up... - for (let i = queue.length - 1; i >= 0; i--) { - for (let j = i - 1; j >= 0; j--) { - if (queue[i].node0 === queue[j].node0) - continue; - - const event = queue[i]; - const toCheck = queue[j]; - - Merger.checkAndAddDiagonal(event, toCheck, graph); - - } - } - } - - public static formMonotoneFaces(graph: HalfEdgeGraph) { - graph.clearMask(HalfEdgeMask.VISITED); - - // For every face, break the face down into monotone sections - for (const node of graph.allHalfEdges) { - if (node.isMaskSet(HalfEdgeMask.VISITED)) - continue; - - const queue: SweepEvent[] = []; - let currNode = node; - // Push face nodes onto the queue - do { - queue.push(new SweepEvent(currNode, currNode.faceSuccessor)); - currNode.setMask(HalfEdgeMask.VISITED); - currNode = currNode.faceSuccessor; - } while (currNode !== node); - - queue.sort(Merger.eventCompareTrapezoidation); // Sort top to bottom by node0 - Merger.setQueuePairings(queue); // Pair every event to a left and right "segment" (node connection) - - Merger.sweepDownUp(queue, graph); // Sweep adding diagonals - - // Swap in alternates - for (const event of queue) { - if (event.leftAlt) - event.leftEvent = event.leftAlt; - if (event.rightAlt) - event.rightEvent = event.rightAlt; - } - - Merger.sweepDownUp(queue, graph); // Sweep adding diagonals with alternates + public static setXYSortAnglesInGraph(graph: HalfEdgeGraph) { + let node1; + for (const node0 of graph.allHalfEdges) { + node1 = node0.faceSuccessor; + node0.sortAngle = Math.atan2((node1.y - node0.y), (node1.x - node0.x)); } } - } -export class GraphMerge { +/** + * @internal + */ +export class HalfEdgeGraphMerge { /** Simplest merge algorithm: * * collect array of (x,y,theta) at all nodes * * lexical sort of the array. @@ -656,4 +365,65 @@ export class GraphMerge { } + /** + * Returns a graph structure formed from the given LineSegment array + * + * * Find all intersections among segments, and split them if necessary + * * Record endpoints of every segment in the form X, Y, Theta; This information is stored as a new node and sorted to match up + * vertices. + * * For vertices that match up, pinch the nodes to create vertex loops, which in closed objects, will also eventually form face + * loops + */ + public static formGraphFromSegments(lineSegments: LineSegment3d[]): HalfEdgeGraph { + // Structure of an index of the array: { xyTheta: Point3d, node: Node } + const graph = new HalfEdgeGraph(); + const segments: LineSegment3d[] = []; + + // Obtain an array of all of the fractional intersections for each segment... remove duplicates and endpoints + const intersectArray = HalfEdgeGraphOps.findCrossings(lineSegments); + for (const item of intersectArray) { + // Get rid of duplicate intersection findings + HalfEdgeGraphOps.sortAndFilterCrossings(item); + } + + // Create new segment array that contains the split segments + for (let i = 0; i < intersectArray.length; i++) { + if (intersectArray[i].length === 0) { + segments.push(lineSegments[i]); + continue; + } + + let newStart = 0; + for (const f of intersectArray[i]) { + segments.push(LineSegment3d.create(lineSegments[i].fractionToPoint(newStart), + lineSegments[i].fractionToPoint(f))); + newStart = f; + } + // Add last segment, which is from last element of break array to end of original segment + segments.push(LineSegment3d.create(lineSegments[i].fractionToPoint(newStart), + lineSegments[i].fractionToPoint(1))); + } + + const arr = HalfEdgeGraphOps.segmentArrayToGraphEdges(segments, graph, HalfEdgeMask.BOUNDARY); + HalfEdgeGraphOps.setXYSortAnglesInGraph(graph); + + // Sort lexically + arr.sort(HalfEdgeGraphOps.compareNodeXYTheta); + let lastNode = 0; + + // Connect nodes at vertices + for (let i = 1; i <= arr.length; i++) { + if (i === arr.length || !Geometry.isSameCoordinate(arr[i].x, arr[lastNode].x) || + !Geometry.isSameCoordinate(arr[i].y, arr[lastNode].y)) { + // pinch matching vertices + for (let j = lastNode; j < i - 1; j++) { + HalfEdge.pinch(arr[j], arr[j + 1]); + } + lastNode = i; + } + } + + return graph; + } + } diff --git a/core/geometry/src/topology/Triangulation.ts b/core/geometry/src/topology/Triangulation.ts index f28eebc..8783817 100644 --- a/core/geometry/src/topology/Triangulation.ts +++ b/core/geometry/src/topology/Triangulation.ts @@ -10,19 +10,16 @@ import { XAndY } from "../geometry3d/XYZProps"; import { Point3d } from "../geometry3d/Point3dVector3d"; import { Geometry } from "../Geometry"; import { GrowableXYZArray } from "../geometry3d/GrowableXYZArray"; -import { Range2d } from "../geometry3d/Range"; import { IndexedXYZCollection } from "../geometry3d/IndexedXYZCollection"; export class Triangulator { - // HalfEdgeGraph that is used by many of the private methods inside of the Triangulator class, until being returned at the end of triangulation - private static _returnGraph: HalfEdgeGraph; /** Given the six nodes that make up two bordering triangles, "pinch" and relocate the nodes to flip them - * The shared edge mates are a and d. - * (abc) are a triangle in CCW order - * (dfe) are a triangle in CCW order. (!! node dfe instead of def.) + * * The shared edge mates are a and d. + * * (abc) are a triangle in CCW order + * * (dfe) are a triangle in CCW order. (!! node dfe instead of def.) */ - private static flipTriangles(a: any, b: any, c: any, d: any, e: any, f: any) { + private static flipEdgeBetweenTriangles(a: HalfEdge, b: HalfEdge, c: HalfEdge, d: HalfEdge, e: HalfEdge, f: HalfEdge) { // Reassign all of the pointers HalfEdge.pinch(a, e); HalfEdge.pinch(c, d); @@ -91,7 +88,7 @@ export class Triangulator { * * If a flip would be possible, test the results of flipping using incircle condition * * If revealed to be an improvement, conduct the flip, mark involved nodes as unvisited, and repeat until all nodes are visited */ - public static cleanupTriangulation(graph: HalfEdgeGraph) { + public static flipTriangles(graph: HalfEdgeGraph) { const nodeArray = graph.allHalfEdges; graph.clearMask(HalfEdgeMask.VISITED); let foundNonVisited = false; @@ -117,7 +114,7 @@ export class Triangulator { node.edgeMate.facePredecessor.clearMask(HalfEdgeMask.VISITED); node.edgeMate.faceSuccessor.clearMask(HalfEdgeMask.VISITED); // Flip the triangles - Triangulator.flipTriangles(node.edgeMate.faceSuccessor, node.edgeMate.facePredecessor, node.edgeMate, node.faceSuccessor, node, node.facePredecessor); + Triangulator.flipEdgeBetweenTriangles(node.edgeMate.faceSuccessor, node.edgeMate.facePredecessor, node.edgeMate, node.faceSuccessor, node, node.facePredecessor); } // If at the end of the loop, check if we found an unvisited node we tried to flip.. if so, restart loop @@ -130,135 +127,85 @@ export class Triangulator { graph.clearMask(HalfEdgeMask.VISITED); } /** - * - * @param strokedLoops an array of loops as GrowableXYZArray. + * * Only one outer loop permitted. + * * Largest area loop is assumed outer. + * @param loops an array of loops as GrowableXYZArray or XAndY[] * @returns triangulated graph, or undefined if bad data. */ - public static triangulateStrokedLoops(strokedLoops: GrowableXYZArray[]): HalfEdgeGraph | undefined { - if (strokedLoops.length < 1) + public static createTriangulatedGraphFromLoops(loops: GrowableXYZArray[] | XAndY[][]): HalfEdgeGraph | undefined { + if (loops.length < 1) return undefined; - Triangulator._returnGraph = new HalfEdgeGraph(); - let maxArea = strokedLoops[0].areaXY(); - let largestLoopIndex = 0; - for (let i = 0; i < strokedLoops.length; i++) { - const area = Math.abs(strokedLoops[i].areaXY()); - if (area > maxArea) { - maxArea = area; - largestLoopIndex = i; + const mask = HalfEdgeMask.BOUNDARY | HalfEdgeMask.PRIMARY_EDGE; + const graph = new HalfEdgeGraph(); + const holeSeeds: HalfEdge[] = []; + let maxArea = -10000.0; + let maxAreaIndex = -1; + // collect all the loops with pointers to the positive (inside) + // remember which one has largest area. + for (let i = 0; i < loops.length; i++) { + let seed = Triangulator.directCreateFaceLoopFromCoordinates(graph, loops[i]); + if (seed) { + seed = seed.faceSuccessor; // directCreate returns tail + const mate = seed.vertexSuccessor; + seed.setMaskAroundFace(mask); + mate.setMaskAroundFace(mask); + const area = Math.abs(seed.signedFaceArea()); + if (i === 0 || area > maxArea) { + maxArea = area; + maxAreaIndex = i; + } else { + holeSeeds.push(area >= 0 ? seed : mate); + } } } - // NOW WE KNOW ... - // strokedLoops[largestAreaIndex] is the largest loop. (Hence outer, but orientation is not guaranteed.) - const holeLoops = []; - let startingNode = Triangulator.createFaceLoopFromIndexedXYZCollection(strokedLoops[largestLoopIndex], true, true); - if (!startingNode) - return Triangulator._returnGraph; - for (let i = 0; i < strokedLoops.length; i++) { - if (i !== largestLoopIndex) { - const holeLoop = Triangulator.createFaceLoopFromIndexedXYZCollection(strokedLoops[i], false, true); - if (holeLoop) - holeLoops.push(Triangulator.getLeftmost(holeLoop)); - } + if (holeSeeds.length === 0) + return undefined; + // extract the max area seed ... + const maxAreaFace = holeSeeds[maxAreaIndex]; + holeSeeds[maxAreaIndex] = holeSeeds[holeSeeds.length - 1]; + holeSeeds.pop(); + maxAreaFace.vertexSuccessor.setMaskAroundFace(HalfEdgeMask.EXTERIOR); + // The hole seeds all have inside nodes. Set mask there and jump to outside. + for (let i = 0; i < holeSeeds.length; i++) { + const seed = holeSeeds[i]; + seed.setMaskAroundFace(HalfEdgeMask.EXTERIOR); + holeSeeds[i] = this.getLeftmost(seed.vertexSuccessor); } - startingNode = Triangulator.spliceLeftMostNodesOfHoles(startingNode, holeLoops, false); - Triangulator.earcutLinked(startingNode); - return Triangulator._returnGraph; + + const startingNode = Triangulator.spliceLeftMostNodesOfHoles(graph, maxAreaFace, holeSeeds, false); + Triangulator.triangulateSingleFace(graph, startingNode); + return graph; } - private static _heapTrigger = 200; /** - * * Triangulation has a trigger value for using a sort heap for earcut searches. - * * Some polygons have had triangulation errors with the heap logic. - * * the default is set at 200 - * * if a user thinks (a) their polygons are safe and (b) they might get performance benefit, they can reset it here. - * * Sending undefined, 0 or negative resets to the default. - * * minimum trigger of 5 is enforced. - * @param trigger new value. - * @returns prior trigger value (for user to reset at end of their triangulation.) + * Triangulate all faces of a graph. */ - public static setAndReturnHeapTrigger(trigger: number | undefined): number { - const a = this._heapTrigger; - if (trigger === undefined || trigger <= 0) { - this._heapTrigger = 200; - return this._heapTrigger; - } else { - this._heapTrigger = trigger; - // this._heapTrigger = 200; - if (this._heapTrigger < 5) - this._heapTrigger = 5; + public triangulateAllPositiveAreaFaces(graph: HalfEdgeGraph) { + const seeds = graph.collectFaceLoops(); + for (const face of seeds) { + if (face.countEdgesAroundFace() > 3) { + const area = face.signedFaceArea(); + if (area > 0.0) + Triangulator.triangulateSingleFace(graph, face); + } } - return a; + } + /** * Triangulate the polygon made up of by a series of points. * * To triangulate a polygon with holes, use earcutFromOuterAndInnerLoops * * The loop may be either CCW or CW -- CCW order will be used for triangles. */ - public static earcutSingleLoop(data: XAndY[]): HalfEdgeGraph { - Triangulator._returnGraph = new HalfEdgeGraph(); - const startingNode = Triangulator.createFaceLoopFromXAndYArray(data, true, true); - - if (!startingNode) return Triangulator._returnGraph; - - let minX; - let minY; - let maxX; - let maxY; - let x; - let y; - let size; - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - // EDL Feb 2019 When hashing was on at 80, a very long earcut created invalid triangulation. - // Leave it on for 200 . . .. it will be a problem someday. - if (data.length > Triangulator._heapTrigger) { - minX = maxX = data[0].x; - minY = maxY = data[0].y; - const n = data.length; - for (let i = 1; i < n; i++) { - x = data[i].x; - y = data[i].y; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - } + public static createTriangulatedGraphFromSingleLoop(data: XAndY[]): HalfEdgeGraph { + const graph = new HalfEdgeGraph(); + const startingNode = Triangulator.createFaceLoopFromCoordinates(graph, data, true, true); - // minX, minY and size are later used to transform coords into integers for z-order calculation - size = Math.max(maxX - minX, maxY - minY); - } + if (!startingNode) return graph; - Triangulator.earcutLinked(startingNode, minX, minY, size, undefined); - return Triangulator._returnGraph; + Triangulator.triangulateSingleFace(graph, startingNode, undefined); + return graph; } - /** - * Triangulate the polygon made up of multiple loops. - * * only xy parts are considered. - * * First loop is assumed outer -- will be reordered as CCW - * * Additional loops assumed inner -- will be reordered as CW - */ - public static earcutOuterAndInnerLoops(loops: XAndY[][]): HalfEdgeGraph { - Triangulator._returnGraph = new HalfEdgeGraph(); - const range = Range2d.createNull(); - const numLoops = loops.length; - // let totalPoints = 0; - // trim trailing duplicates from each array. - for (const loop of loops) { - // totalPoints += n; - const n = loop.length; - for (let i = 0; i < n; i++) - range.extendXY(loop[i].x, loop[i].y); - } - let startingNode = Triangulator.createFaceLoopFromXAndYArray(loops[0], true, true); - - if (!startingNode) - return Triangulator._returnGraph; - if (numLoops > 1) - startingNode = Triangulator.constructAndSpliceHoles(loops, startingNode); - // NEEDS WORK: When 80 or more points, pass range go earcutLinked. This triggers hashing for performance. - Triangulator.earcutLinked(startingNode); - return Triangulator._returnGraph; - } /** * cautiously split the edge starting at baseNode. * * If baseNode is null, create a trivial loop with the single vertex at xy @@ -275,23 +222,20 @@ export class Triangulator { return baseNode; return graph.splitEdge(baseNode, xy.x, xy.y, z); } - private static directcreateFaceLoopFromIndexedXYZCollection(graph: HalfEdgeGraph, data: IndexedXYZCollection): HalfEdge | undefined { - let i; - // Add the starting nodes as the boundary, and apply initial masks to the primary edge and exteriors - let baseNode: HalfEdge | undefined; - const xyz = Point3d.create(); - for (i = 0; i < data.length; i++) { - data.getPoint3dAtCheckedPointIndex(i, xyz); - baseNode = Triangulator.interiorEdgeSplit(graph, baseNode, xyz); - } - return baseNode; - } - private static directCreateFaceLoopFromXAndYArray(graph: HalfEdgeGraph, data: XAndY[]): HalfEdge | undefined { + private static directCreateFaceLoopFromCoordinates(graph: HalfEdgeGraph, data: XAndY[] | IndexedXYZCollection): HalfEdge | undefined { // Add the starting nodes as the boundary, and apply initial masks to the primary edge and exteriors let baseNode: HalfEdge | undefined; - for (const xy of data) { - baseNode = Triangulator.interiorEdgeSplit(graph, baseNode, xy); + if (data instanceof IndexedXYZCollection) { + const xyz = Point3d.create(); + for (let i = 0; i < data.length; i++) { + data.getPoint3dAtCheckedPointIndex(i, xyz); + baseNode = Triangulator.interiorEdgeSplit(graph, baseNode, xyz); + } + } else { + for (const xy of data) { + baseNode = Triangulator.interiorEdgeSplit(graph, baseNode, xy); + } } return baseNode; } @@ -303,7 +247,7 @@ export class Triangulator { * @param markExterior * @return the loop's start node or its vertex sucessor, chosen to be the positive or negative loop per request. */ - private static assignMasksToNewFaceLoop(_graph: HalfEdgeGraph, base: HalfEdge | undefined, returnPositiveAreaLoop: boolean, markExterior: boolean): HalfEdge | undefined { + private static maskAndOrientNewFaceLoop(_graph: HalfEdgeGraph, base: HalfEdge | undefined, returnPositiveAreaLoop: boolean, markExterior: boolean): HalfEdge | undefined { // base is the final coordinates if (base) { base = base.faceSuccessor; // because typical construction process leaves the "live" edge at the end of the loop. @@ -327,23 +271,13 @@ export class Triangulator { * create a circular doubly linked list of internal and external nodes from polygon points in the specified winding order * * If start and end are both zero, use the whole array. */ - private static createFaceLoopFromXAndYArray(data: XAndY[], returnPositiveAreaLoop: boolean, markExterior: boolean): HalfEdge | undefined { - const graph = Triangulator._returnGraph; - const base = Triangulator.directCreateFaceLoopFromXAndYArray(graph, data); - return Triangulator.assignMasksToNewFaceLoop(graph, base, returnPositiveAreaLoop, markExterior); - } - - /** - * create a circular doubly linked list of internal and external nodes from polygon points in the specified winding order - */ - public static createFaceLoopFromIndexedXYZCollection(data: GrowableXYZArray, returnPositiveAreaLoop: boolean, markExterior: boolean): HalfEdge | undefined { - const graph = Triangulator._returnGraph; - const base = Triangulator.directcreateFaceLoopFromIndexedXYZCollection(graph, data); - return Triangulator.assignMasksToNewFaceLoop(graph, base, returnPositiveAreaLoop, markExterior); + private static createFaceLoopFromCoordinates(graph: HalfEdgeGraph, data: XAndY[] | GrowableXYZArray, returnPositiveAreaLoop: boolean, markExterior: boolean): HalfEdge | undefined { + const base = Triangulator.directCreateFaceLoopFromCoordinates(graph, data); + return Triangulator.maskAndOrientNewFaceLoop(graph, base, returnPositiveAreaLoop, markExterior); } /** eliminate colinear or duplicate points using starting and ending nodes */ - private static filterPoints(start?: any, end?: any) { + private static filterPoints(graph: HalfEdgeGraph, start?: HalfEdge, end?: HalfEdge): HalfEdge | undefined { if (!start) return start; if (!end) end = start; @@ -353,7 +287,7 @@ export class Triangulator { again = false; if (!p.steiner && (Triangulator.equalXAndY(p, p.faceSuccessor) || Triangulator.signedTriangleArea(p.facePredecessor, p, p.faceSuccessor) === 0)) { - Triangulator.joinNeighborsOfEar(p); + Triangulator.joinNeighborsOfEar(graph, p); p = end = p.facePredecessor; if (p === p.faceSuccessor) return undefined; again = true; @@ -373,16 +307,12 @@ export class Triangulator { * * Reassigns the pointers such that alpha becomes the resulting missing node from the remaining polygon * * Reassigns prevZ and nextZ pointers */ - private static joinNeighborsOfEar(ear: HalfEdge) { - const alpha = Triangulator._returnGraph.createEdgeXYZXYZ( + private static joinNeighborsOfEar(graph: HalfEdgeGraph, ear: HalfEdge) { + const alpha = graph.createEdgeXYZXYZ( ear.facePredecessor.x, ear.facePredecessor.y, ear.facePredecessor.z, ear.facePredecessor.i, ear.faceSuccessor.x, ear.faceSuccessor.y, ear.faceSuccessor.z, ear.faceSuccessor.i); const beta = alpha.edgeMate; - // Take care of z-ordering - if (ear.prevZ) ear.prevZ.nextZ = ear.nextZ; - if (ear.nextZ) ear.nextZ.prevZ = ear.prevZ; - // Add two nodes alpha and beta and reassign pointers (also mark triangle nodes as part of triangle) HalfEdge.pinch(ear.faceSuccessor, beta); HalfEdge.pinch(ear.facePredecessor, alpha); @@ -437,7 +367,7 @@ export class Triangulator { break; // Flip the triangles const a1 = b1.faceSuccessor; - Triangulator.flipTriangles(a1, a1.faceSuccessor, a1.facePredecessor, b0, b0.facePredecessor, b0.faceSuccessor); + Triangulator.flipEdgeBetweenTriangles(a1, a1.faceSuccessor, a1.facePredecessor, b0, b0.facePredecessor, b0.faceSuccessor); b0 = a0; a0 = b0.facePredecessor; b1 = a0.edgeMate; @@ -453,12 +383,9 @@ export class Triangulator { * * If not hashed, move on to a seperate ear. * * If no ears are currently hashed, attempt to cure self intersections or split the polygon into two before continuing */ - private static earcutLinked(ear?: any, minX?: number, minY?: number, size?: number, pass?: number) { + private static triangulateSingleFace(graph: HalfEdgeGraph, ear?: HalfEdge, pass?: number) { if (!ear) return; - // interlink polygon nodes in z-order - if (!pass && size) Triangulator.indexCurve(ear, minX, minY, size); - let next; let numFail = 0; let maxFail = (ear as HalfEdge).countEdgesAroundFace(); @@ -466,12 +393,12 @@ export class Triangulator { while (!ear.isMaskSet(HalfEdgeMask.TRIANGULATED_NODE_MASK)) { next = ear.faceSuccessor; - if (size ? Triangulator.isEarHashed(ear, minX, minY, size) : Triangulator.isEar(ear)) { + if (Triangulator.isEar(ear)) { // skipping the next vertice leads to less sliver triangles // If we already have a seperated triangle, do not join if (ear.faceSuccessor.faceSuccessor !== ear.facePredecessor) { - Triangulator.joinNeighborsOfEar(ear); + Triangulator.joinNeighborsOfEar(graph, ear); ear = Triangulator.doPostCutFlips(ear); ear = ear.faceSuccessor.edgeMate.faceSuccessor; // another step? Nate's 2017 code went one more. @@ -497,12 +424,12 @@ export class Triangulator { // } // if this didn't work, try curing all small self-intersections locally if (!pass) { - ear = Triangulator.cureLocalIntersections(ear); - Triangulator.earcutLinked(ear, minX, minY, size, 2); + ear = Triangulator.cureLocalIntersections(graph, ear); + Triangulator.triangulateSingleFace(graph, ear, 2); // as a last resort, try splitting the remaining polygon into two } else if (pass === 2) { - Triangulator.splitEarcut(ear, minX, minY, size); + Triangulator.splitEarcut(graph, ear); } break; @@ -511,7 +438,7 @@ export class Triangulator { } /** Check whether a polygon node forms a valid ear with adjacent nodes */ - private static isEar(ear: any) { + private static isEar(ear: HalfEdge) { const a = ear.facePredecessor; const b = ear; const c = ear.faceSuccessor; @@ -530,49 +457,8 @@ export class Triangulator { return true; } - /** Check whether a polygon node forms a valid ear with adjacent nodes using bounded boxes of z-ordering of this and adjacent nodes */ - private static isEarHashed(ear: any, minX?: number, minY?: number, size?: number) { - const a = ear.facePredecessor; - const b = ear; - const c = ear.faceSuccessor; - - if (Triangulator.signedTriangleArea(a, b, c) >= 0) return false; // reflex, can't be an ear - - // triangle bbox; min & max are calculated like this for speed - const minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x); - const minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y); - const maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x); - const maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y); - - // z-order range for the current triangle bbox; - const minZ = Triangulator.zOrder(minTX, minTY, minX, minY, size); - const maxZ = Triangulator.zOrder(maxTX, maxTY, minX, minY, size); - - // first look for points inside the triangle in increasing z-order - let p = ear.nextZ; - - while (p && p.zOrder <= maxZ) { - if (p !== ear.facePredecessor && p !== ear.faceSuccessor && - Triangulator.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - Triangulator.signedTriangleArea(p.facePredecessor, p, p.faceSuccessor) >= 0) return false; - p = p.nextZ; - } - - // then look for points in decreasing z-order - p = ear.prevZ; - - while (p && p.zOrder >= minZ) { - if (p !== ear.facePredecessor && p !== ear.faceSuccessor && - Triangulator.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - Triangulator.signedTriangleArea(p.facePredecessor, p, p.faceSuccessor) >= 0) return false; - p = p.prevZ; - } - - return true; - } - /** Go through all polygon nodes and cure small local self-intersections */ - private static cureLocalIntersections(start: any) { + private static cureLocalIntersections(graph: HalfEdgeGraph, start: HalfEdge) { let p = start; do { const a = p.facePredecessor; @@ -582,8 +468,8 @@ export class Triangulator { Triangulator.locallyInside(a, b) && Triangulator.locallyInside(b, a)) { // remove two nodes involved - Triangulator.joinNeighborsOfEar(p); - Triangulator.joinNeighborsOfEar(p.faceSuccessor); + Triangulator.joinNeighborsOfEar(graph, p); + Triangulator.joinNeighborsOfEar(graph, p.faceSuccessor); p = start = b; } @@ -593,24 +479,24 @@ export class Triangulator { return p; } - /** try splitting polygon into two and triangulate them independently */ - private static splitEarcut(start: any, minX?: number, minY?: number, size?: number) { + /** try splitting face into two and triangulate them independently */ + private static splitEarcut(graph: HalfEdgeGraph, start: HalfEdge) { // look for a valid diagonal that divides the polygon into two - let a = start; + let a: HalfEdge | undefined = start; do { let b = a.faceSuccessor.faceSuccessor; while (b !== a.facePredecessor) { if (a.i !== b.i && Triangulator.isValidDiagonal(a, b)) { // split the polygon in two by the diagonal - let c: HalfEdge | undefined = Triangulator.splitPolygon(a, b); + let c: HalfEdge | undefined = Triangulator.splitPolygon(graph, a, b); // filter colinear points around the cuts - a = Triangulator.filterPoints(a, a.faceSuccessor); - c = Triangulator.filterPoints(c, c.faceSuccessor); + a = Triangulator.filterPoints(graph, a, a.faceSuccessor); + c = Triangulator.filterPoints(graph, c, c.faceSuccessor); // run earcut on each half - Triangulator.earcutLinked(a, minX, minY, size); - Triangulator.earcutLinked(c, minX, minY, size); + Triangulator.triangulateSingleFace(graph, a); + Triangulator.triangulateSingleFace(graph, c); return; } b = b.faceSuccessor; @@ -619,34 +505,18 @@ export class Triangulator { } while (a !== start); } - /** link loops[1], loops[2] etc into the outer loop, producing a single-ring polygon without holes - * - */ - private static constructAndSpliceHoles(loops: XAndY[][], outerNode: HalfEdge) { - const queue: HalfEdge[] = []; - let list; - - for (let holeIndex = 1; holeIndex < loops.length; holeIndex++) { - list = Triangulator.createFaceLoopFromXAndYArray(loops[holeIndex], false, true); - if (list && list === list.faceSuccessor) list.steiner = true; - queue.push(Triangulator.getLeftmost(list)); - } - outerNode = Triangulator.spliceLeftMostNodesOfHoles(outerNode, queue, true); - return outerNode; - } - /** link holeLoopNodes[1], holeLoopNodes[2] etc into the outer loop, producing a single-ring polygon without holes * */ - private static spliceLeftMostNodesOfHoles(outerNode: HalfEdge, leftMostHoleLoopNode: HalfEdge[], applyFilter: boolean = true) { + private static spliceLeftMostNodesOfHoles(graph: HalfEdgeGraph, outerNode: HalfEdge, leftMostHoleLoopNode: HalfEdge[], applyFilter: boolean = true) { leftMostHoleLoopNode.sort(Triangulator.compareX); // process holes from left to right for (const holeStart of leftMostHoleLoopNode) { - Triangulator.eliminateHole(holeStart, outerNode, applyFilter); + Triangulator.eliminateHole(graph, holeStart, outerNode, applyFilter); if (applyFilter) - outerNode = Triangulator.filterPoints(outerNode, (outerNode) ? outerNode.faceSuccessor : undefined); + outerNode = Triangulator.filterPoints(graph, outerNode, (outerNode) ? outerNode.faceSuccessor : undefined) as HalfEdge; } return outerNode; @@ -657,12 +527,12 @@ export class Triangulator { } /** find a bridge between vertices that connects hole with an outer ring and and link it */ - private static eliminateHole(hole: HalfEdge, outerNode: HalfEdge, applyFilter: boolean) { - outerNode = Triangulator.findHoleBridge(hole, outerNode); - if (outerNode) { - const b = Triangulator.splitPolygon(outerNode, hole); + private static eliminateHole(graph: HalfEdgeGraph, hole: HalfEdge, outerNode: HalfEdge, applyFilter: boolean) { + const outerNodeA = Triangulator.findHoleBridge(hole, outerNode); + if (outerNodeA) { + const b = Triangulator.splitPolygon(graph, outerNodeA, hole); if (applyFilter) - Triangulator.filterPoints(b, b.faceSuccessor); + Triangulator.filterPoints(graph, b, b.faceSuccessor); } } @@ -670,7 +540,7 @@ export class Triangulator { * David Eberly's algorithm for finding a bridge between hole and outer polygon: * https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf */ - private static findHoleBridge(hole: HalfEdge, outerNode?: any) { + private static findHoleBridge(hole: HalfEdge, outerNode?: HalfEdge): HalfEdge | undefined { let p = outerNode; if (!p) @@ -732,107 +602,8 @@ export class Triangulator { return m; } - /** interlink polygon nodes in z-order */ - private static indexCurve(start: any, minX?: number, minY?: number, size?: number) { - let p = start; - do { - if (p.zOrder === undefined) p.zOrder = Triangulator.zOrder(p.x, p.y, minX, minY, size); - p.prevZ = p.facePredecessor; - p.nextZ = p.faceSuccessor; - p = p.faceSuccessor; - } while (p !== start); - - p.prevZ.nextZ = undefined; - p.prevZ = undefined; - - Triangulator.sortLinked(p); - } - - /** - * Simon Tatham's linked list merge sort algorithm - * http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html - */ - private static sortLinked(list: any) { - let i; - let p; - let q; - let e; - let tail; - let numMerges; - let pSize; - let qSize; - let inSize = 1; - - do { - p = list; - list = undefined; - tail = undefined; - numMerges = 0; - - while (p) { - numMerges++; - q = p; - pSize = 0; - for (i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (!q) break; - } - qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q)) { - - if (pSize !== 0 && (qSize === 0 || !q || p.zOrder <= q.zOrder)) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - - if (tail) tail.nextZ = e; - else list = e; - - e.prevZ = tail; - tail = e; - } - - p = q; - } - - tail.nextZ = undefined; - inSize *= 2; - - } while (numMerges > 1); - - return list; - } - - /** - * z-order of a point given coords and size of the data bounding box - */ - private static zOrder(x: number, y: number, minX: any, minY: any, size: any) { - // coords are transformed into non-negative 15-bit integer range - x = 32767 * (x - minX) / size; - y = 32767 * (y - minY) / size; - - x = (x | (x << 8)) & 0x00FF00FF; - x = (x | (x << 4)) & 0x0F0F0F0F; - x = (x | (x << 2)) & 0x33333333; - x = (x | (x << 1)) & 0x55555555; - - y = (y | (y << 8)) & 0x00FF00FF; - y = (y | (y << 4)) & 0x0F0F0F0F; - y = (y | (y << 2)) & 0x33333333; - y = (y | (y << 1)) & 0x55555555; - - return x | (y << 1); - } - // find the leftmost node of a polygon ring - private static getLeftmost(start: any) { + private static getLeftmost(start: HalfEdge) { let p = start; let leftmost = start; do { @@ -851,23 +622,23 @@ export class Triangulator { } /** check if a diagonal between two polygon nodes is valid (lies in polygon interior) */ - private static isValidDiagonal(a: any, b: any) { + private static isValidDiagonal(a: HalfEdge, b: HalfEdge) { return a.faceSuccessor.i !== b.i && a.facePredecessor.i !== b.i && !Triangulator.intersectsPolygon(a, b) && Triangulator.locallyInside(a, b) && Triangulator.locallyInside(b, a) && Triangulator.middleInside(a, b); } /** signed area of a triangle */ - private static signedTriangleArea(p: any, q: any, r: any) { + private static signedTriangleArea(p: HalfEdge, q: HalfEdge, r: HalfEdge) { return 0.5 * ((q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y)); } /** check if two points are equal */ - private static equalXAndY(p1: any, p2: any) { + private static equalXAndY(p1: XAndY, p2: XAndY) { return Geometry.isSameCoordinate(p1.x, p2.x) && Geometry.isSameCoordinate(p1.y, p2.y); } /** check if two segments intersect */ - private static intersects(p1: any, q1: any, p2: any, q2: any) { + private static intersects(p1: HalfEdge, q1: HalfEdge, p2: HalfEdge, q2: HalfEdge) { if ((Triangulator.equalXAndY(p1, q1) && Triangulator.equalXAndY(p2, q2)) || (Triangulator.equalXAndY(p1, q2) && Triangulator.equalXAndY(p2, q1))) return true; return Triangulator.signedTriangleArea(p1, q1, p2) > 0 !== Triangulator.signedTriangleArea(p1, q1, q2) > 0 && @@ -875,7 +646,7 @@ export class Triangulator { } /** check if a polygon diagonal intersects any polygon segments */ - private static intersectsPolygon(a: any, b: any) { + private static intersectsPolygon(a: HalfEdge, b: HalfEdge) { let p = a; do { if (p.i !== a.i && p.faceSuccessor.i !== a.i && p.i !== b.i && p.faceSuccessor.i !== b.i && @@ -887,14 +658,14 @@ export class Triangulator { } /** check if a polygon diagonal is locally inside the polygon */ - private static locallyInside(a: any, b: any) { + private static locallyInside(a: HalfEdge, b: HalfEdge) { return Triangulator.signedTriangleArea(a.facePredecessor, a, a.faceSuccessor) < 0 ? Triangulator.signedTriangleArea(a, b, a.faceSuccessor) >= 0 && Triangulator.signedTriangleArea(a, a.facePredecessor, b) >= 0 : Triangulator.signedTriangleArea(a, b, a.facePredecessor) < 0 || Triangulator.signedTriangleArea(a, a.faceSuccessor, b) < 0; } /** check if the middle point of a polygon diagonal is inside the polygon */ - private static middleInside(a: any, b: any) { + private static middleInside(a: HalfEdge, b: HalfEdge) { let p = a; let inside = false; const px = (a.x + b.x) / 2; @@ -916,8 +687,8 @@ export class Triangulator { * * "a" and "b" still represent the same physical pieces of edges * @returns Returns the (base of) the new half edge, at the "a" end. */ - private static splitPolygon(a: HalfEdge, b: HalfEdge): HalfEdge { - const a2 = Triangulator._returnGraph.createEdgeXYZXYZ(a.x, a.y, a.z, a.i, b.x, b.y, b.z, b.i); + private static splitPolygon(graph: HalfEdgeGraph, a: HalfEdge, b: HalfEdge): HalfEdge { + const a2 = graph.createEdgeXYZXYZ(a.x, a.y, a.z, a.i, b.x, b.y, b.z, b.i); const b2 = a2.faceSuccessor; HalfEdge.pinch(a, a2); diff --git a/core/i18n/CHANGELOG.json b/core/i18n/CHANGELOG.json index 9150b8e..2442e4e 100644 --- a/core/i18n/CHANGELOG.json +++ b/core/i18n/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/imodeljs-i18n", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-i18n_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-i18n_v0.189.0", diff --git a/core/i18n/CHANGELOG.md b/core/i18n/CHANGELOG.md index 2ef7377..a8ce3e1 100644 --- a/core/i18n/CHANGELOG.md +++ b/core/i18n/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/imodeljs-i18n -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/i18n/package.json b/core/i18n/package.json index d5b9050..d669f30 100644 --- a/core/i18n/package.json +++ b/core/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-i18n", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js localization code", "license": "MIT", "repository": { @@ -38,16 +38,16 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/i18next": "^8.4.2", "@types/i18next-browser-languagedetector": "^2.0.1", "@types/node": "10.12.18", diff --git a/core/logger-config/CHANGELOG.json b/core/logger-config/CHANGELOG.json index 0254860..1e85a16 100644 --- a/core/logger-config/CHANGELOG.json +++ b/core/logger-config/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/logger-config", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/logger-config_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/logger-config_v0.189.0", diff --git a/core/logger-config/CHANGELOG.md b/core/logger-config/CHANGELOG.md index bd91cdb..1ef98ed 100644 --- a/core/logger-config/CHANGELOG.md +++ b/core/logger-config/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/logger-config -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/logger-config/package.json b/core/logger-config/package.json index e3f8eca..ebbcfcf 100644 --- a/core/logger-config/package.json +++ b/core/logger-config/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/logger-config", - "version": "0.189.0", + "version": "0.190.0", "description": "Logger configuration", "main": "lib/logger-config.js", "typings": "lib/logger-config", @@ -30,15 +30,15 @@ "iModel" ], "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", "bunyan": "^1.8.12", "bunyan-seq": "^0.2.0", "request": "^2.88.0", "request-promise": "^4.2.0" }, "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", "@types/bunyan": "^1.8.4", "@types/bunyan-seq": "^0.2.0", "@types/node": "10.12.18", diff --git a/core/quantity/CHANGELOG.json b/core/quantity/CHANGELOG.json index 7c17ee3..0328b66 100644 --- a/core/quantity/CHANGELOG.json +++ b/core/quantity/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/imodeljs-quantity", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-quantity_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-quantity_v0.189.0", diff --git a/core/quantity/CHANGELOG.md b/core/quantity/CHANGELOG.md index 6f46c57..21fba93 100644 --- a/core/quantity/CHANGELOG.md +++ b/core/quantity/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/imodeljs-quantity -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/quantity/package.json b/core/quantity/package.json index 85d4c47..5ad2127 100644 --- a/core/quantity/package.json +++ b/core/quantity/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-quantity", - "version": "0.189.0", + "version": "0.190.0", "description": "Quantity formatting and parsing concepts in typescript", "license": "MIT", "main": "lib/imodeljs-quantity.js", @@ -36,9 +36,9 @@ "url": "http://www.bentley.com" }, "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/glob": "^5.0.35", @@ -58,9 +58,10 @@ }, "dependencies": {}, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0" }, "nyc": { - "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc" + "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc", + "sourceMap": false } } diff --git a/core/webserver/CHANGELOG.json b/core/webserver/CHANGELOG.json index da5a441..fd2bd69 100644 --- a/core/webserver/CHANGELOG.json +++ b/core/webserver/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/imodeljs-webserver", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/imodeljs-webserver_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/imodeljs-webserver_v0.189.0", diff --git a/core/webserver/CHANGELOG.md b/core/webserver/CHANGELOG.md index 3098cbf..b030f61 100644 --- a/core/webserver/CHANGELOG.md +++ b/core/webserver/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/imodeljs-webserver -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/core/webserver/package.json b/core/webserver/package.json index bce86f3..99ee26c 100644 --- a/core/webserver/package.json +++ b/core/webserver/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/imodeljs-webserver", - "version": "0.189.0", + "version": "0.190.0", "description": "Simple Express-based web server for iModel.js static files", "license": "MIT", "repository": { @@ -32,7 +32,7 @@ "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@bentley/dev-cors-proxy-server": "0.0.9", "@types/express": "^4.16.1", "@types/node": "10.12.18", diff --git a/docs/core/changehistory/ChangeLogs.md b/docs/core/changehistory/ChangeLogs.md new file mode 100644 index 0000000..2b838cc --- /dev/null +++ b/docs/core/changehistory/ChangeLogs.md @@ -0,0 +1,13 @@ +## Change Logs + +- [imodeljs-backend](../reference/imodeljs-backend/changelog) + +- [imodeljs-frontend](../reference/imodeljs-frontend/changelog) + +- [imodeljs-common](../reference/imodeljs-common/changelog) + +- [geometry-core](../reference/geometry-core/changelog) + +- [imodeljs-clients](../reference/imodeljs-clients/changelog) + +- [bentleyjs-core](../reference/bentleyjs-core/changelog) diff --git a/docs/core/changehistory/NextVersion.md b/docs/core/changehistory/NextVersion.md index 2eb63ca..29fc017 100644 --- a/docs/core/changehistory/NextVersion.md +++ b/docs/core/changehistory/NextVersion.md @@ -2,4 +2,3 @@ ignore: true --- # NextVersion - diff --git a/docs/core/changehistory/leftNav.md b/docs/core/changehistory/leftNav.md index 4ddc42f..700ed54 100644 --- a/docs/core/changehistory/leftNav.md +++ b/docs/core/changehistory/leftNav.md @@ -9,3 +9,17 @@ - [0.171.0](./0.171.0.md) - [0.163.0](./0.163.0.md) + +--- +### [link_to changelogs docSite=changehistory text="Change Logs"] +- [imodeljs-backend](../reference/imodeljs-backend/changelog) + +- [imodeljs-frontend](../reference/imodeljs-frontend/changelog) + +- [imodeljs-common](../reference/imodeljs-common/changelog) + +- [geometry-core](../reference/geometry-core/changelog) + +- [imodeljs-clients](../reference/imodeljs-clients/changelog) + +- [bentleyjs-core](../reference/bentleyjs-core/changelog) diff --git a/docs/core/config/docSites.json b/docs/core/config/docSites.json index ae819c7..b6b83ba 100644 --- a/docs/core/config/docSites.json +++ b/docs/core/config/docSites.json @@ -42,7 +42,7 @@ "BIS": "bis", "Learning": "learning", "API Reference": "reference", - "v0.189.0": "changehistory" + "v0.190.0": "changehistory" }, "packageAliases": { "common": "imodeljs-common", diff --git a/docs/core/config/layouts/agentApplication.html b/docs/core/config/layouts/agentApplication.html index 7dcb829..489be34 100644 --- a/docs/core/config/layouts/agentApplication.html +++ b/docs/core/config/layouts/agentApplication.html @@ -6,7 +6,8 @@

{{{editLink this}}} -
+

Register Agent Application

Such as iModel Query Agent

@@ -60,7 +61,8 @@

Application Information

users of your application - + @@ -90,4 +92,4 @@

Application Information

{{>registration_scripts}} -{{>footer}} \ No newline at end of file +{{>footer}} diff --git a/docs/core/config/layouts/browserApplication.html b/docs/core/config/layouts/browserApplication.html deleted file mode 100644 index 8000f90..0000000 --- a/docs/core/config/layouts/browserApplication.html +++ /dev/null @@ -1,163 +0,0 @@ -{{>header}} - -
- {{>table_of_contents}} -
-
- {{{editLink this}}} - - -
-

Register Browser Application

-

A browser application, such as the sample Simple Viewer App.

-
- -

Developer Contact Information -
- The name of the developer who will own this application. This is the only individual who will be - able to request updates to the client registrations. -

-
- - - - - - - - -
- - -
- - - -
-
- -
-

Application Information

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-
- -
-

Register URIs

-
- - - - - - - - - -
- - - -
- - - -
-
- - - - -
- - {{>thank_you_message email='iModeljs.App.Registration@bentley.com'}} - {{>error_message email='iModeljs.App.Registration@bentley.com' subject='BrowserApplication'}} - - - - {{>loaderScript}} -
-
-
- -
-
- - -{{>registration_scripts}} - -{{>footer}} \ No newline at end of file diff --git a/docs/core/config/layouts/partials/error_message.html b/docs/core/config/layouts/partials/error_message.html index 1140a9d..1301082 100644 --- a/docs/core/config/layouts/partials/error_message.html +++ b/docs/core/config/layouts/partials/error_message.html @@ -11,4 +11,4 @@

There was an error processing the request. Please retry or contact Back -

\ No newline at end of file + diff --git a/docs/core/config/layouts/sampleProject.html b/docs/core/config/layouts/sampleProject.html deleted file mode 100644 index 0503330..0000000 --- a/docs/core/config/layouts/sampleProject.html +++ /dev/null @@ -1,105 +0,0 @@ -{{>header}} - -
- {{>table_of_contents}} -
-
- {{{editLink this}}} - -
-
-

Create New Sample Project

-

Provisions a new project for use testing your application

-
-

Developer Contact Information -
- The name of the developer who will own this project. This is the only individual who will be - able to request updates to the client registrations. -

-
- - - - - - - - - -
- - -
- - - -
-
- -
-

Project Information

-
- - - - - - - - - - - - - -
- - - -
- - - -
- -
-
- - - - -
- - {{>thank_you_message email='iModeljs.Sample.Request@bentley.com'}} - {{>error_message email='iModeljs.Sample.Request@bentley.com' subject='SampleProject'}} - -
- - {{>loaderScript}} -
-
-
- -
-
- -{{>registration_scripts}} - -{{>footer}} \ No newline at end of file diff --git a/docs/core/config/layouts/updateApplication.html b/docs/core/config/layouts/updateApplication.html deleted file mode 100644 index 68f41fd..0000000 --- a/docs/core/config/layouts/updateApplication.html +++ /dev/null @@ -1,159 +0,0 @@ -{{>header}} - -
- {{>table_of_contents}} -
-
- {{{editLink this}}} - -
-
-

Update an application you have already registered with Bentley

- -

Developer Contact Information

-
- - - - - - - - - -
- - -
- - - -
-
- -

Application Information

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-
- -
-

Redirect URIs

-
- - - - - - - - - - - - - -
- - - -
- - -
- - - -
-
- - - - -
- - {{>thank_you_message email='iModeljs.App.Registration@bentley.com'}} - {{>error_message email='iModeljs.App.Registration@bentley.com' subject='UpdateApplication'}} - -
- - {{>loaderScript}} -
-
-
- -
-
- -{{>registration_scripts}} - -{{>footer}} \ No newline at end of file diff --git a/docs/core/config/layouts/updateProject.html b/docs/core/config/layouts/updateProject.html deleted file mode 100644 index 5d58bf1..0000000 --- a/docs/core/config/layouts/updateProject.html +++ /dev/null @@ -1,110 +0,0 @@ -{{>header}} - -
- {{>table_of_contents}} -
-
- {{{editLink this}}} - -
-
-

Update Sample Project

-

Edit an existing sample project

-
- -

Developer Contact Information

-
- - - - - - - - - -
- - -
- - - -
-
- -

Project Information

-
- - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - -
-
- - - - -
- - {{>thank_you_message email='iModeljs.Sample.Request@bentley.com'}} - {{>error_message email='iModeljs.Sample.Request@bentley.com' subject='UpdateProject'}} - -
- - {{>loaderScript}} -
-
-
- -
-
- -{{>registration_scripts}} - -{{>footer}} \ No newline at end of file diff --git a/docs/core/getting-started/agent-application.md b/docs/core/getting-started/agent-application.md index cfae5f7..823666a 100644 --- a/docs/core/getting-started/agent-application.md +++ b/docs/core/getting-started/agent-application.md @@ -1,4 +1,4 @@ --- layout: 'agentApplication.html' title: "Agent Application" ---- \ No newline at end of file +--- diff --git a/docs/core/getting-started/application-scopes.md b/docs/core/getting-started/application-scopes.md index 021614f..924322a 100644 --- a/docs/core/getting-started/application-scopes.md +++ b/docs/core/getting-started/application-scopes.md @@ -13,4 +13,6 @@ containsMetadata: 'AvailableScopes' | organization | Required to get the user’s organization information | | context-registry-service | Required to access the Context Registry, the service that allows access to a CONNECT project | | imodelhub | Required to access the iModelHub, the service that allows access to the iModels | -| reality-data:read | Required for read access to reality data | \ No newline at end of file +| reality-data:read | Required for read access to reality data | +| imodeljs-router | | +| visible-api-scope | | diff --git a/docs/core/getting-started/browser-application.md b/docs/core/getting-started/browser-application.md deleted file mode 100644 index 0f5d31a..0000000 --- a/docs/core/getting-started/browser-application.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: 'browserApplication.html' -title: "Browser Application" ---- \ No newline at end of file diff --git a/docs/core/getting-started/index.md b/docs/core/getting-started/index.md index dba2d92..5c6c2dc 100644 --- a/docs/core/getting-started/index.md +++ b/docs/core/getting-started/index.md @@ -1,8 +1,6 @@ # Getting Started With iModel.js - - -## Required Tools +## 1. Get the Tools Writing an iModel.js application requires the following software: @@ -14,49 +12,63 @@ Writing an iModel.js application requires the following software: - [Git](https://git-scm.com/downloads) - This is the source code control system for the iModel.js repositories. -## Code Samples -**_Note: Samples must be registered, and require a sample Project/iModel. See [Developer Registration](#developer-registration)_** +### Suggested Tools +The following tools are very helpful and highly suggested for working with iModel.js: +- [Visual Studio Code](https://code.visualstudio.com/) + - This is the recommended editor and debugger for iModel.js applications. + - VS Code also supplies a graphical user interface for working with Git. + - The following VS Code extensions can also be quite helpful: + - [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) (use tslint.json from @bentley/build-tools to enforce Bentley coding standards) + - [Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) + - [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) (great tools for using Git inside VSCode) + - [MarkdownLint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) (for editing documentation) -The following samples showcase the iModel.js API in action: +## 2. Register Yourself -- [Simple Viewer App](https://github.com/imodeljs/simple-viewer-app) - - Embed an iModel.js viewport into your application to display graphical data. - - Browse iModel catalog and view element properties. -- [iModel Query Agent](https://github.com/imodeljs/imodel-query-agent) - - Listen to changes made to an iModel on the iModelHub. - - Construct a 'Change Summary' of useful information. +To be able to view/read [iModel](../learning/imodels) data, you will need access to the [iModelHub]($docs/learning/IModelHub/index.md), which requires a Bentley user account. -## Developer Registration +**[Register here](https://ims.bentley.com/IMS/Registration)** -### Register a New Application +_Note: Skip to step 3, if you already have a Bentley User Account._ -- [Agent Application](./agent-application.md) - Such as iModel Query Agent -- [Browser Application](./browser-application.md) - Such as Simple Viewer App +## 3. Register your Application +Once you have a Bentley User account, you will need to register the application you are about to create so it can access iModelHub. -### Update an Existing Application +**[Register Here](./registration-dashboard.md)** -- [Update Existing Application](./update-application.md) +There are two types of apps you can register: -### Create Sample Project and iModel +[Browser Application](../learning/app.md/#interactive-apps)
+Our sample is called "Simple Viewer App" which can: +- Embed an iModel.js viewport into your application to display graphical data. +- Browse iModel catalog and view element properties. -- [Create New Sample Project](./sample-project.md) -- [Update Sample Project](./update-project.md) +[Agent Application](../learning/app.md/#agents-and-services)
+Our sample is called "iModel Query Agent" which can: +- Listen to changes made to an iModel on the iModelHub. +- Construct a 'Change Summary' of useful information. -## Suggested Tools +## 4. Create a Sample Project +Once you have a registered application, you will need content to work with. To get you started, Bentley can supply some example content using our “iModel Testdrive” organization. From the registration page you can create a new project and give access to other developers. -The following tools are very helpful and highly suggested for working with iModel.js: +**[Register Here](./registration-dashboard?tab=1)** -- [Visual Studio Code](https://code.visualstudio.com/) - - This is the recommended editor and debugger for iModel.js applications. - - VS Code also supplies a graphical user interface for working with Git. - - The following VS Code extensions can also be quite helpful: - - [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) (use tslint.json from @bentley/build-tools to enforce Bentley coding standards) - - [Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) - - [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) (great tools for using Git inside VSCode) - - [MarkdownLint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) (for editing documentation) +_Note: The “iModel Testdrive” organization is intended for developer testing only. See [this page](invalidlink) for information about administering a CONNECT project in your own organization._ + + +## 5. Get the Sample Code +The Github repositories for the applications described in step 3. + +[Simple Viewer App](https://github.com/imodeljs/simple-viewer-app)
+[iModel Query Agent](https://github.com/imodeljs/imodel-query-agent) + +
+
+
-## Recommended Reading +--- +### Recommended Reading - [TypeScript](http://www.typescriptlang.org/) - iModel.js applications are written in TypeScript and then _compiled_ to plain JavaScript. @@ -64,6 +76,6 @@ The following tools are very helpful and highly suggested for working with iMode - `npm` is used to install and manage dependencies of an iModel.js application. - The `npm` [command line](https://docs.npmjs.com/cli/npm) and `npm` [scripts](https://docs.npmjs.com/misc/scripts) are used to build and test iModel.js applications. -## Support +### Support Please see the [Community Resources](../learning/CommunityResources.md) page for the best places to get more help. diff --git a/docs/core/getting-started/leftNav.md b/docs/core/getting-started/leftNav.md new file mode 100644 index 0000000..f1ebcb0 --- /dev/null +++ b/docs/core/getting-started/leftNav.md @@ -0,0 +1,10 @@ +### [Getting Started](./index.md) +- [1. Get the Tools](./index.md#1-get-the-tools) +- [2. Register Yourself](./index.md#2-register-yourself) +- [3. Register your Application](./index.md#3-register-your-application) +- [4. Create a Sample Project](./index.md#4-create-a-sample-project) +- [5. Get the Sample Code](./index.md#5-get-the-sample-code) + +--- +  +### [Registration Dashboard](./registration-dashboard.md) diff --git a/docs/core/getting-started/sample-project.md b/docs/core/getting-started/sample-project.md deleted file mode 100644 index b1b9fe3..0000000 --- a/docs/core/getting-started/sample-project.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: 'sampleProject.html' -title: "Sample Project" ---- \ No newline at end of file diff --git a/docs/core/getting-started/update-application.md b/docs/core/getting-started/update-application.md deleted file mode 100644 index 27b9277..0000000 --- a/docs/core/getting-started/update-application.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: 'updateApplication.html' -title: "Update Application" ---- \ No newline at end of file diff --git a/docs/core/getting-started/update-project.md b/docs/core/getting-started/update-project.md deleted file mode 100644 index 925011a..0000000 --- a/docs/core/getting-started/update-project.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: 'updateProject.html' -title: "Update Project" ---- \ No newline at end of file diff --git a/docs/presentation/learning/RelatedInstanceSpecification.md b/docs/presentation/learning/RelatedInstanceSpecification.md new file mode 100644 index 0000000..1926534 --- /dev/null +++ b/docs/presentation/learning/RelatedInstanceSpecification.md @@ -0,0 +1,29 @@ +# RelatedInstance Specification + +Related instance specification can be used in conjunction with both content +and hierarchy related rules. It's primary purpose is to *join* primary instance +with some related instance and allow using them both for: +- filtering +- labeling +- grouping + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`relationship` | Yes | `SingleSchemaClassSpecification` | | Specification of the relationship to use for joining the related instance. +`class` | Yes | `SingleSchemaClassSpecification` | | Specification of the related instance class. +`requiredDirection` | Yes | `"Forward" | "Backward"` | | Direction of the relationship. +`alias` | Yes | `string` | | The alias to give for the joined related instance. Used to reference the related instance in instance filter and customization rules. **The value must be unique per-specification.** +`isRequired` | No | `boolean` | `false` | Is the related instance required to exist. If yes, primary instance won't be returned if the related instance doesn't exist. If not, primary instance will be returned, but related instance will be null. In SQL terms in can be compared to INNER JOIN vs OUTER JOIN. + +## Example + +```JSON +{ + "relationship": { "schemaName": "BisCore", "className": "ModelModelsElement" }, + "requiredDirection": "Forward", + "class": { "schemaName": "BisCore", "className": "Element" }, + "alias": "modeledElement" +} +``` diff --git a/docs/presentation/learning/content/Rules.md b/docs/presentation/learning/content/Rules.md new file mode 100644 index 0000000..1a52866 --- /dev/null +++ b/docs/presentation/learning/content/Rules.md @@ -0,0 +1,28 @@ +# Content-related Rules + +There are 2 primary concepts for creating content: rules and specifications. + +## Rules + +Define *if* specific set of specifications should be used to create content for specific instances: +- [ContentRule](./rules/ContentRule.md) + +## Specifications + +Define *what content* is returned. There are 3 types of specifications: +- [SelectedNodeInstances](./specifications/SelectedNodeInstances.md) +- [ContentInstancesOfSpecificClasses](./specifications/ContentInstancesOfSpecificClasses.md) +- [ContentRelatedInstances](./specifications/ContentRelatedInstances.md) + +Multiple specifications can contribute to the same content rule if: +- There are multiple of them specified in a single rule +- There are multiple rules whose condition returns `true` + +## Modifiers + +Content modifiers allow modifying content by hiding or showing properties, including additional ones +or specifying custom editors. +- [CalculatedProperties](./modifiers/CalculatedPropertiesSpecification.md) +- [PropertiesDisplay](./modifiers/PropertiesDisplaySpecification.md) +- [PropertyEditors](./modifiers/PropertyEditorsSpecification.md) +- [RelatedProperties](./modifiers/RelatedPropertiesSpecification.md) diff --git a/docs/presentation/learning/content/index.md b/docs/presentation/learning/content/index.md index 9e4fd27..291167a 100644 --- a/docs/presentation/learning/content/index.md +++ b/docs/presentation/learning/content/index.md @@ -1,5 +1,6 @@ -# Content - -Table of Contents: -- [ECExpressions](./ECExpressions.md) -- [Terminology](./Terminology.md) +# Content + +Table of Contents: +- [Rules](./Rules.md) +- [ECExpressions](./ECExpressions.md) +- [Terminology](./Terminology.md) diff --git a/docs/presentation/learning/content/modifiers/CalculatedPropertiesSpecification.md b/docs/presentation/learning/content/modifiers/CalculatedPropertiesSpecification.md new file mode 100644 index 0000000..08b2ced --- /dev/null +++ b/docs/presentation/learning/content/modifiers/CalculatedPropertiesSpecification.md @@ -0,0 +1,21 @@ +# CalculatedProperties Content Modifier + +This content modifier allows including additional calculated properties into the content. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`label` | Yes | `string` | | Label of the calculated property. Supports [localization](../../Localization.md). +`value` | Yes | [ECExpression](../../ECExpressions.md) | | Expression to calculate the value. The expression can use [ECInstance](../../ECExpressions.md#ecinstance) and [Ruleset Variables](../../ECExpressions.md#ruleset-variables-user-settings) symbol contexts. +`priority` | No | `number` | `1000` | Priority of the property. Determines the position of this property in UI components - higher priority means the property should be more visible. + +## Example + +```JSON +{ + "priority": 9999, + "label": "@MyApp:Volume@", + "value": "this.Width * this.Height * this.Depth" +} +``` diff --git a/docs/presentation/learning/content/modifiers/PropertiesDisplaySpecification.md b/docs/presentation/learning/content/modifiers/PropertiesDisplaySpecification.md new file mode 100644 index 0000000..22b5831 --- /dev/null +++ b/docs/presentation/learning/content/modifiers/PropertiesDisplaySpecification.md @@ -0,0 +1,21 @@ +# PropertiesDisplay Content Modifier + +This content modifier allows hiding or showing specific properties. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`propertyNames` | Yes | `string[]` | | List of ECProperty names which should be hidden or shown. +`isDisplayed` | No | `boolean` | `true` | Should properties be displayed. +`priority` | No | `number` | `1000` | Controls priority of the specification. Higher priority means the specification takes precedence. + +## Example + +```JSON +{ + "priority": 9999, + "propertyNames": ["Width", "Height", "Depth"], + "isDisplayed": false +} +``` diff --git a/docs/presentation/learning/content/modifiers/PropertyEditorsSpecification.md b/docs/presentation/learning/content/modifiers/PropertyEditorsSpecification.md new file mode 100644 index 0000000..dd58434 --- /dev/null +++ b/docs/presentation/learning/content/modifiers/PropertyEditorsSpecification.md @@ -0,0 +1,69 @@ +# PropertyEditors Content Modifier + +This content modifier allows specifying a custom property editor for specific properties. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`propertyName` | Yes | `string` | | Name of the property which custom editor should be used for. +`editorName` | Yes | `string` | | Name of the custom editor. +`parameters` | No | `PropertyEditorParameters[]` | `[]` | Parameters for the editor. + +## Parameters + +Parameters allow to further customize the chosen editor. + +### JSON + +The JSON parameters are the most flexible type of editor parameters as they simply allow sending an arbitrary JSON object which the editor receives. + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`paramsType` | Yes | `"Json"` | | Type of parameters object. +`json` | No | `any` | `undefined` | Arbitrary JSON sent to the editor. + +### Multiline + +Parameters that are intended for text editors that support multi-line display. + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`paramsType` | Yes | `"Multiline"` | | Type of parameters object. +`height` | No | `number` | `1` | Number of lines. + +### Range + +Parameters for numeric or date editors that support ranges. + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`paramsType` | Yes | `"Range"` | | Type of parameters object. +`min` | No | `number` | `undefined` | Minimum value of the range. +`max` | No | `number` | `undefined` | Maximum value of the range. + +### Slider + +Parameters for editors that support slider display. + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`paramsType` | Yes | `"Slider"` | | Type of parameters object. +`min` | Yes | `number` | | Minimum value that can be set. +`max` | Yes | `number` | | Maximum value that can be set. +`intervalsCount` | No | `number` | `1` | Count of intervals. +`isVertical` | No | `boolean` | `false` | Is slider vertical. + +## Example + +```JSON +{ + "propertyName": "Height", + "editorName": "Slider", + "parameters": [{ + "paramsType": "Slider", + "min": 0, + "max": 100 + }] +} +``` diff --git a/docs/presentation/learning/content/modifiers/RelatedPropertiesSpecification.md b/docs/presentation/learning/content/modifiers/RelatedPropertiesSpecification.md new file mode 100644 index 0000000..7be4644 --- /dev/null +++ b/docs/presentation/learning/content/modifiers/RelatedPropertiesSpecification.md @@ -0,0 +1,27 @@ +# RelatedProperties Content Modifier + +This content modifier allows including related instance properties into the selected instance content. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +`relationships` | No* | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | Specifications for relationships to follow when looking for related instances. +`relatedClasses` | No* | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | Specifications for related instance classes. +`isPolymorphic` | No | `boolean` | `false` | Should `relationships` and `relatedClasses` be handled polymorphically. +`requiredDirection` | No | `"Forward" | "Backward" | "Both"` | `"Both"` | Relationship directions to follow when looking for related instances. +`relationshipMeaning` | No | `"SameInstance" | "RelatedInstance"` | `"RelatedInstance"` | Meaning of the relationship. This is really just a cue for UI for how to display the property. +`propertyNames` | No | `string[] | "_none_"` | All properties in related classes | List of names of related class properties that should be included in the content. +`nestedRelatedProperties` | No | `RelatedPropertiesSpecification[]` | `[]` | Nested related properties specifications. Often used with `propertyNames = "_none_"` when traversing through several relationships to access related properties. + +## Example + +```JSON +{ + "relationships": {"schemaName": "BisCore", "classNames": ["ElementOwnsUniqueAspect"]}, + "relatedClasses": {"schemaName": "BisCore", "classNames": ["ElementUniqueAspect"]}, + "requiredDirection": "Forward", + "isPolymorphic": true, + "relationshipMeaning": "SameInstance" +} +``` diff --git a/docs/presentation/learning/content/rules/ContentRule.md b/docs/presentation/learning/content/rules/ContentRule.md new file mode 100644 index 0000000..816ea1d --- /dev/null +++ b/docs/presentation/learning/content/rules/ContentRule.md @@ -0,0 +1,29 @@ +# ContentRule + +Content rules are used to define content that is displayed for specific type of selection. + +Selection consists of either instances or nodes and to make things +simpler everything is considered a node - instances get converted to +ECInstance nodes (thus the `SelectedNode` symbol in [`condition` ECExpression](ECExpressions.md#rule-condition)). + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Picking attributes* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +*Content attributes* | +`specifications` | No | `ContentSpecification[]` | `[]` | Specifications that define what content the rule returns. + +## Example + +```JSON +{ + "ruleType": "Content", + "priority": 999, + "condition": "SelectedNode.IsOfClass(\"Model\", \"BisCore\")", + "specifications": [], +} +``` diff --git a/docs/presentation/learning/content/specifications/ContentInstancesOfSpecificClasses.md b/docs/presentation/learning/content/specifications/ContentInstancesOfSpecificClasses.md new file mode 100644 index 0000000..c8bfc53 --- /dev/null +++ b/docs/presentation/learning/content/specifications/ContentInstancesOfSpecificClasses.md @@ -0,0 +1,35 @@ +# ContentInstancesOfSpecificClasses Specification + +Returns content for instances of specific ECClasses. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +*Filtering* | +`classes` | Yes | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | Classes whose instances should be used. +`arePolymorphic` | No | `boolean` | `false` | Should all `classes` be handled polymorphically. +`instanceFilter` | No | [ECExpression](../ECExpressions.md#instance-filter) | `""` | Condition for filtering instances +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications. +*Content Modifiers* | +`relatedProperties` | No | `RelatedPropertiesSpecification[]` | `[]` | Specifications of [related properties](../Terminology.md#related-properties) which are included in the generated content. *See [this page](../modifiers/RelatedPropertiesSpecification.md) for more details* +`calculatedProperties` | No | `CalculatedPropertiesSpecification[]` | `[]` | Specifications of calculated properties whose values are generated using provided ECExpressions. *See [this page](../modifiers/CalculatedPropertiesSpecification.md) for more details* +`propertiesDisplay` | No | `PropertiesDisplaySpecification[]` | `[]` | Specifications for customizing property display by hiding / showing them. *See [this page](../modifiers/PropertiesDisplaySpecification.md) for more details* +`propertyEditors` | No | `PropertyEditorsSpecification[]` | `[]` | Specifications of property editors which can be utilities in UI components to edit specific properties. *See [this page](../modifiers/PropertyEditorsSpecification.md) for more details* +`showImages` | No | `boolean` | `false` | Should image IDs be calculated for the returned instances. When `true`, [ImageIdOverride](../../customization/rules/ImageIdOverride.md) rules get applied when creating content. +*Misc.* | +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in content creation. + +## Example + +```JSON +{ + "specType": "ContentInstancesOfSpecificClasses", + "classes": { + "schemaName": "BisCore", + "classNames": ["Model"] + }, + "arePolymorphic": true +} +``` diff --git a/docs/presentation/learning/content/specifications/ContentRelatedInstances.md b/docs/presentation/learning/content/specifications/ContentRelatedInstances.md new file mode 100644 index 0000000..fcfc0c7 --- /dev/null +++ b/docs/presentation/learning/content/specifications/ContentRelatedInstances.md @@ -0,0 +1,43 @@ +# ContentRelatedInstances Specification + +Returns content for instances related to the selected (input) instances. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +*Filtering* | +`relationships` | No* | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | List of ECRelationship specifications to follow when looking for related instances. Optional if `relatedClasses` is specified. +`relatedClasses` | No* | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | List of related instance ECClass specifications. Optional if `relationships` is specified. +`requiredDirection` | No | `"Forward" | "Backward" | "Both"` | `"Both"` | Relationship direction to follow when walking from the selected (input) instance. +`instanceFilter` | No | [ECExpression](../ECExpressions.md#instance-filter) | `""` | Condition for filtering instances +`skipRelatedLevel` | No | `number` | `0` | Skips defined level of related items and shows next level related items. +`isRecursive` | No | `boolean` | `false` | Walks the specified relationships recursively to find related instances. **Note:** Can't be used together with `skipRelatedLevel`. **Warning:** Using this specification has significant negative performance impact. +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications. +*Content Modifiers* | +`relatedProperties` | No | `RelatedPropertiesSpecification[]` | `[]` | Specifications of [related properties](../Terminology.md#related-properties) which are included in the generated content. *See [this page](../modifiers/RelatedPropertiesSpecification.md) for more details* +`calculatedProperties` | No | `CalculatedPropertiesSpecification[]` | `[]` | Specifications of calculated properties whose values are generated using provided ECExpressions. *See [this page](../modifiers/CalculatedPropertiesSpecification.md) for more details* +`propertiesDisplay` | No | `PropertiesDisplaySpecification[]` | `[]` | Specifications for customizing property display by hiding / showing them. *See [this page](../modifiers/PropertiesDisplaySpecification.md) for more details* +`propertyEditors` | No | `PropertyEditorsSpecification[]` | `[]` | Specifications of property editors which can be utilities in UI components to edit specific properties. *See [this page](../modifiers/PropertyEditorsSpecification.md) for more details* +`showImages` | No | `boolean` | `false` | Should image IDs be calculated for the returned instances. When `true`, [ImageIdOverride](../../customization/rules/ImageIdOverride.md) rules get applied when creating content. +*Misc.* | +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in content creation. + +## Example + +```JSON +{ + "specType": "ContentRelatedInstances", + "relationships": { + "schemaName": "BisCore", + "classNames": ["ModelContainsElements"] + }, + "requiredDirection": "Forward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": ["PhysicalElement"] + }, + "arePolymorphic": true +} +``` diff --git a/docs/presentation/learning/content/specifications/SelectedNodeInstances.md b/docs/presentation/learning/content/specifications/SelectedNodeInstances.md new file mode 100644 index 0000000..b488575 --- /dev/null +++ b/docs/presentation/learning/content/specifications/SelectedNodeInstances.md @@ -0,0 +1,34 @@ +# SelectedNodeInstances Specification + +Returns content for selected (input) instances. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|-|- +*Filtering* | +`acceptableSchemaName` | No | `string` | `""` | Filter selected nodes by specified schema name. All schemas are accepted if not specified. +`acceptableClassNames` | No | `string[]` | `[]` | Filter selected nodes by specified class names. All classes are accepted if not specified. +`acceptablePolymorphically` | No | `boolean` | `false` | Should `acceptableClassNames` property be checked polymorphically. If true, all derived classes are accepted as well. +`onlyIfNotHandled` | No | boolean | `false` | Identifies whether we should ignore this specification if there is already an existing specification with higher `priority` that already provides content. +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications. +*Content Modifiers* | +`relatedProperties` | No | `RelatedPropertiesSpecification[]` | `[]` | Specifications of [related properties](../Terminology.md#related-properties) which are included in the generated content. *See [this page](../modifiers/RelatedPropertiesSpecification.md) for more details* +`calculatedProperties` | No | `CalculatedPropertiesSpecification[]` | `[]` | Specifications of calculated properties whose values are generated using provided ECExpressions. *See [this page](../modifiers/CalculatedPropertiesSpecification.md) for more details* +`propertiesDisplay` | No | `PropertiesDisplaySpecification[]` | `[]` | Specifications for customizing property display by hiding / showing them. *See [this page](../modifiers/PropertiesDisplaySpecification.md) for more details* +`propertyEditors` | No | `PropertyEditorsSpecification[]` | `[]` | Specifications of property editors which can be utilities in UI components to edit specific properties. *See [this page](../modifiers/PropertyEditorsSpecification.md) for more details* +`showImages` | No | `boolean` | `false` | Should image IDs be calculated for the returned instances. When `true`, [ImageIdOverride](../../customization/rules/ImageIdOverride.md) rules get applied when creating content. +*Misc.* | +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in content creation. + +## Example + +```JSON +{ + "specType": "SelectedNodeInstances", + "acceptableSchemaName": "MySchema", + "acceptableClassNames": ["MyClass1", "MyClass2"], + "acceptablePolymorphically": true +} +``` diff --git a/docs/presentation/learning/customization/ECExpressions.md b/docs/presentation/learning/customization/ECExpressions.md index aca5240..ae22bb7 100644 --- a/docs/presentation/learning/customization/ECExpressions.md +++ b/docs/presentation/learning/customization/ECExpressions.md @@ -2,13 +2,23 @@ ## Rule Condition -Symbols available in Customization rules: +Symbols available in Customization rule conditions: -| Symbol | Type | Value | -|------------|------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------| -| ParentNode | [Node context](../ECExpressions.md#navnode) | The parent NavNode expression context. | -| ThisNode | [Node context](../ECExpressions.md#navnode) | NavNode expression context of the ECInstance that's currently being handled. Not available in grouping rules and sorting rules. | -| this | [ECInstance context](../ECExpressions.md#ecinstance) | ECInstance expression context of the ECInstance that's currently being handled. Not available in grouping rules and sorting rules. | +| Symbol | Type | Value +|---|---|--- +| ParentNode | [Node context](../ECExpressions.md#navnode) | The parent NavNode expression context. +| ThisNode | [Node context](../ECExpressions.md#navnode) | NavNode expression context of the ECInstance that's currently being handled. Not available in grouping rules and sorting rules. +| this | [ECInstance context](../ECExpressions.md#ecinstance) | ECInstance expression context of the ECInstance that's currently being handled. Not available in grouping rules and sorting rules. -Additionally, [User Settings symbols](../ECExpressions.md#symbols-in-global-context) - are available as well. +Additionally, [User Settings symbols](../ECExpressions.md#symbols-in-global-context) are available as well. + +## Override Value + +Symbols available in Customization rule override values: + +| Symbol | Type | Value +|---|---|--- +| ThisNode | [Node context](../ECExpressions.md#navnode) | NavNode expression context of the ECInstance that's currently being handled. +| this | [ECInstance context](../ECExpressions.md#ecinstance) | ECInstance expression context of the ECInstance that's currently being handled. Not available in grouping rules and sorting rules. + +Additionally, [User Settings symbols](../ECExpressions.md#symbols-in-global-context) are available as well. diff --git a/docs/presentation/learning/customization/Rules.md b/docs/presentation/learning/customization/Rules.md new file mode 100644 index 0000000..d70941f --- /dev/null +++ b/docs/presentation/learning/customization/Rules.md @@ -0,0 +1,10 @@ +# Customization Rules + +Customization rules allow customizing ECInstance display both in +hierarchies and content. The rules apply to both hierarchies and content: +- [CheckBoxRule](./rules/CheckBoxRule.md) +- [ImageIdOverride](./rules/ImageIdOverride.md) +- [InstanceLabelOverride](./rules/InstanceLabelOverride.md) +- [LabelOverride](./rules/LabelOverride.md) +- [StyleOverride](./rules/StyleOverride.md) +- [SortingRule](./rules/SortingRule.md) diff --git a/docs/presentation/learning/customization/index.md b/docs/presentation/learning/customization/index.md index 7a42d3f..29e534f 100644 --- a/docs/presentation/learning/customization/index.md +++ b/docs/presentation/learning/customization/index.md @@ -1,4 +1,5 @@ -# Customization - -Table of Contents: -- [ECExpressions](./ECExpressions.md) +# Customization + +Table of Contents: +- [Rules](./Rules.md) +- [ECExpressions](./ECExpressions.md) diff --git a/docs/presentation/learning/customization/rules/CheckBoxRule.md b/docs/presentation/learning/customization/rules/CheckBoxRule.md new file mode 100644 index 0000000..c5e2fda --- /dev/null +++ b/docs/presentation/learning/customization/rules/CheckBoxRule.md @@ -0,0 +1,32 @@ +# CheckBox Customization Rule + +CheckBox rules provide a way to create a checkbox for specific types of +ECInstance's. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +*CheckBox Attributes* | +`propertyName` | No | `string` | `undefined` | Name of boolean type ECProperty which is bound with the check box state. When set, property value gets bound to checkbox state. +`useInversedPropertyValue` | No | `boolean` | `false` | Should property value be inversed for the check box state. **Note:** Only makes sense when bound to an ECProperty. +`defaultValue` | No | `boolean` | `false` | Default value to use for the check box state. **Note:** Only makes sense when *not* bound to an ECProperty. +`isEnabled` | No | `boolean` | `true` | Indicates whether check box is enabled or disabled. + +## Example + +```JSON +{ + "ruleType": "CheckBox", + "priority": 999, + "stopFurtherProcessing": true, + "condition": "ThisNode.IsOfClass(\"MyItem\", \"MySchema\")", + "propertyName": "MyProperty", + "useInversedPropertyValue": true, + "isEnabled": false +} +``` diff --git a/docs/presentation/learning/customization/rules/ImageIdOverride.md b/docs/presentation/learning/customization/rules/ImageIdOverride.md new file mode 100644 index 0000000..16d0cb3 --- /dev/null +++ b/docs/presentation/learning/customization/rules/ImageIdOverride.md @@ -0,0 +1,26 @@ +# ImageIdOverride Customization Rule + +ImageId override rules allow setting an image ID to specific types of ECInstances. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +*Overrides* | +`imageIdExpression` | Yes | [ECExpression](../ECExpressions.md#override-value) | | An expression whose result becomes the image ID. + +## Example + +```JSON +{ + "ruleType": "ImageIdOverride", + "priority": 999, + "stopFurtherProcessing": true, + "condition": "ThisNode.IsOfClass(\"MyItem\", \"MySchema\")", + "imageIdExpression": "\"ImageId_\" & this.MyProperty" +} +``` diff --git a/docs/presentation/learning/customization/rules/InstanceLabelOverride.md b/docs/presentation/learning/customization/rules/InstanceLabelOverride.md new file mode 100644 index 0000000..2ace4fb --- /dev/null +++ b/docs/presentation/learning/customization/rules/InstanceLabelOverride.md @@ -0,0 +1,25 @@ +# InstanceLabelOverride Customization Rule + +Instance label override rule provides a way to set instance label to one of its property values. If more advanced labels are necessary, there's also a [LabelOverride rule](./LabelOverride.md) which uses [ECExpressions](../ECExpressions.md) to create the label, but costs more performance-wise. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`class` | Yes | `SingleSchemaClassSpecification` | | Specification of the ECClass to apply this rule to. +*Overrides* | +`propertyNames` | Yes | `string[]` | | Names of properties which should be used as instance label. The first property that has a value is used as the actual label. + +## Example + +```JSON +{ + "ruleType": "InstanceLabelOverride", + "priority": 999, + "class": { "schemaName": "MySchema", "className": "MyClass" }, + "propertyNames": ["MyProperty1", "MyProperty2"], +} +``` diff --git a/docs/presentation/learning/customization/rules/LabelOverride.md b/docs/presentation/learning/customization/rules/LabelOverride.md new file mode 100644 index 0000000..679dc23 --- /dev/null +++ b/docs/presentation/learning/customization/rules/LabelOverride.md @@ -0,0 +1,30 @@ +# LabelOverride Customization Rule + +Label override rules provide advanced ways to override instance labels and descriptions in +exchange of some performance penalty. When possible, it's advised to use +[InstanceLabelOverride](./InstanceLabelOverride.md) rules instead. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +*Overrides* | +`label` | No | [ECExpression](../ECExpressions.md#override-value) | `""` | An expression whose result becomes the label +`description` | No | [ECExpression](../ECExpressions.md#rule-condition) | `""` | An expression whose result becomes the description + +## Example + +```JSON +{ + "ruleType": "LabelOverride", + "priority": 999, + "stopFurtherProcessing": true, + "condition": "ThisNode.IsOfClass(\"MyItem\", \"MySchema\")", + "label": "\"Volume: \" & (this.Height * this.Width * this.Length)", + "description": "\"Physical item\"" +} +``` diff --git a/docs/presentation/learning/customization/rules/SortingRule.md b/docs/presentation/learning/customization/rules/SortingRule.md new file mode 100644 index 0000000..12e26e9 --- /dev/null +++ b/docs/presentation/learning/customization/rules/SortingRule.md @@ -0,0 +1,57 @@ +# Sorting Customization Rule + +Sorting rules provide a way to either disable sorting or sort instances my specific properties. There are 2 types of sorting rules for both of these scenarios. + +## Property Sorting Rule + +Rule to configure sorting for certain ECInstances in the hierarchy and/or content. It is possible to configure different sorting for different types of ECInstances. + +Multiple sorting rules may be applied for the same instances - in this case the +instances are first sorted by the highest priority rule and then the lower priority ones. + +**Note:** This rule is not meant to be used to sort grouping nodes, custom nodes or other non ECInstance type of nodes. + +### Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](../../hierarchies/ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +`class` | No | `SingleSchemaClassSpecification` | All classes in current context | Specification of ECClass whose ECInstances should be sorted. +`isPolymorphic` | No | `boolean` | false | Should `class` defined in this rule be handled polymorphically. +*Sorting* | +`propertyName` | Yes | `string` | | Name of the property which should be used for sorting. +`sortAscending` | No | `boolean` | `true` | Should instances be sorted in ascending order. + +### Example + +```JSON +{ + "ruleType": "DisabledSorting", + "priority": 999, + "class": { "schemaName": "MySchema", "className": "MyClass" }, + "isPolymorphic": true +} +``` + +## Disabled Sorting Rule + +Rule to disable sorting for certain ECInstances in the hierarchy and/or content. + +**Note:** Disabling sorting increases performance + +**Note:** This rule is not meant to be used to sort grouping nodes, custom nodes or +other non ECInstance type of nodes. + +### Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](../../hierarchies/ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +`class` | No | `SingleSchemaClassSpecification` | All classes in current context | Specification of ECClass whose ECInstances should be sorted. +`isPolymorphic` | No | `boolean` | false | Should `class` defined in this rule be handled polymorphically. diff --git a/docs/presentation/learning/customization/rules/StyleOverride.md b/docs/presentation/learning/customization/rules/StyleOverride.md new file mode 100644 index 0000000..1dd97fc --- /dev/null +++ b/docs/presentation/learning/customization/rules/StyleOverride.md @@ -0,0 +1,45 @@ +# StyleOverride Customization Rule + +Style override rules allow customizing display style of specific types of ECInstances. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +*Overrides* | +`foreColor` | No | [ECExpression](../ECExpressions.md#override-value) | `""` | An expression whose result evaluates to a [color value](#color-value-formats). +`backColor` | No | [ECExpression](../ECExpressions.md#override-value) | `""` | An expression whose result evaluates to a [color value](#color-value-formats). +`fontStyle` | No | [ECExpression](../ECExpressions.md#override-value) | `"Regular"` | An expression whose result evaluates to a [font style value](#font-styles). + +### Color Value Formats + +Colors in `foreColor` and `backColor` attributes may be evaluated to one of the following formats: +- color name: `Red`, `Blue`, etc. +- RGB: `rgb(100, 200, 255)` +- HEX: `#0f0f0f` + +### Font Styles + +Font style in `fontStyle` attribute may be evaluated to one of the following values: +- `Bold` +- `Italic` +- `Italic,Bold` +- `Regular` + +## Example + +```JSON +{ + "ruleType": "ImageIdOverride", + "priority": 999, + "stopFurtherProcessing": true, + "condition": "ThisNode.IsOfClass(\"MyItem\", \"MySchema\")", + "foreColor": "\"Black\"", + "backColor": "iif(this.MyProperty, \"#ff0000\", \"rgb(0,255,255)\")", + "fontStyle": "\"Italic,Bold\"" +} +``` diff --git a/docs/presentation/learning/hierarchies/ECExpressions.md b/docs/presentation/learning/hierarchies/ECExpressions.md index af58ebb..6946722 100644 --- a/docs/presentation/learning/hierarchies/ECExpressions.md +++ b/docs/presentation/learning/hierarchies/ECExpressions.md @@ -5,9 +5,9 @@ Child node rules have a `condition` ECExpression property which defines which rules should be applied for which parent nodes. The following ECExpression symbols are available there: -| Symbol | Type | Value | -|--------------|------------------------------------------------|----------------------------------------| -| `ParentNode` | [NavNode context](../ECExpressions.md#navnode) | The parent NavNode expression context. | +| Symbol | Type | Value +|---|---|--- +| `ParentNode` | [NavNode context](../ECExpressions.md#navnode) | The parent NavNode expression context. Additionally, [Ruleset variable symbols](../ECExpressions.md#ruleset-variables-user-settings) are available as well. @@ -20,10 +20,10 @@ are converted to ECSQL WHERE clause, so they have some limitations - ony a subse The below table lists all of them: -| Symbol | Type |Value | -|----------|------------------------------------------------------|---------------------------------------------------------------------------------| -| `parent` | [ECInstance context](../ECExpressions.md#ecinstance) | The parent ECInstance expression context. | -| `this` | [ECInstance context](../ECExpressions.md#ecinstance) | ECInstance expression context of the ECInstance that's currently being handled. | +| Symbol | Type | Value | +|---|---|--- +| `parent` | [ECInstance context](../ECExpressions.md#ecinstance) | The parent ECInstance expression context. +| `this` | [ECInstance context](../ECExpressions.md#ecinstance) | ECInstance expression context of the ECInstance that's currently being handled. Additionally, [Ruleset variable symbols](../ECExpressions.md#ruleset-variables-user-settings) are available as well. diff --git a/docs/presentation/learning/hierarchies/Rules.md b/docs/presentation/learning/hierarchies/Rules.md new file mode 100644 index 0000000..f839dff --- /dev/null +++ b/docs/presentation/learning/hierarchies/Rules.md @@ -0,0 +1,31 @@ +# Hierarchies-related Rules + +There are 2 primary concepts for creating hierarchies: rules and specifications. + +## Rules + +Define *where* and *if* specific branch should be created in the hierarchy. There are 2 types of rules: +- [RootNodeRule](./rules/RootNodeRule.md) +- [ChildNodeRule](./rules/ChildNodeRule.md) + +## Specifications + +Define *contents* for each branch. There are 6 types of specifications: +- [AllInstanceNodes](./specifications/AllInstanceNodes.md) +- [AllRelatedInstanceNodes](./specifications/AllRelatedInstanceNodes.md) +- [RelatedInstanceNodes](./specifications/RelatedInstanceNodes.md) +- [InstanceNodesOfSpecificClasses](./specifications/InstanceNodesOfSpecificClasses.md) +- [CustomQueryInstanceNodes](./specifications/CustomQueryInstanceNodes.md) +- [CustomNode](./specifications/CustomNode.md) + +Multiple specifications can contribute to the same branch by specifying multiple +specifications in a single rule or specifying multiple rules that match the same +parent node. + +**Note:** grouping and sorting is done at specification level which +means nodes generated from different specifications do not get grouped and sorted together. + +## Grouping + +There's an additional hierarchy-related rule used for advanced grouping: +- [GroupingRule](./rules/GroupingRule.md) diff --git a/docs/presentation/learning/hierarchies/index.md b/docs/presentation/learning/hierarchies/index.md index 471a773..c8fd736 100644 --- a/docs/presentation/learning/hierarchies/index.md +++ b/docs/presentation/learning/hierarchies/index.md @@ -1,5 +1,6 @@ -# Hierarchies - -Table of Contents: -- [ECExpressions](./ECExpressions.md) -- [Terminology](./Terminology.md) +# Hierarchies + +Table of Contents: +- [Rules](./Rules.md) +- [ECExpressions](./ECExpressions.md) +- [Terminology](./Terminology.md) diff --git a/docs/presentation/learning/hierarchies/rules/ChildNodeRule.md b/docs/presentation/learning/hierarchies/rules/ChildNodeRule.md new file mode 100644 index 0000000..4e112d4 --- /dev/null +++ b/docs/presentation/learning/hierarchies/rules/ChildNodeRule.md @@ -0,0 +1,30 @@ +# ChildNodeRule + +Child node rules are used to define child nodes. Generally, `priority`, `condition`, `onlyIfNotHandled` and `stopFurtherProcessing` attributes are used to determine where (under +which parent node) the branch is placed. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Placement attributes* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`stopFurtherProcessing` | No | `boolean` | `false` | Stop processing rules that have lower priority. Used in cases when recursion suppression is needed. **Note:** If this flag is set, `specifications` and `subConditions` are not processed. +*Branch content attributes* | +`specifications` | No | [`ChildNodeSpecification[]`](../Rules.md#specifications) | `[]` | Specifications that define what content the rule returns. +`customizationRules` | No | [`CustomizationRule[]`](../../customization/Rules.md) | `[]` | Customization rules that are applied for the content returned by this rule. +`subConditions` | No | `SubCondition[]` | `[]` | Specifies child node rules which are only used when specific condition is satisfied + +## Example + +```JSON +{ + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"Model\", \"BisCore\")", + "priority": 999, + "stopFurtherProcessing": true, + "specifications": [] +} +``` diff --git a/docs/presentation/learning/hierarchies/rules/GroupingRule.md b/docs/presentation/learning/hierarchies/rules/GroupingRule.md new file mode 100644 index 0000000..d13cc38 --- /dev/null +++ b/docs/presentation/learning/hierarchies/rules/GroupingRule.md @@ -0,0 +1,100 @@ +# Grouping Customization Rule + +Grouping rules provide advanced ways to group instances when creating hierarchies. + +It allows to define these types of groupings: +- Group by base class. +- Group by any property of the instance by a common value or a range of values. +- Group multiple instances with the same label in to one ECInstance node. This can be used in cases when these instances represent the same object for the user. + +The rule works in conjunction with other grouping options available in [navigation specifications](..//specifications/AllInstanceNodes.md): `groupByClass` and `groupByLabel`. The grouping hierarchy looks like this: +- Base ECClass grouping node (specified by [base class grouping specification](#base-class-grouping)) + - ECClass grouping node (specified by `groupByClass` property) + - ECProperty grouping node 1 (specified by 1st [property grouping specification](#property-grouping)) + - ECProperty grouping node 2 (specified by 2nd [property grouping specification](#property-grouping)) + - ECProperty grouping node n (specified by n-th [property grouping specification](#property-grouping)) + - Display label grouping node (specified by `groupByLabel` property) + - ECInstance nodes (may be grouped under a single node by [same label instance grouping specification](#same-label-instance-grouping)) + +The rule itself works in a similar way as hierarchy rules - *rule* identifies *what* to group and it has *specifications* which tell *how* +to do that. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Filtering* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`condition` | No | [ECExpression](..//ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +`class` | Yes | `SingleSchemaClassSpecification` | | Specification of ECClass which should be grouped using this rule. +*Grouping* | +`groups` | Yes | `GroupingSpecification[]` | | Specifications of grouping which should be applied to matching ECInstances. + +## Grouping Specifications + +There are 3 types of supported grouping: [base class grouping](#base-class-grouping), [property grouping](#property-grouping) and [same label instance grouping](#same-label-instance-grouping). + +### Base Class Grouping + +Base class grouping allows grouping ECInstance nodes by their base class. + +#### Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +`createGroupForSingleItem` | No | `boolean` | `false` | Should the grouping node be created if there is only one item in that group. +`baseClass` | No | `SingleSchemaClassSpecification` | Rule's `class` | Specification of the base ECClass to group by. + +### Property Grouping + +Property grouping allows grouping by property of the instance by a value or by ranges of values. + +#### Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +`createGroupForSingleItem` | No | `boolean` | `false` | Should the grouping node be created if there is only one item in that group. +`createGroupForUnspecifiedValues` | No | `boolean` | `true` | Should a separate grouping node be created for nodes whose grouping value is not set. +`propertyName` | Yes | `string` | | Name of the ECProperty which is used for grouping. +`imageId` | No | `string` | `""` | ID of an image to use for the grouping node. +`groupingValue` | No | `"PropertyValue" | "DisplayLabel"` | `"DisplayLabel"` | Should the instances be grouped on display label or the grouping property value. **Note:** Grouping by property value is required if the display label is overridden to display grouped instances count. **Warning:** Grouping by label and sorting by property value is not possible. +`sortingValue` | No | `"PropertyValue" | "DisplayLabel"` | `"DisplayLabel"` | Should the nodes be sorted by display label or the grouping property value. In most cases the result is the same, unless [[LabelOverride]] rule is used to change the display label. **Note:** Sorting by property value only makes sense when instances are grouped by property value as well. **Warning:** Grouping by label and sorting by property value is not possible. +`ranges` | No | [`PropertyRangeGroupSpecification[]`](#propertyrangegroupspecification-attributes) | `[]` | Ranges into which the grouping values are divided. Instances are grouped by value if no ranges are specified. + +#### PropertyRangeGroupSpecification Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +`imageId` | No | `string` | `imageId` of the [property group specification](#property-grouping) | ID of an image to use for the grouping node. +`label` | No | `string` | `"{from value} - {to value}"` | Grouping node label. May be [localized](../../Localization.md). +`fromValue` | Yes | `string` | | Value that defines the range start (inclusive) +`toValue` | Yes | `string` | | Value that defines the range end (inclusive) + +### Same Label Instance Grouping + +Allows grouping multiple instances with the same label into one ECInstance node. +It can be used in cases when these instances represent the same object for the user. + +When multiple instances are grouped, an ECInstance node is created instead of a +grouping node and the ECInstance key for the node is assigned to key of one of grouped +instances. + +The rule does not have any attributes - it's applied to all nodes which match grouping rule's criteria. + +## Example + +```JSON +{ + "ruleType": "Grouping", + "priority": 999, + "class": { "schemaName": "MySchema", "className": "MyClass" }, + "groups": [{ + "specType": "Property", + "propertyName": "MyProperty", + "imageId": "MyImage", + "createGroupForSingleItem": true, + "createGroupForUnspecifiedValues": false + }] +} +``` diff --git a/docs/presentation/learning/hierarchies/rules/RootNodeRule.md b/docs/presentation/learning/hierarchies/rules/RootNodeRule.md new file mode 100644 index 0000000..5a7a32b --- /dev/null +++ b/docs/presentation/learning/hierarchies/rules/RootNodeRule.md @@ -0,0 +1,31 @@ +# RootNodeRule + +Root node rules are used to define nodes that are displayed at the root hierarchy level. + +## Attributes + +Name | Required? | Type | Default | Meaning +-|-|-|-|- +*Placement attributes* | +`priority` | No | `number` | `1000` | Defines the order in which presentation rules are evaluated. +`condition` | No | [ECExpression](../ECExpressions.md#rule-condition) |`""` | Defines a condition for the rule, which needs to be met in order to execute it. +`onlyIfNotHandled` | No | `boolean` | `false` | Should this rule be ignored if there is already an existing rule with a higher priority. +`stopFurtherProcessing` | No | `boolean` | `false` | Stop processing rules that have lower priority. Used in cases when recursion suppression is needed. **Note:** If this flag is set, `specifications` and `subConditions` are not processed. +*Branch content attributes* | +`autoExpand` | No | `boolean` | `false` | Automatically expand nodes created by this rule. +`specifications` | No | `ChildNodeSpecification[]` | `[]` | Specifications that define what content the rule returns. +`customizationRules` | No | `CustomizationRule[]` | `[]` | Customization rules that are applied for the content returned by this rule. +`subConditions` | No | `SubCondition[]` | `[]` | Specifies child node rules which are only used when specific condition is satisfied + +## Example + +```JSON +{ + "ruleType": "RootNodes", + "priority": 999, + "stopFurtherProcessing": true, + "autoExpand": true, + "specifications": [], + "customizationRules": [] +} +``` diff --git a/docs/presentation/learning/hierarchies/specifications/AllInstanceNodes.md b/docs/presentation/learning/hierarchies/specifications/AllInstanceNodes.md new file mode 100644 index 0000000..4de5f68 --- /dev/null +++ b/docs/presentation/learning/hierarchies/specifications/AllInstanceNodes.md @@ -0,0 +1,36 @@ +# AllInstanceNodes + +Returns nodes for all instances in the imodel filtered only by the +`supportedSchemas` attribute. + +## Attributes + +Name | Required? | Type | Default | Meaning | Performance Notes +-|-|-|-|-|- +*Filtering* | +`supportedSchemas` | No | `SchemasSpecification` | `supportedSchemas` attribute of the ruleset | Schemas whose instances should be returned +`hideNodesInHierarchy` | No | `boolean` | `false` | Hide nodes provided by this specification and directly show their children. | Expensive +`hideIfNoChildren` | No | `boolean` | `false` | Hide nodes if they don't have children. | Expensive +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications used to create nodes for specific branch. +`doNotSort` | No | `boolean` | `false` | Suppress default sorting of nodes returned by this specification. | Improves +*Grouping* | +`groupByClass` | No | `boolean` | `true` | Group instances by ECClass +`groupByLabel` | No | `boolean` | `true` | Group instances by label | Expensive +*Misc.* | +`hasChildren` | No | `"Always" | "Never" | "Unknown"` | `"Unknown"` | Tells the rules engine that nodes produced using this specification always or never have children. | Improves +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in nodes' creation. +`nestedRules` | No | `ChildNodeRule[]` | `[]` | Specifications of [nested child node rules](../Terminology.md#nested-rules). + +## Example + +```JSON +{ + "specType": "AllInstanceNodes", + "groupByClass": true, + "groupByLabel": false, + "supportedSchemas": { + "schemaNames": ["BisCore", "MyDomain"] + } +} +``` diff --git a/docs/presentation/learning/hierarchies/specifications/AllRelatedInstanceNodes.md b/docs/presentation/learning/hierarchies/specifications/AllRelatedInstanceNodes.md new file mode 100644 index 0000000..210f3da --- /dev/null +++ b/docs/presentation/learning/hierarchies/specifications/AllRelatedInstanceNodes.md @@ -0,0 +1,44 @@ +# AllRelatedInstanceNodes + +Returns nodes for all instances related to parent instance node. + +**Precondition:** can be used only if parent node is ECInstance node. +If there is no immediate parent instance node, the rules engine walks +up the hierarchy until it finds one. If that fails, this specification +has no effect. + +## Attributes + +Name | Required? | Type | Default | Meaning | Performance Notes +-|-|-|-|-|- +*Filtering* | +`supportedSchemas` | No | `SchemasSpecification` | `supportedSchemas` attribute of the ruleset | Schemas whose instances should be returned +`requiredDirection` | No | `"Forward" | "Backward" | "Both"` | `"Both"` | Relationship directions that's following when walking from the parent instance. +`skipRelatedLevel` | No | `number` | `0` | [Skips defined level of related items](../Terminology.md#skip-related-level) and shows next level related items. +`hideNodesInHierarchy` | No | `boolean` | `false` | Hide nodes provided by this specification and directly show their children. | Expensive +`hideIfNoChildren` | No | `boolean` | `false` | Hide nodes if they don't have children. | Expensive +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications used to create nodes for specific branch. +`doNotSort` | No | `boolean` | `false` | Suppress default sorting of nodes returned by this specification. | Improves +*Grouping* | +`groupByClass` | No | `boolean` | `true` | Group instances by ECClass +`groupByLabel` | No | `boolean` | `true` | Group instances by label | Expensive +*Misc.* | +`hasChildren` | No | `"Always" | "Never" | "Unknown"` | `"Unknown"` | Tells the rules engine that nodes produced using this specification always or never have children. | Improves +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in nodes' creation. +`nestedRules` | No | `ChildNodeRule[]` | `[]` | Specifications of [nested child node rules](../Terminology.md#nested-rules). + +## Example + +```JSON +{ + "specType": "AllRelatedInstanceNodes", + "groupByClass": true, + "groupByLabel": false, + "supportedSchemas": { + "schemaNames": ["BisCore", "MyDomain"] + }, + "requiredDirection": "Forward", + "skipRelatedLevel": 1 +} +``` diff --git a/docs/presentation/learning/hierarchies/specifications/CustomNode.md b/docs/presentation/learning/hierarchies/specifications/CustomNode.md new file mode 100644 index 0000000..6e5b502 --- /dev/null +++ b/docs/presentation/learning/hierarchies/specifications/CustomNode.md @@ -0,0 +1,29 @@ +# CustomNode + +Returns a custom-defined node that's not based on an ECInstance. + +## Attributes + +Name | Required? | Type | Default | Meaning | Performance Notes +-|-|-|-|-|- +*Node values* | +`type` | Yes | `string` | | Type of the node. +`label` | Yes | `string` | | Label of the node. May be [localized](../Localization.md). +`description` | No | `string` | `""` | Description of the node. May be [localized](../Localization.md). +`imageId` | No | `string` | `""` | Id of the image to use for this custom node. +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications used to create nodes for specific branch. +*Misc.* | +`nestedRules` | No | `ChildNodeRule[]` | `[]` | Specifications of [nested child node rules](../Terminology.md#nested-rules). + +## Example + +```JSON +{ + "specType": "CustomNode", + "type": "T_NodeA", + "label": "@MyApp:Label_NodeA@", + "description": "@MyApp:Description_NodeA@", + "priority": 2000 +} +``` diff --git a/docs/presentation/learning/hierarchies/specifications/CustomQueryInstanceNodes.md b/docs/presentation/learning/hierarchies/specifications/CustomQueryInstanceNodes.md new file mode 100644 index 0000000..d1cb46c --- /dev/null +++ b/docs/presentation/learning/hierarchies/specifications/CustomQueryInstanceNodes.md @@ -0,0 +1,84 @@ +# CustomQueryInstanceNodes + +Returns nodes for instances which are returned by an ECSQL query. + +## Attributes + +Name | Required? | Type | Default | Meaning | Performance Notes +-|-|-|-|-|- +*Filtering* | +`queries` | No | [`QuerySpecification[]`](#query-specifications) | `[]` | Specifications of queries used to create the content. +`hideNodesInHierarchy` | No | `boolean` | `false` | Hide nodes provided by this specification and directly show their children. | Expensive +`hideIfNoChildren` | No | `boolean` | `false` | Hide nodes if they don't have children. | Expensive +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications used to create nodes for specific branch. +`doNotSort` | No | `boolean` | `false` | Suppress default sorting of nodes returned by this specification. | Improves +*Grouping* | +`groupByClass` | No | `boolean` | `true` | Group instances by ECClass +`groupByLabel` | No | `boolean` | `true` | Group instances by label | Expensive +*Misc.* | +`hasChildren` | No | `"Always" | "Never" | "Unknown"` | `"Unknown"` | Tells the rules engine that nodes produced using this specification always or never have children. | Improves +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in nodes' creation. +`nestedRules` | No | [`ChildNodeRule[]`](../rules/ChildNodeRule.md) | `[]` | Specifications of [nested child node rules](../Terminology.md#nested-rules). + +## Query Specifications + +Query specifications define the actual results of the `CustomQueryInstanceNodes` specification. There are 2 types of supported query specifications: [string](#string) +and [ECProperty value](#ecpropertyvalue). + +The queries used in the specifications **must** return `ECClassId` and `ECInstanceId` columns, e.g.: +```SQL +SELECT ECClassId, ECInstanceId + FROM [bis].[Element] e + WHERE e.ParentId = 10 +``` + +**Note:** sorting and grouping happens after results of multiple query specifications are +aggregated. + +### String + +The specification contains an ECSQL query which is used to query for instances. + +#### Attributes + +Name | Required? | Type | Meaning +-|-|-|- +`class` | Yes | `SingleSchemaClassSpecification` | Specification of ECClass whose instances the query returns. +`query` | Yes | `string` | Specifies the search ECSQL query. + +### ECPropertyValue + +The specification specifies the name of the parent node instance property whose +value is the ECSQL used to query for instances. + +**Precondition:** can be used only if parent node is ECInstance node. +If there is no immediate parent instance node, the rules engine walks +up the hierarchy until it finds one. If that fails, this specification +has no effect. + +#### Attributes + +Name | Required? | Type | Meaning +-|-|-|- +`class` | Yes | `SingleSchemaClassSpecification` | Specification of ECClass whose instances the query returns. +`parentPropertyName` | Yes | `string` | Specifies name of the parent instance property whose value contains the ECSQL query. **Warning:** the property whose name is specified must be of string type. + +## Example + +```JSON +{ + "specType": "CustomQueryInstanceNodes", + "groupByClass": false, + "groupByLabel": false, + "queries": [{ + "specType": "String", + "class": {"schemaName": "BisCore", "className": "Element"}, + "query": "SELECT ECClassId, ECInstanceId FROM [bis].[Element] e WHERE e.ParentId = 10" + }, { + "specType": "ECPropertyValue", + "class": {"schemaName": "BisCore", "className": "GeometricElement3d"}, + "parentPropertyName": "ChildrenQuery" + }] +} +``` diff --git a/docs/presentation/learning/hierarchies/specifications/InstanceNodesOfSpecificClasses.md b/docs/presentation/learning/hierarchies/specifications/InstanceNodesOfSpecificClasses.md new file mode 100644 index 0000000..3d1f11f --- /dev/null +++ b/docs/presentation/learning/hierarchies/specifications/InstanceNodesOfSpecificClasses.md @@ -0,0 +1,39 @@ +# InstanceNodesOfSpecificClasses + +Returns nodes for instances of specific ECClasses. + +## Attributes + +Name | Required? | Type | Default | Meaning | Performance Notes +-|-|-|-|-|- +*Filtering* | +`classes` | Yes | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | Classes whose instances should be used. +`arePolymorphic` | No | `boolean` | `false` | Should all `classes` be handled polymorphically. +`instanceFilter` | No | [ECExpression](../ECExpressions.md#instance-filter) | `""` | Condition for filtering instances +`hideNodesInHierarchy` | No | `boolean` | `false` | Hide nodes provided by this specification and directly show their children. | Expensive +`hideIfNoChildren` | No | `boolean` | `false` | Hide nodes if they don't have children. | Expensive +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications used to create nodes for specific branch. +`doNotSort` | No | `boolean` | `false` | Suppress default sorting of nodes returned by this specification. | Improves +*Grouping* | +`groupByClass` | No | `boolean` | `true` | Group instances by ECClass +`groupByLabel` | No | `boolean` | `true` | Group instances by label | Expensive +*Misc.* | +`hasChildren` | No | `"Always" | "Never" | "Unknown"` | `"Unknown"` | Tells the rules engine that nodes produced using this specification always or never have children. | Improves +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in nodes' creation. +`nestedRules` | No | `ChildNodeRule[]` | `[]` | Specifications of [nested child node rules](../Terminology.md#nested-rules). + +## Example + +```JSON +{ + "specType": "InstanceNodesOfSpecificClasses", + "groupByClass": false, + "groupByLabel": false, + "classes": { + "schemaName": "BisCore", + "classNames": ["GeometricElement2d", "GeometricElement3d"] + }, + "arePolymorphic": true +} +``` diff --git a/docs/presentation/learning/hierarchies/specifications/RelatedInstanceNodes.md b/docs/presentation/learning/hierarchies/specifications/RelatedInstanceNodes.md new file mode 100644 index 0000000..24aff5a --- /dev/null +++ b/docs/presentation/learning/hierarchies/specifications/RelatedInstanceNodes.md @@ -0,0 +1,51 @@ +# RelatedInstanceNodes + +Returns nodes for instances related to parent instance node. + +**Precondition:** can be used only if parent node is ECInstance node. +If there is no immediate parent instance node, the rules engine walks +up the hierarchy until it finds one. If that fails, this specification +has no effect. + +## Attributes + +Name | Required? | Type | Default | Meaning | Performance Notes +-|-|-|-|-|- +*Filtering* | +`relationships` | No | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | Relationships that should be followed when looking for related instances. +`relatedClasses` | No | `MultiSchemaClassesSpecification | MultiSchemaClassesSpecification[]` | `[]` | Related classes whose instances should be used. +`supportedSchemas` | No | `string[]` | `supportedSchemas` attribute of the ruleset | Schemas used to look up relationships and classes when `relationships` or `relatedClasses` attributes are not specified. +`requiredDirection` | No | `"Forward" | "Backward" | "Both"` | `"Both"` | Relationship directions that's following when walking from the parent instance. +`skipRelatedLevel` | No | `number` | `0` | [Skips defined level of related items](../Terminology.md#skip-related-level) and shows next level related items. +`instanceFilter` | No | [ECExpression](../ECExpressions.md#instance-filter) | `""` | Condition for filtering instances +`hideNodesInHierarchy` | No | `boolean` | `false` | Hide nodes provided by this specification and directly show their children. | Expensive +`hideIfNoChildren` | No | `boolean` | `false` | Hide nodes if they don't have children. | Expensive +*Ordering* | +`priority` | No | `number` | `1000` | Changes the order of specifications used to create nodes for specific branch. +`doNotSort` | No | `boolean` | `false` | Suppress default sorting of nodes returned by this specification. | Improves +*Grouping* | +`groupByClass` | No | `boolean` | `true` | Group instances by ECClass +`groupByLabel` | No | `boolean` | `true` | Group instances by label | Expensive +*Misc.* | +`hasChildren` | No | `"Always" | "Never" | "Unknown"` | `"Unknown"` | Tells the rules engine that nodes produced using this specification always or never have children. | Improves +`relatedInstances` | No | `RelatedInstanceSpecification[]` | `[]` | Specifications of [related instances](../../RelatedInstanceSpecification.md) that can be used in nodes' creation. +`nestedRules` | No | `ChildNodeRule[]` | `[]` | Specifications of [nested child node rules](../Terminology.md#nested-rules). + +## Example + +```JSON +{ + "specType": "RelatedInstanceNodes", + "groupByClass": false, + "groupByLabel": false, + "relationships": { + "schemaName": "BisCore", + "classNames": ["ModelContainsElements"] + }, + "requiredDirection": "Forward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": ["Element"] + } +} +``` diff --git a/docs/presentation/learning/leftNav.md b/docs/presentation/learning/leftNav.md index 68310a5..986c0f6 100644 --- a/docs/presentation/learning/leftNav.md +++ b/docs/presentation/learning/leftNav.md @@ -1,33 +1,39 @@ -### [Content](./content/index.md) -- [ECExpressions](./content/ECExpressions.md) -- [Terminology](./content/Terminology.md) - ---- -  - -### [Hierarchies](./hierarchies/index.md) -- [ECExpressions](./hierarchies/ECExpressions.md) -- [Terminology](./hierarchies/Terminology.md) - ---- -  - -### [Customization](./customization/index.md) -- [ECExpressions](./customization/ECExpressions.md) - ---- -  - -### [Unified Selection](./unified-selection/index.md) -- [Content Components](./unified-selection/ContentComponents.md) -- [Terminology](./unified-selection/Terminology.md) - ---- -  - -- [ECExpressions](./ECExpressions.md) -- [Localization](./Localization.md) -- [Ruleset Variables](./RulesetVariables.md) -- [Ruleset Supplementation](./RulesetSupplementation.md) -- [Performance Tips](./Performance.md) -- [Testing](./Testing.md) +### [Content](./content/index.md) +- [Rules](./content/Rules.md) +- [ECExpressions](./content/ECExpressions.md) +- [Terminology](./content/Terminology.md) +- [Examples](./content/Examples.md) + +--- +  + +### [Hierarchies](./hierarchies/index.md) +- [Rules](./hierarchies/Rules.md) +- [ECExpressions](./hierarchies/ECExpressions.md) +- [Terminology](./hierarchies/Terminology.md) +- [Examples](./hierarchies/Examples.md) + +--- +  + +### [Customization](./customization/index.md) +- [Rules](./customization/Rules.md) +- [ECExpressions](./customization/ECExpressions.md) +- [Examples](./customization/Examples.md) + +--- +  + +### [Unified Selection](./unified-selection/index.md) +- [Content Components](./unified-selection/ContentComponents.md) +- [Terminology](./unified-selection/Terminology.md) + +--- +  + +- [ECExpressions](./ECExpressions.md) +- [Localization](./Localization.md) +- [Ruleset Variables](./RulesetVariables.md) +- [Ruleset Supplementation](./RulesetSupplementation.md) +- [Performance Tips](./Performance.md) +- [Testing](./Testing.md) diff --git a/example-code/app/package.json b/example-code/app/package.json index 4a74d4b..b05247e 100644 --- a/example-code/app/package.json +++ b/example-code/app/package.json @@ -18,13 +18,13 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/logger-config": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/logger-config": "0.190.0", "body-parser": "^1.18.2", "chai": "^4.1.2", "commander": "^2.14.1", @@ -40,8 +40,8 @@ "webpack": "^4.20.2" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", "@types/body-parser": "^1.17.0", "@types/chai": "^4.1.4", "@types/express": "^4.16.1", diff --git a/example-code/snippets/package.json b/example-code/snippets/package.json index ac3f7fc..4bd03c6 100644 --- a/example-code/snippets/package.json +++ b/example-code/snippets/package.json @@ -16,13 +16,13 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", "body-parser": "^1.18.2", "chai": "^4.1.2", "commander": "^2.14.1", @@ -38,8 +38,8 @@ "webpack": "^4.20.2" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", "@types/body-parser": "^1.17.0", "@types/chai": "^4.1.4", "@types/express": "^4.16.1", diff --git a/integration-tests/core/.nycrc b/integration-tests/core/.nycrc new file mode 100644 index 0000000..990e380 --- /dev/null +++ b/integration-tests/core/.nycrc @@ -0,0 +1,25 @@ +{ + "include": [ + "core/backend/src/**/*", + "core/backend/lib/**/*", + "core/frontend/src/**/*", + "core/frontend/lib/**/*" + ], + "exclude": [ + "**/*.d.ts", + "**/*.d.tsx" + ], + "extension": [ + ".ts", + ".tsx" + ], + "temp-directory": "./integration-tests/core/coverage/.nyc_output", + "report-dir": "./integration-tests/core/coverage/", + "reporter": [ + "text-summary", + "lcov", + "cobertura" + ], + "cache": false, + "cwd": "../.." +} \ No newline at end of file diff --git a/integration-tests/core/README.md b/integration-tests/core/README.md new file mode 100644 index 0000000..1346738 --- /dev/null +++ b/integration-tests/core/README.md @@ -0,0 +1,5 @@ +# iModel.js Core Integration Tests +This package contains tests of standard iModel.js RPC interfaces. +Every test in this directory should test frontend APIs with an actual backend. + +These test run in both electron and chrome, and should only include one test RPC interface. \ No newline at end of file diff --git a/integration-tests/core/certa.json b/integration-tests/core/certa.json new file mode 100644 index 0000000..d6b31fc --- /dev/null +++ b/integration-tests/core/certa.json @@ -0,0 +1,16 @@ +{ + // Comments are allowed here! + "testBundle": "./lib/dist/bundled-tests.js", + "instrumentedTestBundle": "./lib/dist/bundled-tests.instrumented.js", + "backendInitModule": "./lib/backend/backend.js", + "ports": { + "debugging": 5858, + "frontend": 3010, + "frontendDebugging": 9223 + }, + "chromeOptions": { + "args": [ + "--disable-web-security" + ] + } +} \ No newline at end of file diff --git a/integration-tests/core/package.json b/integration-tests/core/package.json new file mode 100644 index 0000000..999f76a --- /dev/null +++ b/integration-tests/core/package.json @@ -0,0 +1,54 @@ +{ + "name": "core-integration-tests", + "//private": "NOTE: this is a private package that is never published", + "private": true, + "license": "MIT", + "scripts": { + "build": "tsc 1>&2 && npm run webpack:frontend && node ./node_modules/@bentley/build-tools/scripts/ignoreargs.js 1>&2", + "clean": "rimraf lib package-deps.json coverage", + "cover": "npm run test:chrome -- --cover", + "docs": "", + "lint": "tslint --project . 1>&2", + "webpack:frontend": "webpack --config webpack.config.js 1>&2", + "test": "npm run test:chrome", + "test:chrome": "npm run test-integration:chrome -- --invert", + "test:electron": "npm run test-integration:electron -- --invert", + "test-integration": "npm run test-integration:chrome && npm run test-integration:electron", + "test-integration:chrome": "node ./node_modules/@bentley/certa/bin/certa.js -r chrome --grep \"#integration\"", + "test-integration:electron": "node ./node_modules/@bentley/certa/bin/certa.js -r electron --grep \"#integration\"" + }, + "repository": {}, + "dependencies": { + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "chai": "^4.1.2", + "electron": "^4.0.1", + "express": "^4.16.3" + }, + "devDependencies": { + "@bentley/certa": "0.190.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@types/chai": "^4.1.4", + "@types/express": "^4.16.1", + "@types/mocha": "^5.2.5", + "@types/node": "10.12.18", + "@types/webpack": "^3.8.5", + "chai": "^4.1.2", + "cpx": "^1.5.0", + "glob": "^7.1.2", + "istanbul-instrumenter-loader": "^3.0.1", + "null-loader": "^0.1.1", + "rimraf": "^2.6.2", + "source-map-loader": "^0.2.3", + "tslint": "^5.11.0", + "typescript": "~3.2.2", + "nyc": "^13.0.1", + "webpack": "^4.20.2" + } +} diff --git a/integration-tests/core/src/backend/RpcImpl.ts b/integration-tests/core/src/backend/RpcImpl.ts new file mode 100644 index 0000000..1eb1382 --- /dev/null +++ b/integration-tests/core/src/backend/RpcImpl.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { ActivityLoggingContext } from "@bentley/bentleyjs-core"; +import { RpcInterface, RpcManager, IModelToken } from "@bentley/imodeljs-common"; +import { TestRpcInterface } from "../common/RpcInterfaces"; +import { AccessToken } from "@bentley/imodeljs-clients"; +import { IModelDb, ChangeSummaryExtractOptions, ChangeSummaryManager, BriefcaseManager, IModelJsFs, IModelHost } from "@bentley/imodeljs-backend"; + +export class TestRpcImpl extends RpcInterface implements TestRpcInterface { + public static register() { + RpcManager.registerImpl(TestRpcInterface, TestRpcImpl); + } + + public async restartIModelHost(): Promise { + IModelHost.shutdown(); + IModelHost.startup(); + } + + public async extractChangeSummaries(accessToken: AccessToken, iModelToken: IModelToken, options: any): Promise { + const activityContext = ActivityLoggingContext.current; activityContext.enter(); + await ChangeSummaryManager.extractChangeSummaries(activityContext, accessToken, IModelDb.find(iModelToken), options as ChangeSummaryExtractOptions); + } + + public async deleteChangeCache(iModelToken: IModelToken): Promise { + const activityContext = ActivityLoggingContext.current; activityContext.enter(); + if (!iModelToken.iModelId) + throw new Error("iModelToken is invalid. Must not be a standalone iModel"); + + const changesPath: string = BriefcaseManager.getChangeCachePathName(iModelToken.iModelId); + if (IModelJsFs.existsSync(changesPath)) + IModelJsFs.unlinkSync(changesPath); + } + + public async executeTest(iModelToken: IModelToken, testName: string, params: any): Promise { + return JSON.parse(IModelDb.find(iModelToken).nativeDb.executeTest(testName, JSON.stringify(params))); + } +} + +TestRpcImpl.register(); diff --git a/integration-tests/core/src/backend/backend.ts b/integration-tests/core/src/backend/backend.ts new file mode 100644 index 0000000..4f15cc8 --- /dev/null +++ b/integration-tests/core/src/backend/backend.ts @@ -0,0 +1,43 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { Logger, LogLevel } from "@bentley/bentleyjs-core"; +import { IModelJsConfig } from "@bentley/config-loader/lib/IModelJsConfig"; +import { IModelHost, IModelJsExpressServer, IModelHostConfiguration } from "@bentley/imodeljs-backend"; +import { Config } from "@bentley/imodeljs-clients"; +import { BentleyCloudRpcManager, ElectronRpcConfiguration, ElectronRpcManager, RpcConfiguration } from "@bentley/imodeljs-common"; +import * as express from "express"; +import { rpcInterfaces } from "../common/RpcInterfaces"; +import "./RpcImpl"; + +IModelJsConfig.init(true, true, Config.App); +RpcConfiguration.developmentMode = true; + +// Start the backend +const hostConfig = new IModelHostConfiguration(); +hostConfig.useTileContentThreadPool = true; +IModelHost.startup(hostConfig); + +Logger.initializeToConsole(); +Logger.setLevel("imodeljs-backend.IModelReadRpcImpl", LogLevel.Error); // Change to trace to debug +Logger.setLevel("imodeljs-backend.IModelDb", LogLevel.Error); // Change to trace to debug +Logger.setLevel("Performance", LogLevel.Error); // Change to Info to capture + +async function init() { + if (ElectronRpcConfiguration.isElectron) { + ElectronRpcManager.initializeImpl({}, rpcInterfaces); + } else { + const rpcConfig = BentleyCloudRpcManager.initializeImpl({ info: { title: "integration-test", version: "v1.0" } }, rpcInterfaces); + + // create a basic express web server + const port = Number(process.env.CERTA_PORT || 3011) + 2000; + const app = express(); + const server = new IModelJsExpressServer(app, rpcConfig.protocol); + await server.initialize(port); + // tslint:disable-next-line:no-console + console.log("Web backend for integration-tests listening on port " + port); + } +} + +module.exports = init(); diff --git a/integration-tests/core/src/common/RpcInterfaces.ts b/integration-tests/core/src/common/RpcInterfaces.ts new file mode 100644 index 0000000..8db92c4 --- /dev/null +++ b/integration-tests/core/src/common/RpcInterfaces.ts @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { AccessToken } from "@bentley/imodeljs-clients"; +import { + IModelReadRpcInterface, IModelTileRpcInterface, IModelToken, + IModelWriteRpcInterface, RpcInterface, RpcManager, StandaloneIModelRpcInterface, WipRpcInterface, +} from "@bentley/imodeljs-common"; + +export abstract class TestRpcInterface extends RpcInterface { + public static version = "1.1.1"; + + public static types = () => [ + IModelToken, + AccessToken, + ] + + public static getClient(): TestRpcInterface { + return RpcManager.getClientForInterface(TestRpcInterface); + } + + public async restartIModelHost(): Promise { + return this.forward(arguments); + } + + public async extractChangeSummaries(_accessToken: AccessToken, _iModelToken: IModelToken, _options: any): Promise { + return this.forward(arguments); + } + + public async deleteChangeCache(_iModelToken: IModelToken): Promise { + return this.forward(arguments); + } + + public async executeTest(_iModelToken: IModelToken, _testName: string, _params: any): Promise { + return this.forward(arguments); + } +} + +export const rpcInterfaces = [ + IModelReadRpcInterface, + IModelTileRpcInterface, + IModelWriteRpcInterface, + StandaloneIModelRpcInterface, + TestRpcInterface, + WipRpcInterface, +]; diff --git a/integration-tests/core/src/frontend/FakeDisplayParams.ts b/integration-tests/core/src/frontend/FakeDisplayParams.ts new file mode 100644 index 0000000..f644bde --- /dev/null +++ b/integration-tests/core/src/frontend/FakeDisplayParams.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { ColorDef } from "@bentley/imodeljs-common"; +import { DisplayParams } from "@bentley/imodeljs-frontend/lib/rendering"; + +export class FakeDisplayParams extends DisplayParams { + public constructor() { super(DisplayParams.Type.Linear, new ColorDef(), new ColorDef()); } +} diff --git a/test-apps/testbed/frontend/TestViewport.ts b/integration-tests/core/src/frontend/TestViewport.ts similarity index 97% rename from test-apps/testbed/frontend/TestViewport.ts rename to integration-tests/core/src/frontend/TestViewport.ts index 136278f..f99be26 100644 --- a/test-apps/testbed/frontend/TestViewport.ts +++ b/integration-tests/core/src/frontend/TestViewport.ts @@ -1,319 +1,319 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import { expect } from "chai"; -import { Id64String, SortedArray } from "@bentley/bentleyjs-core"; -import { Pixel } from "@bentley/imodeljs-frontend/lib/rendering"; -import { - IModelConnection, - Viewport, - ScreenViewport, - OffScreenViewport, - ViewRect, - IModelApp, -} from "@bentley/imodeljs-frontend"; -import { Feature, GeometryClass } from "@bentley/imodeljs-common"; -import { WebGLTestContext } from "./WebGLTestContext"; - -function compareFeatures(lhs?: Feature, rhs?: Feature): number { - if (undefined === lhs && undefined === rhs) - return 0; - else if (undefined === lhs) - return -1; - else if (undefined === rhs) - return 1; - else - return lhs.compare(rhs); -} - -export function comparePixelData(lhs: Pixel.Data, rhs: Pixel.Data): number { - let diff = lhs.distanceFraction - rhs.distanceFraction; - if (0 === diff) { - diff = lhs.type - rhs.type; - if (0 === diff) { - diff = lhs.planarity - rhs.planarity; - if (0 === diff) { - diff = compareFeatures(lhs.feature, rhs.feature); - } - } - } - - return diff; -} - -export class PixelDataSet extends SortedArray { - public constructor() { - super((lhs: Pixel.Data, rhs: Pixel.Data) => comparePixelData(lhs, rhs)); - } - - public get array(): Pixel.Data[] { return this._array; } - - public containsFeature(elemId?: Id64String, subcatId?: Id64String, geomClass?: GeometryClass) { - return this.containsWhere((pxl) => - (undefined === elemId || pxl.elementId === elemId) && - (undefined === subcatId || pxl.subCategoryId === subcatId) && - (undefined === geomClass || pxl.geometryClass === geomClass)); - } - public containsElement(id: Id64String) { return this.containsWhere((pxl) => pxl.elementId === id); } - public containsPlanarity(planarity: Pixel.Planarity) { return this.containsWhere((pxl) => pxl.planarity === planarity); } - public containsGeometryType(type: Pixel.GeometryType) { return this.containsWhere((pxl) => pxl.type === type); } - public containsGeometry(type: Pixel.GeometryType, planarity: Pixel.Planarity) { return this.containsWhere((pxl) => pxl.type === type && pxl.planarity === planarity); } - public containsWhere(criterion: (pxl: Pixel.Data) => boolean) { - for (const pixel of this.array) - if (criterion(pixel)) - return true; - - return false; - } -} - -export class Color { - public readonly v: number; - public readonly r: number; - public readonly g: number; - public readonly b: number; - public readonly a: number; - - // val is uint32 repr as AABBGGRR - public constructor(val: number) { - this.v = val; - - // ">>> 0" required to force unsigned because javascript is a brilliantly-designed language. - this.r = ((val & 0x000000ff) >>> 0x00) >>> 0; - this.g = ((val & 0x0000ff00) >>> 0x08) >>> 0; - this.b = ((val & 0x00ff0000) >>> 0x10) >>> 0; - this.a = ((val & 0xff000000) >>> 0x18) >>> 0; - } - - public static from(val: number) { return new Color(val); } - public static fromRgba(r: number, g: number, b: number, a: number) { - const v = (r | (g << 0x08) | (b << 0x10) | (a << 0x18)) >>> 0; - return Color.from(v); - } - - public compare(rhs: Color): number { - return this.v - rhs.v; - } -} - -export class ColorSet extends SortedArray { - public constructor() { super((lhs: Color, rhs: Color) => lhs.compare(rhs)); } - - public get array(): Color[] { return this._array; } -} - - // Read depth, geometry type, and feature for each pixel. Return only the unique ones. -function readUniquePixelData(vp: Viewport, readRect?: ViewRect, excludeNonLocatable = false): PixelDataSet { - const rect = undefined !== readRect ? readRect : vp.viewRect; - const set = new PixelDataSet(); - vp.readPixels(rect, Pixel.Selector.All, (pixels: Pixel.Buffer | undefined) => { - if (undefined === pixels) - return; - - for (let x = rect.left; x < rect.right; x++) - for (let y = rect.top; y < rect.bottom; y++) - set.insert(pixels.getPixel(x, y)); - }, excludeNonLocatable); - - return set; -} - - // Read colors for each pixel; return the unique ones. -function readUniqueColors(vp: Viewport, readRect?: ViewRect): ColorSet { - const rect = undefined !== readRect ? readRect : vp.viewRect; - const buffer = vp.readImage(rect)!; - expect(buffer).not.to.be.undefined; - const u32 = new Uint32Array(buffer.data.buffer); - const colors = new ColorSet(); - for (const rgba of u32) - colors.insert(Color.from(rgba)); - - return colors; -} - -function readPixel(vp: Viewport, x: number, y: number, excludeNonLocatable = false): Pixel.Data { - let pixel = new Pixel.Data(); - vp.readPixels(new ViewRect(x, y, x + 1, y + 1), Pixel.Selector.All, (pixels: Pixel.Buffer | undefined) => { - if (undefined !== pixels) - pixel = pixels.getPixel(x, y); - }, excludeNonLocatable); - - return pixel; -} - -function readColor(vp: Viewport, x: number, y: number): Color { - const colors = readUniqueColors(vp, new ViewRect(x, y, x + 1, y + 1)); - expect(colors.length).to.equal(1); - return colors.array[0]; -} - -function areAllTilesLoaded(vp: Viewport): boolean { - return vp.view.areAllTileTreesLoaded && vp.numRequestedTiles === 0; -} - -// Utility functions added to Viewport by TestViewport. -export interface TestableViewport { - // Block until all tiles appropriate for rendering the current view have been loaded. - waitForAllTilesToRender(): Promise; - // Asynchronously draw one frame. In the case of an on-screen viewport, this blocks until the next tick of the ViewManager's render loop. - drawFrame(): Promise; - // Read pixel data within rectangular region and return unique pixels. - readUniquePixelData(readRect?: ViewRect, excludeNonLocatable?: boolean): PixelDataSet; - // Read pixel colors within rectangular region and return unique colors. - readUniqueColors(readRect?: ViewRect): ColorSet; - // Return the data associated with the pixel at (x, y). - readPixel(x: number, y: number): Pixel.Data; - // Return the color of the pixel at (x, y). - readColor(x: number, y: number): Color; - // True if all tiles appropriate for rendering the current view have been loaded. - areAllTilesLoaded: boolean; -} - -class OffScreenTestViewport extends OffScreenViewport implements TestableViewport { - public readUniquePixelData(readRect?: ViewRect, excludeNonLocatable = false): PixelDataSet { return readUniquePixelData(this, readRect, excludeNonLocatable); } - public readUniqueColors(readRect?: ViewRect): ColorSet { return readUniqueColors(this, readRect); } - public readPixel(x: number, y: number): Pixel.Data { return readPixel(this, x, y); } - public readColor(x: number, y: number): Color { return readColor(this, x, y); } - public get areAllTilesLoaded(): boolean { return areAllTilesLoaded(this); } - - public async waitForAllTilesToRender(): Promise { - this.renderFrame(); - - // NB: ToolAdmin loop is not turned on, and this vieport is not tracked by ViewManager - must manually pump tile request scheduler. - IModelApp.tileAdmin.process(); - - if (this.areAllTilesLoaded) - return Promise.resolve(); - - await new Promise((resolve: any) => setTimeout(resolve, 100)); - - // This viewport isn't added to ViewManager, so it won't be notified (and have its scene invalidated) when new tiles become loaded. - this.sync.invalidateScene(); - return this.waitForAllTilesToRender(); - } - - public static async createTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { - const view = await imodel.views.load(viewId); - const rect = new ViewRect(0, 0, width, height); - const vp = this.create(view, rect) as OffScreenTestViewport; - expect(vp).instanceof(OffScreenTestViewport); - return vp; - } - - public async drawFrame(): Promise { - this.renderFrame(); - return Promise.resolve(); - } -} - -class ScreenTestViewport extends ScreenViewport implements TestableViewport { - private _frameRendered: boolean = false; - - public readUniquePixelData(readRect?: ViewRect, excludeNonLocatable = false): PixelDataSet { return readUniquePixelData(this, readRect, excludeNonLocatable); } - public readUniqueColors(readRect?: ViewRect): ColorSet { return readUniqueColors(this, readRect); } - public readPixel(x: number, y: number): Pixel.Data { return readPixel(this, x, y); } - public readColor(x: number, y: number): Color { return readColor(this, x, y); } - public get areAllTilesLoaded(): boolean { return areAllTilesLoaded(this); } - - private async waitForRenderFrame(): Promise { - if (this._frameRendered) { - this._frameRendered = false; - return Promise.resolve(); - } - - this.onRender.addOnce((_) => { this._frameRendered = true; }); - await new Promise((resolve: any) => requestAnimationFrame(resolve)); - return this.waitForRenderFrame(); - } - - public async waitForAllTilesToRender(): Promise { - // NB: This viewport is registered with ViewManager, so render loop and tile request scheduler are pumping. - await this.drawFrame(); - if (this.areAllTilesLoaded) - return Promise.resolve(); - - await this.waitForRenderFrame(); - return this.waitForAllTilesToRender(); - } - - public async drawFrame(): Promise { - // Let the render loop tick - expect renderFrame() to be invoked based on state of SyncFlags. - return this.waitForRenderFrame(); - } - - public dispose(): void { - IModelApp.viewManager.dropViewport(this, false); // do not allow dropViewport() to call dispose()... - super.dispose(); - document.body.removeChild(this.parentDiv); - } - - public static async createTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { - const div = document.createElement("div")! as HTMLDivElement; - div.style.width = width + "px"; - div.style.height = height + "px"; - - // Ensure viewport is exact specified dimensions - not fit to containing document. - div.style.position = "absolute"; - div.style.top = div.style.left = "0px"; - - document.body.appendChild(div); - - const view = await imodel.views.load(viewId); - - // NB: Don't allow ACS triad etc to interfere with tests... - view.viewFlags.acsTriad = view.viewFlags.grid = false; - - const vp = this.create(div, view) as ScreenTestViewport; - expect(vp).instanceof(ScreenTestViewport); - IModelApp.viewManager.addViewport(vp); - return vp; - } -} - -// Represents an on-screen or off-screen viewport. -export type TestViewport = Viewport & TestableViewport; - -// Create an off-screen viewport for tests. -export async function createOffScreenTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { - return OffScreenTestViewport.createTestViewport(viewId, imodel, width, height); -} - -// Create an on-screen viewport for tests. The viewort is added to the ViewManager on construction, and dropped on disposal. -export async function createOnScreenTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { - return ScreenTestViewport.createTestViewport(viewId, imodel, width, height); -} - -export async function testOnScreenViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number, test: (vp: TestViewport) => Promise): Promise { - if (!WebGLTestContext.isInitialized) - return Promise.resolve(); - - // ###TODO: Make ScreenTestViewport integrate properly with the (non-continuous) render loop... - const onscreen = await createOnScreenTestViewport(viewId, imodel, width, height); - onscreen.continuousRendering = true; - try { - await test(onscreen); - } finally { - onscreen.continuousRendering = false; - onscreen.dispose(); - } - - return Promise.resolve(); -} - -// Execute a test against both an off-screen and on-screen viewport. -export async function testViewports(viewId: Id64String, imodel: IModelConnection, width: number, height: number, test: (vp: TestViewport) => Promise): Promise { - if (!WebGLTestContext.isInitialized) - return Promise.resolve(); - - await testOnScreenViewport(viewId, imodel, width, height, test); - - const offscreen = await createOffScreenTestViewport(viewId, imodel, width, height); - try { - await test(offscreen); - } finally { - offscreen.dispose(); - } - - return Promise.resolve(); -} +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { expect } from "chai"; +import { Id64String, SortedArray } from "@bentley/bentleyjs-core"; +import { Pixel } from "@bentley/imodeljs-frontend/lib/rendering"; +import { + IModelConnection, + Viewport, + ScreenViewport, + OffScreenViewport, + ViewRect, + IModelApp, +} from "@bentley/imodeljs-frontend"; +import { Feature, GeometryClass } from "@bentley/imodeljs-common"; +import { WebGLTestContext } from "./WebGLTestContext"; + +function compareFeatures(lhs?: Feature, rhs?: Feature): number { + if (undefined === lhs && undefined === rhs) + return 0; + else if (undefined === lhs) + return -1; + else if (undefined === rhs) + return 1; + else + return lhs.compare(rhs); +} + +export function comparePixelData(lhs: Pixel.Data, rhs: Pixel.Data): number { + let diff = lhs.distanceFraction - rhs.distanceFraction; + if (0 === diff) { + diff = lhs.type - rhs.type; + if (0 === diff) { + diff = lhs.planarity - rhs.planarity; + if (0 === diff) { + diff = compareFeatures(lhs.feature, rhs.feature); + } + } + } + + return diff; +} + +export class PixelDataSet extends SortedArray { + public constructor() { + super((lhs: Pixel.Data, rhs: Pixel.Data) => comparePixelData(lhs, rhs)); + } + + public get array(): Pixel.Data[] { return this._array; } + + public containsFeature(elemId?: Id64String, subcatId?: Id64String, geomClass?: GeometryClass) { + return this.containsWhere((pxl) => + (undefined === elemId || pxl.elementId === elemId) && + (undefined === subcatId || pxl.subCategoryId === subcatId) && + (undefined === geomClass || pxl.geometryClass === geomClass)); + } + public containsElement(id: Id64String) { return this.containsWhere((pxl) => pxl.elementId === id); } + public containsPlanarity(planarity: Pixel.Planarity) { return this.containsWhere((pxl) => pxl.planarity === planarity); } + public containsGeometryType(type: Pixel.GeometryType) { return this.containsWhere((pxl) => pxl.type === type); } + public containsGeometry(type: Pixel.GeometryType, planarity: Pixel.Planarity) { return this.containsWhere((pxl) => pxl.type === type && pxl.planarity === planarity); } + public containsWhere(criterion: (pxl: Pixel.Data) => boolean) { + for (const pixel of this.array) + if (criterion(pixel)) + return true; + + return false; + } +} + +export class Color { + public readonly v: number; + public readonly r: number; + public readonly g: number; + public readonly b: number; + public readonly a: number; + + // val is uint32 repr as AABBGGRR + public constructor(val: number) { + this.v = val; + + // ">>> 0" required to force unsigned because javascript is a brilliantly-designed language. + this.r = ((val & 0x000000ff) >>> 0x00) >>> 0; + this.g = ((val & 0x0000ff00) >>> 0x08) >>> 0; + this.b = ((val & 0x00ff0000) >>> 0x10) >>> 0; + this.a = ((val & 0xff000000) >>> 0x18) >>> 0; + } + + public static from(val: number) { return new Color(val); } + public static fromRgba(r: number, g: number, b: number, a: number) { + const v = (r | (g << 0x08) | (b << 0x10) | (a << 0x18)) >>> 0; + return Color.from(v); + } + + public compare(rhs: Color): number { + return this.v - rhs.v; + } +} + +export class ColorSet extends SortedArray { + public constructor() { super((lhs: Color, rhs: Color) => lhs.compare(rhs)); } + + public get array(): Color[] { return this._array; } +} + + // Read depth, geometry type, and feature for each pixel. Return only the unique ones. +function readUniquePixelData(vp: Viewport, readRect?: ViewRect, excludeNonLocatable = false): PixelDataSet { + const rect = undefined !== readRect ? readRect : vp.viewRect; + const set = new PixelDataSet(); + vp.readPixels(rect, Pixel.Selector.All, (pixels: Pixel.Buffer | undefined) => { + if (undefined === pixels) + return; + + for (let x = rect.left; x < rect.right; x++) + for (let y = rect.top; y < rect.bottom; y++) + set.insert(pixels.getPixel(x, y)); + }, excludeNonLocatable); + + return set; +} + + // Read colors for each pixel; return the unique ones. +function readUniqueColors(vp: Viewport, readRect?: ViewRect): ColorSet { + const rect = undefined !== readRect ? readRect : vp.viewRect; + const buffer = vp.readImage(rect)!; + expect(buffer).not.to.be.undefined; + const u32 = new Uint32Array(buffer.data.buffer); + const colors = new ColorSet(); + for (const rgba of u32) + colors.insert(Color.from(rgba)); + + return colors; +} + +function readPixel(vp: Viewport, x: number, y: number, excludeNonLocatable = false): Pixel.Data { + let pixel = new Pixel.Data(); + vp.readPixels(new ViewRect(x, y, x + 1, y + 1), Pixel.Selector.All, (pixels: Pixel.Buffer | undefined) => { + if (undefined !== pixels) + pixel = pixels.getPixel(x, y); + }, excludeNonLocatable); + + return pixel; +} + +function readColor(vp: Viewport, x: number, y: number): Color { + const colors = readUniqueColors(vp, new ViewRect(x, y, x + 1, y + 1)); + expect(colors.length).to.equal(1); + return colors.array[0]; +} + +function areAllTilesLoaded(vp: Viewport): boolean { + return vp.view.areAllTileTreesLoaded && vp.numRequestedTiles === 0; +} + +// Utility functions added to Viewport by TestViewport. +export interface TestableViewport { + // Block until all tiles appropriate for rendering the current view have been loaded. + waitForAllTilesToRender(): Promise; + // Asynchronously draw one frame. In the case of an on-screen viewport, this blocks until the next tick of the ViewManager's render loop. + drawFrame(): Promise; + // Read pixel data within rectangular region and return unique pixels. + readUniquePixelData(readRect?: ViewRect, excludeNonLocatable?: boolean): PixelDataSet; + // Read pixel colors within rectangular region and return unique colors. + readUniqueColors(readRect?: ViewRect): ColorSet; + // Return the data associated with the pixel at (x, y). + readPixel(x: number, y: number): Pixel.Data; + // Return the color of the pixel at (x, y). + readColor(x: number, y: number): Color; + // True if all tiles appropriate for rendering the current view have been loaded. + areAllTilesLoaded: boolean; +} + +class OffScreenTestViewport extends OffScreenViewport implements TestableViewport { + public readUniquePixelData(readRect?: ViewRect, excludeNonLocatable = false): PixelDataSet { return readUniquePixelData(this, readRect, excludeNonLocatable); } + public readUniqueColors(readRect?: ViewRect): ColorSet { return readUniqueColors(this, readRect); } + public readPixel(x: number, y: number): Pixel.Data { return readPixel(this, x, y); } + public readColor(x: number, y: number): Color { return readColor(this, x, y); } + public get areAllTilesLoaded(): boolean { return areAllTilesLoaded(this); } + + public async waitForAllTilesToRender(): Promise { + this.renderFrame(); + + // NB: ToolAdmin loop is not turned on, and this vieport is not tracked by ViewManager - must manually pump tile request scheduler. + IModelApp.tileAdmin.process(); + + if (this.areAllTilesLoaded) + return Promise.resolve(); + + await new Promise((resolve: any) => setTimeout(resolve, 100)); + + // This viewport isn't added to ViewManager, so it won't be notified (and have its scene invalidated) when new tiles become loaded. + this.sync.invalidateScene(); + return this.waitForAllTilesToRender(); + } + + public static async createTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { + const view = await imodel.views.load(viewId); + const rect = new ViewRect(0, 0, width, height); + const vp = this.create(view, rect) as OffScreenTestViewport; + expect(vp).instanceof(OffScreenTestViewport); + return vp; + } + + public async drawFrame(): Promise { + this.renderFrame(); + return Promise.resolve(); + } +} + +class ScreenTestViewport extends ScreenViewport implements TestableViewport { + private _frameRendered: boolean = false; + + public readUniquePixelData(readRect?: ViewRect, excludeNonLocatable = false): PixelDataSet { return readUniquePixelData(this, readRect, excludeNonLocatable); } + public readUniqueColors(readRect?: ViewRect): ColorSet { return readUniqueColors(this, readRect); } + public readPixel(x: number, y: number): Pixel.Data { return readPixel(this, x, y); } + public readColor(x: number, y: number): Color { return readColor(this, x, y); } + public get areAllTilesLoaded(): boolean { return areAllTilesLoaded(this); } + + private async waitForRenderFrame(): Promise { + if (this._frameRendered) { + this._frameRendered = false; + return Promise.resolve(); + } + + this.onRender.addOnce((_) => { this._frameRendered = true; }); + await new Promise((resolve: any) => requestAnimationFrame(resolve)); + return this.waitForRenderFrame(); + } + + public async waitForAllTilesToRender(): Promise { + // NB: This viewport is registered with ViewManager, so render loop and tile request scheduler are pumping. + await this.drawFrame(); + if (this.areAllTilesLoaded) + return Promise.resolve(); + + await this.waitForRenderFrame(); + return this.waitForAllTilesToRender(); + } + + public async drawFrame(): Promise { + // Let the render loop tick - expect renderFrame() to be invoked based on state of SyncFlags. + return this.waitForRenderFrame(); + } + + public dispose(): void { + IModelApp.viewManager.dropViewport(this, false); // do not allow dropViewport() to call dispose()... + super.dispose(); + document.body.removeChild(this.parentDiv); + } + + public static async createTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { + const div = document.createElement("div")! as HTMLDivElement; + div.style.width = width + "px"; + div.style.height = height + "px"; + + // Ensure viewport is exact specified dimensions - not fit to containing document. + div.style.position = "absolute"; + div.style.top = div.style.left = "0px"; + + document.body.appendChild(div); + + const view = await imodel.views.load(viewId); + + // NB: Don't allow ACS triad etc to interfere with tests... + view.viewFlags.acsTriad = view.viewFlags.grid = false; + + const vp = this.create(div, view) as ScreenTestViewport; + expect(vp).instanceof(ScreenTestViewport); + IModelApp.viewManager.addViewport(vp); + return vp; + } +} + +// Represents an on-screen or off-screen viewport. +export type TestViewport = Viewport & TestableViewport; + +// Create an off-screen viewport for tests. +export async function createOffScreenTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { + return OffScreenTestViewport.createTestViewport(viewId, imodel, width, height); +} + +// Create an on-screen viewport for tests. The viewort is added to the ViewManager on construction, and dropped on disposal. +export async function createOnScreenTestViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number): Promise { + return ScreenTestViewport.createTestViewport(viewId, imodel, width, height); +} + +export async function testOnScreenViewport(viewId: Id64String, imodel: IModelConnection, width: number, height: number, test: (vp: TestViewport) => Promise): Promise { + if (!WebGLTestContext.isInitialized) + return Promise.resolve(); + + // ###TODO: Make ScreenTestViewport integrate properly with the (non-continuous) render loop... + const onscreen = await createOnScreenTestViewport(viewId, imodel, width, height); + onscreen.continuousRendering = true; + try { + await test(onscreen); + } finally { + onscreen.continuousRendering = false; + onscreen.dispose(); + } + + return Promise.resolve(); +} + +// Execute a test against both an off-screen and on-screen viewport. +export async function testViewports(viewId: Id64String, imodel: IModelConnection, width: number, height: number, test: (vp: TestViewport) => Promise): Promise { + if (!WebGLTestContext.isInitialized) + return Promise.resolve(); + + await testOnScreenViewport(viewId, imodel, width, height, test); + + const offscreen = await createOffScreenTestViewport(viewId, imodel, width, height); + try { + await test(offscreen); + } finally { + offscreen.dispose(); + } + + return Promise.resolve(); +} diff --git a/test-apps/testbed/frontend/WebGLTestContext.ts b/integration-tests/core/src/frontend/WebGLTestContext.ts similarity index 100% rename from test-apps/testbed/frontend/WebGLTestContext.ts rename to integration-tests/core/src/frontend/WebGLTestContext.ts diff --git a/integration-tests/core/src/frontend/_Setup.test.ts b/integration-tests/core/src/frontend/_Setup.test.ts new file mode 100644 index 0000000..605ebbd --- /dev/null +++ b/integration-tests/core/src/frontend/_Setup.test.ts @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +// Testing order of initialization for imodeljs-frontend and imodeljs-common +import * as frontend from "@bentley/imodeljs-frontend"; +frontend; + +import { OpenMode } from "@bentley/bentleyjs-core"; +import { BentleyCloudRpcManager, ElectronRpcConfiguration, ElectronRpcManager, IModelToken, RpcOperation } from "@bentley/imodeljs-common"; +import { rpcInterfaces } from "../common/RpcInterfaces"; +import { assert } from "chai"; + +if (ElectronRpcConfiguration.isElectron) { + ElectronRpcManager.initializeClient({}, rpcInterfaces); +} else { + const config = BentleyCloudRpcManager.initializeClient({ info: { title: "integration-test", version: "v1.0" } }, rpcInterfaces); + config.protocol.pathPrefix = `http://${window.location.hostname}:${Number(window.location.port) + 2000}`; + + for (const definition of rpcInterfaces) { + RpcOperation.forEach(definition, (operation) => operation.policy.token = (_request) => new IModelToken("test", "test", "test", "test", OpenMode.Readonly)); + } + + // This is a web-only test + describe("Web Test Fixture", () => { + it("Backend server should be accessible", async () => { + const req = new XMLHttpRequest(); + req.open("GET", `${config.protocol.pathPrefix}/v3/swagger.json`); + const loaded = new Promise((resolve) => req.addEventListener("load", resolve)); + req.send(); + await loaded; + assert.equal(200, req.status); + const desc = JSON.parse(req.responseText); + assert.equal(desc.info.title, "integration-test"); + assert.equal(desc.info.version, "v1.0"); + }); + }); +} diff --git a/test-apps/testbed/frontend/ChangeSummary.test.ts b/integration-tests/core/src/frontend/hub/ChangeSummary.test.ts similarity index 93% rename from test-apps/testbed/frontend/ChangeSummary.test.ts rename to integration-tests/core/src/frontend/hub/ChangeSummary.test.ts index 6c3aeef..243d293 100644 --- a/test-apps/testbed/frontend/ChangeSummary.test.ts +++ b/integration-tests/core/src/frontend/hub/ChangeSummary.test.ts @@ -6,7 +6,7 @@ import { assert } from "chai"; import { OpenMode, Logger, LogLevel } from "@bentley/bentleyjs-core"; import { AccessToken } from "@bentley/imodeljs-clients"; import { TestData } from "./TestData"; -import { TestRpcInterface } from "../common/TestRpcInterface"; +import { TestRpcInterface } from "../../common/RpcInterfaces"; import { IModelConnection, MockRender } from "@bentley/imodeljs-frontend"; async function executeQuery(iModel: IModelConnection, ecsql: string, bindings?: any[] | object): Promise { @@ -54,7 +54,8 @@ describe("ChangeSummary (#integration)", () => { assert.equal(changeSetRows[0].cnt, 0); }).timeout(99999); - it("Change cache file generation during change summary extraction", async () => { + // FIXME: This test has apparently been failing for a while now... + it.skip("Change cache file generation during change summary extraction", async () => { assert.exists(iModel); // for now, imodel must be open readwrite for changesummary extraction await iModel.close(accessToken); diff --git a/test-apps/testbed/frontend/Disposable.test.ts b/integration-tests/core/src/frontend/hub/Disposable.test.ts similarity index 98% rename from test-apps/testbed/frontend/Disposable.test.ts rename to integration-tests/core/src/frontend/hub/Disposable.test.ts index ea634f8..fb6b0c1 100644 --- a/test-apps/testbed/frontend/Disposable.test.ts +++ b/integration-tests/core/src/frontend/hub/Disposable.test.ts @@ -3,10 +3,9 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { expect, assert } from "chai"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "../WebGLTestContext"; import { IModelApp, IModelConnection, ScreenViewport } from "@bentley/imodeljs-frontend"; import { ColorDef, ImageBuffer, ImageBufferFormat, RenderTexture, QPoint3dList, QParams3d, ColorByName } from "@bentley/imodeljs-common"; -import { CONSTANTS } from "../common/Testbed"; import * as path from "path"; import { MeshArgs, GraphicType, Decorations, GraphicList } from "@bentley/imodeljs-frontend/lib/rendering"; import { OnScreenTarget, Target, Batch, WorldDecorations, TextureHandle } from "@bentley/imodeljs-frontend/lib/webgl"; @@ -18,7 +17,7 @@ import { TestData } from "./TestData"; /* tslint:disable:no-console */ -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); let viewDiv: HTMLDivElement; let imodel0: IModelConnection; let imodel1: IModelConnection; @@ -211,7 +210,7 @@ describe("Disposal of WebGL Resources (#integration)", () => { const reader = IModelTileIO.Reader.create(stream, model.iModel, model.id, model.is3d, system); expect(reader).not.to.be.undefined; const readerRes = await reader!.read(); - const tileGraphic = readerRes.renderGraphic!; + const tileGraphic = readerRes.graphic!; assert.isDefined(tileGraphic); // Pre-disposal diff --git a/test-apps/testbed/frontend/IModelConnection.test.ts b/integration-tests/core/src/frontend/hub/IModelConnection.test.ts similarity index 98% rename from test-apps/testbed/frontend/IModelConnection.test.ts rename to integration-tests/core/src/frontend/hub/IModelConnection.test.ts index 32ed95d..e3c75ec 100644 --- a/test-apps/testbed/frontend/IModelConnection.test.ts +++ b/integration-tests/core/src/frontend/hub/IModelConnection.test.ts @@ -11,8 +11,7 @@ import { DrawingViewState, OrthographicViewState, ViewState, IModelConnection, ModelSelectorState, DisplayStyle3dState, DisplayStyle2dState, CategorySelectorState, MockRender, } from "@bentley/imodeljs-frontend"; -import { TestbedConfig } from "../common/TestbedConfig"; -import { CONSTANTS } from "../common/Testbed"; +import { TestRpcInterface } from "../../common/RpcInterfaces"; async function executeQuery(iModel: IModelConnection, ecsql: string, bindings?: any[] | object): Promise { const rows: any[] = []; @@ -112,7 +111,7 @@ describe("IModelConnection (#integration)", () => { assert.isAtLeast(queryElementIds.size, 1); // Restart Backend!!! - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.RESTART_BACKEND, value: undefined })); + await TestRpcInterface.getClient().restartIModelHost(); elementProps = await iModel.elements.getProps(iModel.elements.rootSubjectId); assert.equal(elementProps.length, 1); diff --git a/test-apps/testbed/frontend/TestData.ts b/integration-tests/core/src/frontend/hub/TestData.ts similarity index 100% rename from test-apps/testbed/frontend/TestData.ts rename to integration-tests/core/src/frontend/hub/TestData.ts diff --git a/test-apps/testbed/frontend/TileIO.data.1.1.ts b/integration-tests/core/src/frontend/hub/TileIO.data.1.1.ts similarity index 99% rename from test-apps/testbed/frontend/TileIO.data.1.1.ts rename to integration-tests/core/src/frontend/hub/TileIO.data.1.1.ts index db8730f..65d549d 100644 --- a/test-apps/testbed/frontend/TileIO.data.1.1.ts +++ b/integration-tests/core/src/frontend/hub/TileIO.data.1.1.ts @@ -1,1871 +1,1871 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; - -// Binary tile data produced using version 1.1 of the tile format. -export const TILE_DATA_1_1 = { - versionMajor: 1, - versionMinor: 1, - headerLength: 84, - rectangle: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, 0x41, - 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x39, 0xb4, - 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, - 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x0a, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0x60, 0x0a, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x34, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, - 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x35, 0x32, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, - 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x39, 0x36, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, - 0x32, 0x34, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, - 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, - 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, - 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, - 0x31, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, - 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, - 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, - 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, - 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, - 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, - 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, - 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, - 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, - 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x36, 0x33, - 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x35, - 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x32, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, - 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, - 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, - 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x36, 0x2c, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x31, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, - 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, - 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, - 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, - 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, - 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, - 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, - 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, - 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, - 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, - 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, - 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0xf0, 0x41, 0xfd, 0xff, 0x0b, 0x42, 0x00, 0x00, 0xf0, 0x41, - 0x00, 0x00, 0xf0, 0x41, 0xfd, 0xff, 0x0b, 0x42, 0xfd, 0xff, 0x0b, 0x42, 0xfd, 0xff, 0x0b, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xfd, - 0xff, 0x0b, 0x42, 0xfd, 0xff, 0x0b, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf2, 0xff, - 0x47, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xf2, 0xff, 0x47, - 0x42, 0xeb, 0xff, 0x6f, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xeb, 0xff, 0x6f, 0x42, 0xeb, 0xff, 0x6f, 0x42, - ]), - }, - - lineString: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, 0x62, - 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x55, 0x0e, - 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, - 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0x8c, 0x0c, - 0x00, 0x00, 0xf0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, - 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, - 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, - 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, - 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, - 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, - 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, - 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, - 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, - 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, - 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, - 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, - 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, - 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, - 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, - 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, - 0x36, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, - 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, - 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, - 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, - 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, - 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, - 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, - 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, - 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x03, 0x00, 0xf8, - 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, - 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, - 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, - 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, - 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, - 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, - 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, - 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, - 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, - 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, - 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, - 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, - 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, - 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, - 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, - 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xe5, - 0xff, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x00, 0x00, - 0x00, 0x00, 0xe5, 0xff, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, - 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, - 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, - 0x71, 0xf9, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, 0x41, 0xe5, 0xff, - 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, - 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, - 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x94, - 0xb8, 0x24, 0x42, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x85, 0x71, - 0xf9, 0x41, 0x94, 0xb8, 0x24, 0x42, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, - 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, - 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, - 0x29, 0x7e, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0x94, 0xb8, - 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, - 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, - 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, - 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, - 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xd1, 0x29, 0x7e, - 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, - 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, - 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, - 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, - ]), - }, - - lineStrings: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, 0x62, - 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x55, 0x0e, - 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, - 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x1e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, - 0x00, 0x68, 0x1e, 0x00, 0x00, 0xbc, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, - 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x34, 0x31, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x32, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, - 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, - 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x32, 0x34, 0x7d, 0x2c, 0x22, - 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, - 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x31, 0x39, 0x32, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, - 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x32, 0x35, 0x30, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, - 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, - 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, - 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, - 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, - 0x39, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, - 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x31, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, - 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, - 0x32, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, - 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, - 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, - 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, - 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, - 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, - 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, - 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, - 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, - 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, - 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, - 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, 0x22, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, - 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, - 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, - 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, - 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, - 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, - 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, - 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, - 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, - 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, - 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, - 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, - 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, - 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, - 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, - 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, - 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, - 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, - 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, - 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, - 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, - 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, - 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, - 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, - 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, - 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, - 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, - 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, - 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, - 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, - 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, - 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, - 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, - 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, - 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, - 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, - 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, - 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, - 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, - 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, - 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, - 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, - 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x25, - 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, - 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, - 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, - 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, - 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, - 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, - 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, - 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, - 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, - 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, - 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, - 0x6d, 0x15, 0x93, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, - 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, - 0x7e, 0x42, 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, - 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, - 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, - 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, - 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, - 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, - 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, - 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, - 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, - 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, - 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, - 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, - 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, - 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, - 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, - 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, - 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, - 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, - 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, - 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, - 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, - 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, - 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, - 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, - 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, - 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, - 0x0c, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, - 0x08, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, - 0x00, 0x00, 0x39, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, - 0x00, 0x06, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, - 0x0c, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, - 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, 0x09, - 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, 0x0a, 0x00, - 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, - 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0f, - 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x90, 0x09, - 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, - 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, - 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, - 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, - 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, - 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, - 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, - 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, - 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, - 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, - 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, - 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, - 0x42, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, - 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, - 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, - 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, - 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, - 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, - 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, - 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, - 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, - 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, - 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, - 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, - 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xfe, 0x9f, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0xa5, - 0xfe, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, - 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, - 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, - 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, - 0x70, 0xf9, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0xa5, 0xfe, - 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, - 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x53, 0xb7, 0x24, 0x42, - 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x45, 0x70, 0xf9, 0x41, 0x53, - 0xb7, 0x24, 0x42, 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, - 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, - 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, - 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, - 0x28, 0x7e, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x53, 0xb7, - 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, - 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, - 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, - 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, - 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, - 0x42, 0x02, 0x28, 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, - 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, - 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, - ]), - }, - - triangles: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, 0x62, - 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x55, 0x0e, - 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, - 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x19, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0x24, 0x19, 0x00, 0x00, 0xb8, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, - 0x31, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x31, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x32, 0x34, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, - 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x32, 0x34, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, - 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, - 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x38, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x38, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x39, - 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, - 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, - 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x38, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x32, 0x30, 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, - 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, - 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, - 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, - 0x31, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, - 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, - 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x66, 0x69, 0x6c, - 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, - 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, - 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, - 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, - 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, - 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, - 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, - 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, - 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, - 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, - 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, - 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, - 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, - 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, - 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, - 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, - 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, - 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, - 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, - 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x2c, - 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, - 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, - 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, - 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, - 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, - 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, - 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, - 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, - 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, - 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, - 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, - 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, - 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, - 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, - 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, - 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, - 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, - 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, - 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, - 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, - 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, - 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, - 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, - 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, - 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, - 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, - 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, - 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, 0x03, - 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, - 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, - 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, - 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, - 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x56, 0x71, - 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0xea, 0x70, 0x3d, - 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xea, 0x70, 0x3d, 0x42, - 0xbe, 0x70, 0x51, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xbe, 0x70, 0x51, 0x42, 0xbe, 0x70, 0x51, 0x42, 0x56, - 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, - 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, - 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x15, 0x71, 0x51, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, - 0x15, 0x71, 0x51, 0x42, 0x15, 0x71, 0x51, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x56, - 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x7c, 0xb8, - 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x15, 0x71, 0x51, - 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x15, 0x71, 0x51, 0x42, 0x15, 0x71, 0x51, 0x42, 0xa7, 0xaa, 0x03, 0x00, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, - 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, - 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, - 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, - 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, - 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, - 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, - 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, - 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, - 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, - 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, - 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, - 0x1e, 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, - 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, - 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, - 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, - 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, - 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0x56, - 0x71, 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x81, 0x71, - 0x3d, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x81, 0x71, 0x3d, - 0x42, 0x56, 0x71, 0x51, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x56, 0x71, 0x51, 0x42, 0x56, 0x71, 0x51, 0x42, - 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0xcc, - 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, - 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xad, 0x71, 0x51, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, - 0x42, 0xad, 0x71, 0x51, 0x42, 0xad, 0x71, 0x51, 0x42, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, - 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xcc, - 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xad, 0x71, - 0x51, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xad, 0x71, 0x51, 0x42, 0xad, 0x71, 0x51, 0x42, - ]), - }, - - cylinder: { - flags: IModelTileIO.Flags.ContainsCurves, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, 0x34, - 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, 0x8e, 0x53, - 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, 0xb1, 0xff, 0x07, - 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x45, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xd8, 0x44, - 0x00, 0x00, 0xdc, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x31, 0x33, 0x33, 0x35, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, - 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, - 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, - 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, - 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, - 0x39, 0x30, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x36, - 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, - 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x22, 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, - 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, - 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, - 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x36, 0x32, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, - 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x31, 0x30, 0x33, 0x32, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, - 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, - 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, - 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, - 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, - 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, - 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, - 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, - 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, - 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, - 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, - 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, - 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, - 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x36, - 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, - 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x36, 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, - 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, - 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, - 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x37, 0x2c, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x38, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, - 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, - 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, - 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, - 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, - 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, - 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, - 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, - 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, - 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0x01, - 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, - 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, - 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, - 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, - 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, - 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, - 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, - 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, - 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, - 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, - 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, - 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, - 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, - 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, - 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, - 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, - 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xba, 0xc5, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, - 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xa2, 0xdd, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, - 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, - 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, - 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, 0xba, 0x2d, 0x07, - 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, - 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, - 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, - 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, - 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, - 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, - 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, - 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, - 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0x38, 0x54, - 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, 0xfe, - 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, - 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, - 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, - 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, - 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, - 0x6c, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x26, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3f, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x26, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x26, 0x00, 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, - 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, - 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, - 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, - 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, - 0x00, 0x56, 0x00, 0x00, 0x58, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, - 0x00, 0x5a, 0x00, 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, - 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, 0x00, - 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, - 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, - 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, - 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, - 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x6a, 0x00, - 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6b, 0x00, - 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6e, 0x00, - 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, - 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, - 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, - 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, - 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, - 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, - 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x82, 0x00, 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, - 0x00, 0x84, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, - 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, - 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, - 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, - 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, - 0x00, 0x8e, 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, - 0x00, 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, - 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x16, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, - 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x32, 0x00, - 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, - 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, - 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, - 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, - 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x00, 0x22, - 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, - 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, - 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, - 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, - 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, - 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, - 0x1d, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, - 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, - 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, - 0x03, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, - 0x19, 0x00, 0x00, 0x03, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, 0x18, - 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, 0x18, 0x00, - 0x00, 0x01, 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, - 0x01, 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, - 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, 0x14, 0x00, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, - 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x02, - 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x11, - 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, - 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, - 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, - 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, - 0x03, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, - 0x0b, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, - 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, - 0x00, 0x01, 0x09, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, - 0x01, 0x09, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, - 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, - 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, - 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, - 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, - 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, - 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x28, 0x00, 0x00, 0x00, 0x27, - 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, - 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, - 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, - 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, - 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, 0x2c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, - 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x03, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, - 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, - 0x2e, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, - 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, - 0x03, 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, - 0x30, 0x00, 0x00, 0x03, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, 0x31, - 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, 0x33, 0x00, - 0x00, 0x01, 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, - 0x01, 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x02, - 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x00, 0x35, - 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x03, 0x37, 0x00, - 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, - 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x02, - 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x01, 0x38, - 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, - 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, 0x3b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, - 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, - 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, - 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, - 0x03, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, - 0x3e, 0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, - 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x03, 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, - 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, - 0x01, 0x42, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, - 0x43, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, 0x43, - 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, 0x45, 0x00, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, - 0x03, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x02, - 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, 0x46, - 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x01, 0x48, 0x00, - 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, - 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, - 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4c, 0x00, - 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, - 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, - 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, - 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, - 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, - 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, - 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, - 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, - 0x00, 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, - 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, 0x00, - 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, - 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, - 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, - 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, - 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, - 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x76, 0x00, - 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, - 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, - 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, - 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, - 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, - 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, - 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, - 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, - 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, - 0x00, 0x8e, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, - 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, - 0x01, 0x4b, 0x00, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, - 0x4d, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, 0x4e, - 0x00, 0x00, 0x02, 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, 0x51, 0x00, - 0x00, 0x00, 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, - 0x03, 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, - 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x01, 0x54, - 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x01, 0x57, 0x00, - 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, 0x59, 0x00, 0x00, - 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x02, - 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, 0x5a, 0x00, 0x00, 0x03, 0x5d, 0x00, 0x00, 0x00, 0x5c, - 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x02, 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, - 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, - 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x61, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, - 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x02, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, - 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, - 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, 0x64, 0x00, 0x00, 0x03, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, - 0x01, 0x67, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x02, 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, - 0x69, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, - 0x00, 0x00, 0x02, 0x6b, 0x00, 0x00, 0x01, 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, - 0x00, 0x00, 0x6c, 0x00, 0x00, 0x02, 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, - 0x03, 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, - 0x6e, 0x00, 0x00, 0x03, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0x70, - 0x00, 0x00, 0x02, 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, 0x73, 0x00, - 0x00, 0x01, 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, 0x75, 0x00, 0x00, - 0x01, 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x02, - 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, 0x79, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, 0x78, 0x00, 0x00, 0x03, 0x7b, 0x00, - 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7a, 0x00, 0x00, 0x02, 0x7a, 0x00, 0x00, - 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x02, - 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x7e, - 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, - 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, - 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, - 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x02, 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, - 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x01, 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, - 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, - 0x03, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x02, 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, - 0x8a, 0x00, 0x00, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, - 0x00, 0x00, 0x02, 0x8c, 0x00, 0x00, 0x03, 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, - 0x00, 0x01, 0x8e, 0x00, 0x00, 0x02, 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, - 0x01, 0x91, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, - 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, - 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xe4, 0x9a, - 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, - 0xa8, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, - 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, - 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, - 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, - 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, - 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, - 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, - 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, - 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, - 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, - 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, - 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, - 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, - 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, - 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, - 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, - 0x9a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, - 0x1b, 0x9a, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, - 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, - 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, - 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, - 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x35, 0x4b, 0x40, 0x40, 0x35, - 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x40, 0x40, - 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, - 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, - 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, - 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, - 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, - 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, - 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, - 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, - 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, - 0x35, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, - 0xb4, 0x35, 0xbf, 0x40, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, - 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, - 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, - 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, - 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0x00, 0x00, 0x00, 0x24, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, - 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, - 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, - 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, - 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, - 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, - 0x00, 0x33, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, - 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, - 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, - 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, - 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, - 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, - 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x1f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x2b, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, - 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2a, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, - 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2f, 0x00, - 0x00, 0x32, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00, 0x35, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, - 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x36, 0x00, - 0x00, 0x39, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3d, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x3f, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, - 0x00, 0x44, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x44, 0x00, - 0x00, 0x47, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x46, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x47, 0x00, 0x00, 0x25, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x24, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x00, 0x1e, 0x24, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x06, 0x23, 0x00, - 0x00, 0x06, 0x24, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x00, 0x1e, 0x23, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, - 0x06, 0x22, 0x00, 0x00, 0x06, 0x23, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x4e, 0x21, 0x00, 0x00, 0x1e, 0x22, 0x00, 0x00, 0x36, - 0x21, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0x1e, 0x21, - 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x36, 0x21, 0x00, 0x00, 0x4e, 0x1f, 0x00, - 0x00, 0x1e, 0x20, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, - 0x4e, 0x1e, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x36, - 0x1f, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x06, 0x1e, - 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x4e, 0x1c, 0x00, 0x00, 0x1e, 0x1d, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x06, 0x1c, 0x00, - 0x00, 0x06, 0x1d, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x4e, 0x1b, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, - 0x06, 0x1b, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x4e, 0x1a, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x36, - 0x1a, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x06, 0x1b, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x4e, 0x19, 0x00, 0x00, 0x1e, 0x1a, - 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x4e, 0x18, 0x00, - 0x00, 0x1e, 0x19, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, - 0x4e, 0x17, 0x00, 0x00, 0x1e, 0x18, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x36, - 0x18, 0x00, 0x00, 0x4e, 0x16, 0x00, 0x00, 0x1e, 0x17, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x06, 0x16, 0x00, 0x00, 0x06, 0x17, - 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x4e, 0x15, 0x00, 0x00, 0x1e, 0x16, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x06, 0x15, 0x00, - 0x00, 0x06, 0x16, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x4e, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, - 0x06, 0x14, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x00, 0x1e, 0x14, 0x00, 0x00, 0x36, - 0x13, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x00, 0x1e, 0x13, - 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0x4e, 0x11, 0x00, - 0x00, 0x1e, 0x12, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, - 0x4e, 0x10, 0x00, 0x00, 0x1e, 0x11, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x36, - 0x11, 0x00, 0x00, 0x4e, 0x0f, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x06, 0x10, - 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x4e, 0x0e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x06, 0x0e, 0x00, - 0x00, 0x06, 0x0f, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x4e, 0x0d, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, - 0x06, 0x0d, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x4e, 0x0c, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x36, - 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, 0x4e, 0x0b, 0x00, 0x00, 0x1e, 0x0c, - 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x4e, 0x0a, 0x00, - 0x00, 0x1e, 0x0b, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, - 0x4e, 0x09, 0x00, 0x00, 0x1e, 0x0a, 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x36, - 0x0a, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x09, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x09, - 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, - 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, - 0x06, 0x06, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, - 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x05, - 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x03, 0x00, - 0x00, 0x1e, 0x04, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, - 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, - 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x27, 0x00, 0x00, 0x1e, 0x25, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x06, 0x27, 0x00, - 0x00, 0x06, 0x25, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x4e, 0x28, 0x00, 0x00, 0x1e, 0x27, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, - 0x06, 0x28, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x4e, 0x29, 0x00, 0x00, 0x1e, 0x28, 0x00, 0x00, 0x36, - 0x29, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, 0x4e, 0x2a, 0x00, 0x00, 0x1e, 0x29, - 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x36, 0x29, 0x00, 0x00, 0x4e, 0x2b, 0x00, - 0x00, 0x1e, 0x2a, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, - 0x4e, 0x2c, 0x00, 0x00, 0x1e, 0x2b, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x06, 0x2c, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x36, - 0x2b, 0x00, 0x00, 0x4e, 0x2d, 0x00, 0x00, 0x1e, 0x2c, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x06, 0x2c, - 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x00, 0x1e, 0x2d, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x06, 0x2e, 0x00, - 0x00, 0x06, 0x2d, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x4e, 0x2f, 0x00, 0x00, 0x1e, 0x2e, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, - 0x06, 0x2f, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x4e, 0x30, 0x00, 0x00, 0x1e, 0x2f, 0x00, 0x00, 0x36, - 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x2f, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x4e, 0x31, 0x00, 0x00, 0x1e, 0x30, - 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x4e, 0x32, 0x00, - 0x00, 0x1e, 0x31, 0x00, 0x00, 0x36, 0x32, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, - 0x4e, 0x33, 0x00, 0x00, 0x1e, 0x32, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x36, - 0x32, 0x00, 0x00, 0x4e, 0x34, 0x00, 0x00, 0x1e, 0x33, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x06, 0x34, 0x00, 0x00, 0x06, 0x33, - 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x4e, 0x35, 0x00, 0x00, 0x1e, 0x34, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x06, 0x35, 0x00, - 0x00, 0x06, 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x4e, 0x36, 0x00, 0x00, 0x1e, 0x35, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, - 0x06, 0x36, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x4e, 0x37, 0x00, 0x00, 0x1e, 0x36, 0x00, 0x00, 0x36, - 0x37, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0x1e, 0x37, - 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x4e, 0x39, 0x00, - 0x00, 0x1e, 0x38, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, - 0x4e, 0x3a, 0x00, 0x00, 0x1e, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x36, - 0x39, 0x00, 0x00, 0x4e, 0x3b, 0x00, 0x00, 0x1e, 0x3a, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x06, 0x3b, 0x00, 0x00, 0x06, 0x3a, - 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x4e, 0x3c, 0x00, 0x00, 0x1e, 0x3b, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x06, 0x3c, 0x00, - 0x00, 0x06, 0x3b, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, - 0x06, 0x3d, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x4e, 0x3e, 0x00, 0x00, 0x1e, 0x3d, 0x00, 0x00, 0x36, - 0x3e, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, 0x4e, 0x3f, 0x00, 0x00, 0x1e, 0x3e, - 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x4e, 0x40, 0x00, - 0x00, 0x1e, 0x3f, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, - 0x4e, 0x41, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x36, - 0x40, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x00, 0x1e, 0x41, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x06, 0x41, - 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x4e, 0x43, 0x00, 0x00, 0x1e, 0x42, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x06, 0x43, 0x00, - 0x00, 0x06, 0x42, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x4e, 0x44, 0x00, 0x00, 0x1e, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, - 0x06, 0x44, 0x00, 0x00, 0x06, 0x43, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x4e, 0x45, 0x00, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x36, - 0x45, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x4e, 0x46, 0x00, 0x00, 0x1e, 0x45, - 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x4e, 0x47, 0x00, - 0x00, 0x1e, 0x46, 0x00, 0x00, 0x36, 0x47, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, - 0x4e, 0x48, 0x00, 0x00, 0x1e, 0x47, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x36, - 0x47, 0x00, 0x00, 0x4e, 0x49, 0x00, 0x00, 0x1e, 0x48, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x06, 0x48, - 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x4e, 0x25, 0x00, 0x00, 0x1e, 0x49, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x06, 0x25, 0x00, - 0x00, 0x06, 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x4e, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x8c, 0xce, 0x48, - 0x41, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, 0xf6, 0x53, 0x41, - 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x62, - 0x8a, 0x59, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, - 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, - 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, 0xb2, 0x64, 0x41, - 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x41, - 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, - 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x4d, 0xda, 0x6f, - 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, 0x02, 0x7b, 0x41, - 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0xfe, - 0x4a, 0x80, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, - 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, - 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, 0xde, 0x85, 0x41, - 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x11, 0xa9, 0x88, 0x41, 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x11, - 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, - 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0x02, 0x73, 0x8b, - 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, 0x06, 0x91, 0x41, - 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xe6, - 0xd0, 0x93, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, - 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, - 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, 0x64, 0x99, 0x41, - 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xe2, - 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, - 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xcb, 0xf8, 0x9e, - 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, 0x8c, 0xa4, 0x41, - 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xcb, - 0x56, 0xa7, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, - 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, - 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, 0xea, 0xac, 0x41, - 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xba, - 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, - 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xb0, 0x7e, 0xb2, - 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, 0x12, 0xb8, 0x41, - 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0x94, - 0xdc, 0xba, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, - 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, - 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, 0x70, 0xc0, 0x41, - 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x88, - 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, - 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x98, 0x04, 0xc6, - 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, - 0x8c, 0xce, 0x48, 0x41, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, - 0xf6, 0x53, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, - 0x53, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, - 0x41, 0x62, 0x8a, 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, - 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, - 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, - 0x64, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x41, 0x46, 0x6a, - 0x41, 0x41, 0x46, 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, - 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, - 0x02, 0x7b, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, - 0x7b, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, - 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, - 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, - 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x11, 0xa9, 0x88, 0x41, 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, - 0x85, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x11, 0xa9, 0x88, - 0x41, 0x11, 0xa9, 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, - 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, - 0x06, 0x91, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, - 0x91, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, - 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, - 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, - 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, - 0x99, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xe2, 0x2e, 0x9c, - 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, - 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, - 0x8c, 0xa4, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, - 0xa4, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, - 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, - 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, - 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, - 0xac, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xba, 0xb4, 0xaf, - 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, - 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, - 0x12, 0xb8, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, - 0xb8, 0x41, 0x94, 0xdc, 0xba, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, - 0x41, 0x94, 0xdc, 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, - 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, - 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, - 0xc0, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x88, 0x3a, 0xc3, - 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, - 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x8b, 0xce, 0xc8, 0x41, - ]), - }, -}; +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; + +// Binary tile data produced using version 1.1 of the tile format. +export const TILE_DATA_1_1 = { + versionMajor: 1, + versionMinor: 1, + headerLength: 84, + rectangle: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, 0x41, + 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x39, 0xb4, + 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x0a, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0x60, 0x0a, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, + 0x3a, 0x34, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, + 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x35, 0x32, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, + 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x39, 0x36, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, + 0x32, 0x34, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, + 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, + 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, + 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, + 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, + 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, + 0x31, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, + 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, + 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, + 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, + 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, + 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, + 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, + 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, + 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, + 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x36, 0x33, + 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x35, + 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x32, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, + 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, + 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, + 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x36, 0x2c, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x31, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, + 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, + 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, + 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, + 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, + 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, + 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, + 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, + 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, + 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0xf0, 0x41, 0xfd, 0xff, 0x0b, 0x42, 0x00, 0x00, 0xf0, 0x41, + 0x00, 0x00, 0xf0, 0x41, 0xfd, 0xff, 0x0b, 0x42, 0xfd, 0xff, 0x0b, 0x42, 0xfd, 0xff, 0x0b, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xfd, + 0xff, 0x0b, 0x42, 0xfd, 0xff, 0x0b, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf2, 0xff, + 0x47, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf6, 0xff, 0x33, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xf2, 0xff, 0x47, + 0x42, 0xeb, 0xff, 0x6f, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xf2, 0xff, 0x47, 0x42, 0xeb, 0xff, 0x6f, 0x42, 0xeb, 0xff, 0x6f, 0x42, + ]), + }, + + lineString: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, 0x62, + 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x55, 0x0e, + 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0x8c, 0x0c, + 0x00, 0x00, 0xf0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, + 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, + 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, + 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, + 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, + 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, + 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, + 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, + 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, + 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, + 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, + 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, + 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, + 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, + 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, + 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, + 0x36, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, + 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, + 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, + 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, + 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, + 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, + 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, + 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, + 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x03, 0x00, 0xf8, + 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, + 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, + 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, + 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, + 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, + 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, + 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, + 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, + 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, + 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, + 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, + 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, + 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, + 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, + 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, + 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xe5, + 0xff, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x00, 0x00, + 0x00, 0x00, 0xe5, 0xff, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, + 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, + 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, + 0x71, 0xf9, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, 0x41, 0xe5, 0xff, + 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, + 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, + 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0xe5, 0xff, 0x9f, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x94, + 0xb8, 0x24, 0x42, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x85, 0x71, + 0xf9, 0x41, 0x94, 0xb8, 0x24, 0x42, 0x85, 0x71, 0xf9, 0x41, 0x85, 0x71, 0xf9, 0x41, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, + 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, + 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, + 0x29, 0x7e, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0x94, 0xb8, + 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, + 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, + 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0x94, 0xb8, 0x24, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, + 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, + 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xd1, 0x29, 0x7e, + 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, + 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xf9, 0x14, 0x93, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, + 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, + 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, 0xd1, 0x29, 0x7e, 0x42, + ]), + }, + + lineStrings: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, 0x62, + 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x55, 0x0e, + 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x1e, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, + 0x00, 0x68, 0x1e, 0x00, 0x00, 0xbc, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, + 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x34, 0x31, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x32, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, + 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, + 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x32, 0x34, 0x7d, 0x2c, 0x22, + 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, + 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, + 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x31, 0x39, 0x32, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, + 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x32, 0x35, 0x30, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, + 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, + 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, + 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, + 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, + 0x39, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, + 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, + 0x31, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, + 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, + 0x32, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, + 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, + 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, + 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, + 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, + 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, + 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, + 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, + 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, + 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, + 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, + 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, 0x22, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, + 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, + 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, + 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, + 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, + 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, + 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, + 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, + 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, + 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, + 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, + 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, + 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, + 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, + 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, + 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, + 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, + 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, + 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, + 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, + 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, + 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, + 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, + 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, + 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, + 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, + 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, + 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, + 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, + 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, + 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, + 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, + 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, + 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, + 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, + 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, + 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, + 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, + 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x25, + 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, + 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, + 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, + 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, + 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, + 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, + 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, + 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, + 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, + 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, + 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, + 0x6d, 0x15, 0x93, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, + 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, + 0x7e, 0x42, 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, + 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, + 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, + 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, + 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, + 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, + 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, + 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, + 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, + 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, + 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, + 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, + 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, + 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, + 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, + 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, + 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, + 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, + 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, + 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, + 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, + 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, + 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, + 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, + 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, + 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, + 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, + 0x0c, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, + 0x08, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, + 0x00, 0x00, 0x39, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, + 0x00, 0x06, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, + 0x0c, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, + 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, 0x09, + 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, 0x0a, 0x00, + 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, + 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0f, + 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x90, 0x09, + 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, + 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, + 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, + 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, + 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0xa0, 0x41, + 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, + 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, + 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, + 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, 0xf9, 0x41, + 0x25, 0x72, 0xf9, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, + 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x85, 0x00, 0xa0, 0x41, 0x25, 0x72, + 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, + 0x42, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, 0x25, 0x72, 0xf9, 0x41, 0x25, 0x72, 0xf9, 0x41, 0x34, 0xb9, 0x24, 0x42, + 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, + 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, + 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, + 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, 0x7e, 0x42, + 0xb9, 0x2a, 0x7e, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, + 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0x34, 0xb9, 0x24, 0x42, 0xb9, 0x2a, + 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, + 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, + 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, + 0x15, 0x93, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x6d, 0x15, 0x93, 0x42, 0x6d, 0x15, 0x93, 0x42, 0xb9, 0x2a, + 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, + 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0xb9, 0x2a, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xfe, 0x9f, 0x41, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0xa5, + 0xfe, 0x9f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, + 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, + 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, + 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, + 0x70, 0xf9, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0xa5, 0xfe, + 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, + 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0xa5, 0xfe, 0x9f, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x53, 0xb7, 0x24, 0x42, + 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x45, 0x70, 0xf9, 0x41, 0x53, + 0xb7, 0x24, 0x42, 0x45, 0x70, 0xf9, 0x41, 0x45, 0x70, 0xf9, 0x41, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, + 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, + 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, + 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, + 0x28, 0x7e, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x53, 0xb7, + 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, + 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x53, 0xb7, 0x24, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, + 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, + 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, + 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, + 0x42, 0x02, 0x28, 0x7e, 0x42, 0x12, 0x14, 0x93, 0x42, 0x12, 0x14, 0x93, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, + 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, 0x02, + 0x28, 0x7e, 0x42, 0x02, 0x28, 0x7e, 0x42, + ]), + }, + + triangles: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, 0x62, + 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, 0x55, 0x0e, + 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x19, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0x24, 0x19, 0x00, 0x00, 0xb8, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, + 0x31, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x31, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x32, 0x34, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, + 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x32, 0x34, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, + 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, + 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x38, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x38, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, + 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x39, + 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, + 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, + 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x38, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x32, 0x30, 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, + 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, + 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, + 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, + 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, + 0x31, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, + 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, + 0x78, 0x31, 0x37, 0x22, 0x2c, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x66, 0x69, 0x6c, + 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, + 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, + 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, + 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, + 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, + 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, + 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, + 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, + 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, + 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, + 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, + 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, + 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, + 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, + 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, + 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, + 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, + 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, + 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, + 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, + 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, + 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x2c, + 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, + 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, + 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, + 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, + 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, + 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, + 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, + 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, + 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, + 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, + 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, + 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, + 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, + 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, + 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, + 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, + 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, + 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, + 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, + 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, + 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, + 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, + 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, + 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, + 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, + 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, + 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, + 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, + 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, 0x03, + 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, + 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, + 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, + 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, + 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x56, 0x71, + 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0xea, 0x70, 0x3d, + 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xea, 0x70, 0x3d, 0x42, + 0xbe, 0x70, 0x51, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xea, 0x70, 0x3d, 0x42, 0xbe, 0x70, 0x51, 0x42, 0xbe, 0x70, 0x51, 0x42, 0x56, + 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, + 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, + 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x15, 0x71, 0x51, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, + 0x15, 0x71, 0x51, 0x42, 0x15, 0x71, 0x51, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x56, + 0x71, 0xd1, 0x41, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x7c, 0xb8, + 0x10, 0x42, 0x7c, 0xb8, 0x10, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x15, 0x71, 0x51, + 0x42, 0x05, 0x71, 0x3d, 0x42, 0x05, 0x71, 0x3d, 0x42, 0x15, 0x71, 0x51, 0x42, 0x15, 0x71, 0x51, 0x42, 0xa7, 0xaa, 0x03, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, + 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, + 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, + 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, + 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, + 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, + 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, + 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, + 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, + 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, + 0x1e, 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, + 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, + 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, + 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, + 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, + 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0x56, + 0x71, 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x81, 0x71, + 0x3d, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x81, 0x71, 0x3d, + 0x42, 0x56, 0x71, 0x51, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x81, 0x71, 0x3d, 0x42, 0x56, 0x71, 0x51, 0x42, 0x56, 0x71, 0x51, 0x42, + 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0xcc, + 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, + 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xad, 0x71, 0x51, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, + 0x42, 0xad, 0x71, 0x51, 0x42, 0xad, 0x71, 0x51, 0x42, 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0x56, 0x71, 0xd1, 0x41, + 0x56, 0x71, 0xd1, 0x41, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xcc, + 0xb8, 0x10, 0x42, 0xcc, 0xb8, 0x10, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xad, 0x71, + 0x51, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0x9c, 0x71, 0x3d, 0x42, 0xad, 0x71, 0x51, 0x42, 0xad, 0x71, 0x51, 0x42, + ]), + }, + + cylinder: { + flags: IModelTileIO.Flags.ContainsCurves, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x01, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, 0x34, + 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, 0x8e, 0x53, + 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, 0xb1, 0xff, 0x07, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x45, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xd8, 0x44, + 0x00, 0x00, 0xdc, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x31, 0x33, 0x33, 0x35, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, + 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, + 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, + 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, + 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, + 0x39, 0x30, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x36, + 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, + 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, + 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, + 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, + 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x36, 0x32, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, + 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, + 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x31, 0x30, 0x33, 0x32, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, + 0x7b, 0x22, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x37, 0x22, 0x2c, + 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, + 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, + 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, + 0x22, 0x3a, 0x22, 0x30, 0x78, 0x31, 0x38, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, + 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, + 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x50, + 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, + 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, + 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, + 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, + 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, + 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, + 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, + 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, + 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x36, + 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, + 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x36, 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, + 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, + 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, + 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x37, 0x2c, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x38, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, + 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, + 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, + 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, + 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, + 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, + 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, + 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, + 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0x01, + 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, + 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, + 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, + 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, + 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, + 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, + 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, + 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, + 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, + 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, + 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, + 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, + 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, + 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, + 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, + 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xba, 0xc5, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, + 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xa2, 0xdd, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, + 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, + 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, + 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, 0xba, 0x2d, 0x07, + 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, + 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, + 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, + 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, + 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, + 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, + 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, + 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, + 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0x38, 0x54, + 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, 0xfe, + 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, + 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, + 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, + 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, + 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, + 0x6c, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, + 0x00, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x26, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x26, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x26, 0x00, 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, + 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, + 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, + 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x56, 0x00, 0x00, 0x58, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, + 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, + 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, + 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x6a, 0x00, + 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6b, 0x00, + 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6e, 0x00, + 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, + 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, + 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, + 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, + 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, + 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, + 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x82, 0x00, 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, + 0x00, 0x84, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, + 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, + 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, + 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, + 0x00, 0x8e, 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, + 0x00, 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, + 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, + 0x00, 0x16, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, + 0x00, 0x49, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, + 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, + 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x00, 0x22, + 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, + 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, + 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, + 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, + 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, + 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, + 0x1d, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, + 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, + 0x03, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, + 0x19, 0x00, 0x00, 0x03, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, 0x18, + 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, 0x18, 0x00, + 0x00, 0x01, 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, + 0x01, 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, + 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, 0x14, + 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, 0x14, 0x00, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, + 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x02, + 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x11, + 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, + 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, + 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, + 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, + 0x03, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, + 0x0b, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, + 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, + 0x00, 0x01, 0x09, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, + 0x01, 0x09, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, + 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, + 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, + 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, + 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, + 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x28, 0x00, 0x00, 0x00, 0x27, + 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, + 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, + 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, + 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, 0x2c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, + 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x03, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, + 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, + 0x2e, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, + 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, + 0x03, 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, + 0x30, 0x00, 0x00, 0x03, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, 0x31, + 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, 0x33, 0x00, + 0x00, 0x01, 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, + 0x01, 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x02, + 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x00, 0x35, + 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x03, 0x37, 0x00, + 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, + 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x02, + 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x01, 0x38, + 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, + 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, 0x3b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, + 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, + 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, + 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, + 0x03, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, + 0x3e, 0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, + 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x03, 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, + 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, + 0x01, 0x42, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, + 0x43, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, 0x43, + 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, 0x45, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, + 0x03, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x02, + 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, 0x46, + 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x01, 0x48, 0x00, + 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, + 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, + 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4c, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, + 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, + 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, + 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, + 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, + 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, + 0x00, 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, + 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, 0x00, + 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, + 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, + 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, + 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, + 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x76, 0x00, + 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, + 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, + 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, + 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, + 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, + 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, + 0x00, 0x8e, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, + 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, + 0x01, 0x4b, 0x00, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, + 0x4d, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, 0x4e, + 0x00, 0x00, 0x02, 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, 0x51, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, + 0x03, 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, + 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x01, 0x54, + 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x01, 0x57, 0x00, + 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, 0x59, 0x00, 0x00, + 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x02, + 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, 0x5a, 0x00, 0x00, 0x03, 0x5d, 0x00, 0x00, 0x00, 0x5c, + 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x02, 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, + 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, + 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x61, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, + 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x02, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, + 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, + 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, 0x64, 0x00, 0x00, 0x03, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, + 0x01, 0x67, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x02, 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x69, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, + 0x00, 0x00, 0x02, 0x6b, 0x00, 0x00, 0x01, 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x02, 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, + 0x03, 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, + 0x6e, 0x00, 0x00, 0x03, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0x70, + 0x00, 0x00, 0x02, 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, 0x73, 0x00, + 0x00, 0x01, 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, 0x75, 0x00, 0x00, + 0x01, 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x02, + 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, 0x79, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, 0x78, 0x00, 0x00, 0x03, 0x7b, 0x00, + 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7a, 0x00, 0x00, 0x02, 0x7a, 0x00, 0x00, + 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x02, + 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x7e, + 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, + 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, + 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, + 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x02, 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, + 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x01, 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, + 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, + 0x03, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x02, 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, + 0x8a, 0x00, 0x00, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, + 0x00, 0x00, 0x02, 0x8c, 0x00, 0x00, 0x03, 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, + 0x00, 0x01, 0x8e, 0x00, 0x00, 0x02, 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, + 0x01, 0x91, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, + 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, + 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xe4, 0x9a, + 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, + 0xa8, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, + 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, + 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, + 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, + 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, + 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, + 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, + 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, + 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, + 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, + 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, + 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, + 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, + 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, + 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, + 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, + 0x9a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, + 0x1b, 0x9a, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, + 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, + 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, + 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, + 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x35, 0x4b, 0x40, 0x40, 0x35, + 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x40, 0x40, + 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, + 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, + 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, + 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, + 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, + 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, + 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, + 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, + 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, + 0x35, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, + 0xb4, 0x35, 0xbf, 0x40, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, + 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, + 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, + 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, + 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, + 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, + 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, + 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, + 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, + 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, + 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, + 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, + 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, + 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, + 0x00, 0x22, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x22, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, + 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x2b, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2a, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00, 0x35, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x39, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3d, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x44, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x46, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x47, 0x00, 0x00, 0x25, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x24, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x00, 0x1e, 0x24, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x06, 0x23, 0x00, + 0x00, 0x06, 0x24, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x00, 0x1e, 0x23, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, + 0x06, 0x22, 0x00, 0x00, 0x06, 0x23, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x4e, 0x21, 0x00, 0x00, 0x1e, 0x22, 0x00, 0x00, 0x36, + 0x21, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0x1e, 0x21, + 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x36, 0x21, 0x00, 0x00, 0x4e, 0x1f, 0x00, + 0x00, 0x1e, 0x20, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, + 0x4e, 0x1e, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x36, + 0x1f, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x06, 0x1e, + 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x4e, 0x1c, 0x00, 0x00, 0x1e, 0x1d, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x06, 0x1c, 0x00, + 0x00, 0x06, 0x1d, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x4e, 0x1b, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, + 0x06, 0x1b, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x4e, 0x1a, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x36, + 0x1a, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x06, 0x1b, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x4e, 0x19, 0x00, 0x00, 0x1e, 0x1a, + 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x4e, 0x18, 0x00, + 0x00, 0x1e, 0x19, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, + 0x4e, 0x17, 0x00, 0x00, 0x1e, 0x18, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x36, + 0x18, 0x00, 0x00, 0x4e, 0x16, 0x00, 0x00, 0x1e, 0x17, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x06, 0x16, 0x00, 0x00, 0x06, 0x17, + 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x4e, 0x15, 0x00, 0x00, 0x1e, 0x16, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x06, 0x15, 0x00, + 0x00, 0x06, 0x16, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x4e, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, + 0x06, 0x14, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x00, 0x1e, 0x14, 0x00, 0x00, 0x36, + 0x13, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x00, 0x1e, 0x13, + 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0x4e, 0x11, 0x00, + 0x00, 0x1e, 0x12, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, + 0x4e, 0x10, 0x00, 0x00, 0x1e, 0x11, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x36, + 0x11, 0x00, 0x00, 0x4e, 0x0f, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x06, 0x10, + 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x4e, 0x0e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x06, 0x0e, 0x00, + 0x00, 0x06, 0x0f, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x4e, 0x0d, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, + 0x06, 0x0d, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x4e, 0x0c, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x36, + 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, 0x4e, 0x0b, 0x00, 0x00, 0x1e, 0x0c, + 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x4e, 0x0a, 0x00, + 0x00, 0x1e, 0x0b, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, + 0x4e, 0x09, 0x00, 0x00, 0x1e, 0x0a, 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x36, + 0x0a, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x09, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x09, + 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, + 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, + 0x06, 0x06, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, + 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x05, + 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x03, 0x00, + 0x00, 0x1e, 0x04, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, + 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, + 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x27, 0x00, 0x00, 0x1e, 0x25, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x06, 0x27, 0x00, + 0x00, 0x06, 0x25, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x4e, 0x28, 0x00, 0x00, 0x1e, 0x27, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, + 0x06, 0x28, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x4e, 0x29, 0x00, 0x00, 0x1e, 0x28, 0x00, 0x00, 0x36, + 0x29, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, 0x4e, 0x2a, 0x00, 0x00, 0x1e, 0x29, + 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x36, 0x29, 0x00, 0x00, 0x4e, 0x2b, 0x00, + 0x00, 0x1e, 0x2a, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, + 0x4e, 0x2c, 0x00, 0x00, 0x1e, 0x2b, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x06, 0x2c, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x36, + 0x2b, 0x00, 0x00, 0x4e, 0x2d, 0x00, 0x00, 0x1e, 0x2c, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x06, 0x2c, + 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x00, 0x1e, 0x2d, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x06, 0x2e, 0x00, + 0x00, 0x06, 0x2d, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x4e, 0x2f, 0x00, 0x00, 0x1e, 0x2e, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, + 0x06, 0x2f, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x4e, 0x30, 0x00, 0x00, 0x1e, 0x2f, 0x00, 0x00, 0x36, + 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x2f, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x4e, 0x31, 0x00, 0x00, 0x1e, 0x30, + 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x4e, 0x32, 0x00, + 0x00, 0x1e, 0x31, 0x00, 0x00, 0x36, 0x32, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, + 0x4e, 0x33, 0x00, 0x00, 0x1e, 0x32, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x36, + 0x32, 0x00, 0x00, 0x4e, 0x34, 0x00, 0x00, 0x1e, 0x33, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x06, 0x34, 0x00, 0x00, 0x06, 0x33, + 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x4e, 0x35, 0x00, 0x00, 0x1e, 0x34, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x06, 0x35, 0x00, + 0x00, 0x06, 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x4e, 0x36, 0x00, 0x00, 0x1e, 0x35, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, + 0x06, 0x36, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x4e, 0x37, 0x00, 0x00, 0x1e, 0x36, 0x00, 0x00, 0x36, + 0x37, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0x1e, 0x37, + 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x4e, 0x39, 0x00, + 0x00, 0x1e, 0x38, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, + 0x4e, 0x3a, 0x00, 0x00, 0x1e, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x36, + 0x39, 0x00, 0x00, 0x4e, 0x3b, 0x00, 0x00, 0x1e, 0x3a, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x06, 0x3b, 0x00, 0x00, 0x06, 0x3a, + 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x4e, 0x3c, 0x00, 0x00, 0x1e, 0x3b, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x06, 0x3c, 0x00, + 0x00, 0x06, 0x3b, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, + 0x06, 0x3d, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x4e, 0x3e, 0x00, 0x00, 0x1e, 0x3d, 0x00, 0x00, 0x36, + 0x3e, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, 0x4e, 0x3f, 0x00, 0x00, 0x1e, 0x3e, + 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x4e, 0x40, 0x00, + 0x00, 0x1e, 0x3f, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, + 0x4e, 0x41, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x36, + 0x40, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x00, 0x1e, 0x41, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x06, 0x41, + 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x4e, 0x43, 0x00, 0x00, 0x1e, 0x42, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x06, 0x43, 0x00, + 0x00, 0x06, 0x42, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x4e, 0x44, 0x00, 0x00, 0x1e, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, + 0x06, 0x44, 0x00, 0x00, 0x06, 0x43, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x4e, 0x45, 0x00, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x36, + 0x45, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x4e, 0x46, 0x00, 0x00, 0x1e, 0x45, + 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x4e, 0x47, 0x00, + 0x00, 0x1e, 0x46, 0x00, 0x00, 0x36, 0x47, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, + 0x4e, 0x48, 0x00, 0x00, 0x1e, 0x47, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x36, + 0x47, 0x00, 0x00, 0x4e, 0x49, 0x00, 0x00, 0x1e, 0x48, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x06, 0x48, + 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x4e, 0x25, 0x00, 0x00, 0x1e, 0x49, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x06, 0x25, 0x00, + 0x00, 0x06, 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x4e, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x8c, 0xce, 0x48, + 0x41, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, 0xf6, 0x53, 0x41, + 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x62, + 0x8a, 0x59, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, + 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, + 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, 0xb2, 0x64, 0x41, + 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x41, + 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, + 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x4d, 0xda, 0x6f, + 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, 0x02, 0x7b, 0x41, + 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0xfe, + 0x4a, 0x80, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, + 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, + 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, 0xde, 0x85, 0x41, + 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x11, 0xa9, 0x88, 0x41, 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x11, + 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, + 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0x02, 0x73, 0x8b, + 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, 0x06, 0x91, 0x41, + 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xe6, + 0xd0, 0x93, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, + 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, + 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, 0x64, 0x99, 0x41, + 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xe2, + 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, + 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xcb, 0xf8, 0x9e, + 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, 0x8c, 0xa4, 0x41, + 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xcb, + 0x56, 0xa7, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, + 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, + 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, 0xea, 0xac, 0x41, + 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xba, + 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, + 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xb0, 0x7e, 0xb2, + 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, 0x12, 0xb8, 0x41, + 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0x94, + 0xdc, 0xba, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, + 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, + 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, 0x70, 0xc0, 0x41, + 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x88, + 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, + 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x98, 0x04, 0xc6, + 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, + 0x8c, 0xce, 0x48, 0x41, 0x8c, 0xce, 0x48, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, + 0xf6, 0x53, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x74, 0x62, 0x4e, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, + 0x53, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x55, 0xf6, 0x53, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, + 0x41, 0x62, 0x8a, 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x62, 0x8a, 0x59, 0x41, 0x60, 0x1e, 0x5f, 0x41, + 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x60, 0x1e, 0x5f, 0x41, 0x42, + 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x42, 0xb2, 0x64, 0x41, 0x42, 0xb2, + 0x64, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x41, 0x46, 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x41, 0x46, 0x6a, + 0x41, 0x41, 0x46, 0x6a, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, + 0x4d, 0xda, 0x6f, 0x41, 0x4d, 0xda, 0x6f, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, + 0x02, 0x7b, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x2f, 0x6e, 0x75, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, + 0x7b, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x16, 0x02, 0x7b, 0x41, 0x16, 0x02, 0x7b, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, + 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0xfe, 0x4a, 0x80, 0x41, 0x0e, 0x15, 0x83, 0x41, + 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x0e, 0x15, 0x83, 0x41, 0x0e, 0x15, 0x83, 0x41, 0xf7, + 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, 0x85, 0x41, 0x11, 0xa9, 0x88, 0x41, 0xf7, 0xde, 0x85, 0x41, 0xf7, 0xde, + 0x85, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x11, 0xa9, 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x11, 0xa9, 0x88, + 0x41, 0x11, 0xa9, 0x88, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, + 0x02, 0x73, 0x8b, 0x41, 0x02, 0x73, 0x8b, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, + 0x06, 0x91, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xef, 0x3c, 0x8e, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, + 0x91, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xf5, 0x06, 0x91, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, + 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xe6, 0xd0, 0x93, 0x41, 0xdc, 0x9a, 0x96, 0x41, + 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xdc, 0x9a, 0x96, 0x41, 0xd3, + 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xd3, 0x64, 0x99, 0x41, 0xd3, 0x64, + 0x99, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xe2, 0x2e, 0x9c, + 0x41, 0xe2, 0x2e, 0x9c, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, + 0xcb, 0xf8, 0x9e, 0x41, 0xcb, 0xf8, 0x9e, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, + 0x8c, 0xa4, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xd2, 0xc2, 0xa1, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, + 0xa4, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xc4, 0x8c, 0xa4, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, + 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xcb, 0x56, 0xa7, 0x41, 0xb4, 0x20, 0xaa, 0x41, + 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xb4, 0x20, 0xaa, 0x41, 0xc4, + 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xc4, 0xea, 0xac, 0x41, 0xc4, 0xea, + 0xac, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xba, 0xb4, 0xaf, + 0x41, 0xba, 0xb4, 0xaf, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, + 0xb0, 0x7e, 0xb2, 0x41, 0xb0, 0x7e, 0xb2, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, + 0x12, 0xb8, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa1, 0x48, 0xb5, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, + 0xb8, 0x41, 0x94, 0xdc, 0xba, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0xa7, 0x12, 0xb8, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, + 0x41, 0x94, 0xdc, 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x94, 0xdc, 0xba, 0x41, 0x85, 0xa6, 0xbd, 0x41, + 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x85, 0xa6, 0xbd, 0x41, 0x9f, + 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x9f, 0x70, 0xc0, 0x41, 0x9f, 0x70, + 0xc0, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x88, 0x3a, 0xc3, + 0x41, 0x88, 0x3a, 0xc3, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, + 0x98, 0x04, 0xc6, 0x41, 0x98, 0x04, 0xc6, 0x41, 0x8b, 0xce, 0xc8, 0x41, 0x8b, 0xce, 0xc8, 0x41, + ]), + }, +}; diff --git a/test-apps/testbed/frontend/TileIO.data.1.2.ts b/integration-tests/core/src/frontend/hub/TileIO.data.1.2.ts similarity index 99% rename from test-apps/testbed/frontend/TileIO.data.1.2.ts rename to integration-tests/core/src/frontend/hub/TileIO.data.1.2.ts index 583b8d5..5386df6 100644 --- a/test-apps/testbed/frontend/TileIO.data.1.2.ts +++ b/integration-tests/core/src/frontend/hub/TileIO.data.1.2.ts @@ -1,1696 +1,1696 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; - -// Binary tile data produced using version 1.2 of the tile format. -export const TILE_DATA_1_2 = { - versionMajor: 1, - versionMinor: 2, - headerLength: 84, - rectangle: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, - 0x41, 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc4, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x50, 0x09, 0x00, 0x00, 0x50, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x35, 0x32, 0x7d, 0x2c, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x39, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x32, 0x34, 0x7d, 0x7d, 0x2c, 0x22, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, - 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, - 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, - 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, - 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, - 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, - 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, - 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, - 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, - 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, - 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, - 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, - 0x3a, 0x5b, 0x37, 0x2e, 0x36, 0x33, 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, - 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, - 0x39, 0x32, 0x32, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, - 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, - 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, - 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, - 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x35, - 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x30, 0x2e, - 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, - 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, - 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, - 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, - 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, - 0x03, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, - ]), - }, - lineString: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, - 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, - 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, - 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, - 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, - 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, - 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, - 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, - 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, - 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, - 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, - 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, - 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, - 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, - 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, - 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, - 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, - 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, - 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, - 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, - 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, - 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, - 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, - 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, - ]), - }, - lineStrings: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xdc, 0x17, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x36, 0x38, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, - 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x37, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, - 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, - 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, - 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, - 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, - 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, 0x32, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, - 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, - 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, - 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, - 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, - 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, - 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, - 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, - 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x73, - 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, - 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, - 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, - 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, - 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, - 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, - 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, - 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, - 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, - 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, - 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, - 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, - 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, - 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x03, 0x00, 0xa7, 0xaa, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, - 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, - 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, - 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, - 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, - 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, - 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, - 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, - 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, - 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, - 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, - 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, - 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, - 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, - 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, - 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, - 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, - 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x60, - 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x0e, - 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x39, - 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, - 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, - 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, - 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, - 0x09, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, - 0x0a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, - 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, - 0x0a, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, - 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, - 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, - 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, - 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, - 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, - 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, - ]), - }, - triangles: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x16, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x10, 0x16, 0x00, 0x00, 0x54, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, - 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x34, - 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, - 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, 0x30, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x38, 0x7d, 0x2c, 0x22, - 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x31, 0x38, 0x33, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, - 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, - 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, - 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, - 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, - 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, - 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, - 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, - 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, - 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, - 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, - 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, - 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, - 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, - 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, - 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, - 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, - 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, - 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, - 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, - 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, - 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, - 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, - 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, - 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, - 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, - 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, - 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, - 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, - 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, - 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, - 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, - 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, - 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, - 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, - 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, - 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, - 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, - 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, - 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, - 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, - 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, - 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, - 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, - 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, - 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, - 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, - 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, - 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, - 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, - 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, - 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0xa7, 0xaa, 0x03, 0x00, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, - 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, - 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, - 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, - 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, - 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, - 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, - 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, - 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, - 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, - 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, - 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, - 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, - 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, - 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, - 0x08, 0x00, 0x00, 0x4e, - ]), - }, - cylinder: { - flags: IModelTileIO.Flags.ContainsCurves, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, - 0x34, 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, - 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, - 0xb1, 0xff, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x3d, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x64, 0x3d, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x32, 0x33, 0x33, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, - 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x39, - 0x30, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x33, 0x36, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, - 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x36, 0x32, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, - 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, - 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x33, 0x32, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, - 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, - 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, - 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, - 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, - 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, - 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, - 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, - 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, - 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, 0x6c, 0x68, 0x6f, 0x75, - 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, - 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, - 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, - 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, - 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, - 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x36, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x36, 0x2e, 0x31, 0x30, - 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, 0x2e, 0x31, 0x30, 0x34, - 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, 0x31, 0x35, 0x36, 0x37, - 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, - 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, - 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x32, - 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x33, 0x2e, - 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x2c, 0x22, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, - 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, - 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, - 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, - 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, - 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, - 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, - 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0xd0, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, - 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, - 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, - 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, - 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, - 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, - 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, - 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, - 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, - 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, - 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x23, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x26, - 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x26, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2f, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, - 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x26, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3a, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x26, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x26, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, 0x00, 0x00, 0x43, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, - 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, - 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, - 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, - 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x58, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x59, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5b, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, - 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, - 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, - 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, - 0x00, 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, - 0x6a, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6c, 0x00, - 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6d, - 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x6f, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, - 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, - 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, - 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x00, - 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x82, 0x00, 0x00, 0x81, - 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x84, 0x00, 0x00, 0x83, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, - 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, - 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, - 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, - 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, - 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, - 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, - 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, - 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, - 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, - 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, - 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, - 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, - 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, - 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, - 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, - 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x02, - 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x01, - 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x01, - 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, - 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x03, - 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x02, - 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x01, - 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x01, - 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, - 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x03, 0x1a, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x03, - 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x02, - 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x01, - 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x01, - 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, - 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, - 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x02, - 0x13, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, - 0x12, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x01, - 0x12, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x03, - 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x02, - 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, - 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x01, - 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x02, - 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x03, - 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x02, - 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, - 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x03, - 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, - 0x27, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, - 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x02, - 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, - 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x01, - 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x02, - 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, 0x2c, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x03, - 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x02, - 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x01, - 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x01, - 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x02, - 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x03, 0x31, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x03, - 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x02, - 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x01, - 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x01, - 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x02, - 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x03, - 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x02, - 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x01, - 0x37, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x01, - 0x39, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x02, - 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, 0x3b, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, - 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x02, - 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x01, - 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x01, - 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x03, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x02, - 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x03, - 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, - 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x01, - 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x01, - 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x02, - 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, 0x45, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x03, - 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x02, - 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, - 0x46, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x01, - 0x48, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x02, - 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, 0x4a, 0x00, 0x00, 0x4b, - 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, - 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, - 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, - 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, - 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, - 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, - 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x64, 0x00, 0x00, 0x64, - 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, 0x00, 0x66, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, - 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, - 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, - 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, - 0x00, 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, - 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7a, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, - 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, - 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, - 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, - 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8c, - 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8e, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, - 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x01, 0x4b, 0x00, 0x00, 0x01, - 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, 0x4d, 0x00, 0x00, 0x01, - 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x02, - 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x03, - 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, - 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x01, - 0x54, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x01, - 0x57, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, - 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, 0x5a, 0x00, 0x00, 0x03, - 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x02, - 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x01, - 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x61, 0x00, 0x00, 0x01, - 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x02, - 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, 0x64, 0x00, 0x00, 0x03, - 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x02, - 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x69, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x01, - 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x02, 0x6b, 0x00, 0x00, 0x01, - 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x02, - 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, 0x03, 0x6f, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, 0x6e, 0x00, 0x00, 0x03, - 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x02, - 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, 0x73, 0x00, 0x00, 0x01, - 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, 0x75, 0x00, 0x00, 0x01, - 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x02, - 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, 0x79, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, 0x78, 0x00, 0x00, 0x03, - 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7a, 0x00, 0x00, 0x02, - 0x7a, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x01, - 0x7c, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x01, - 0x7f, 0x00, 0x00, 0x01, 0x7e, 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, - 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x83, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x03, - 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x02, - 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x01, - 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x01, - 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x03, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x02, - 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, 0x8a, 0x00, 0x00, 0x03, 0x8d, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, 0x00, 0x00, 0x02, 0x8c, 0x00, 0x00, 0x03, - 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8e, 0x00, 0x00, 0x02, - 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x01, - 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, - 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, - 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xe4, 0x9a, 0xd6, 0xa8, - 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, - 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, - 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, - 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, - 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, - 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xa8, 0xd6, 0x9a, 0xe4, - 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, - 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, - 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, - 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, - 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, - 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x57, 0xd6, 0x4b, 0xca, - 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, - 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, - 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, - 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, - 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, - 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x1b, 0x9a, 0x0a, 0x8a, - 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, - 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, - 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, - 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, - 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, - 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x35, 0x4b, 0x40, 0x40, - 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, - 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, - 0x40, 0x40, 0x4b, 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, - 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, - 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, - 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, - 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, - 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, - 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, - 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, - 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, - 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xbf, 0x40, 0xca, 0x4b, - 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, - 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, - 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, - 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, - 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, - 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, - 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, - 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, - 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, - 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, - 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, - 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, - 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, - 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, - 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, - 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, - 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, - 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00, 0x35, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, - 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x42, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, - 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x47, 0x00, 0x00, 0x25, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x24, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x00, 0x1e, 0x24, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x06, - 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x00, 0x1e, 0x23, 0x00, 0x00, 0x36, - 0x22, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x06, 0x23, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x4e, 0x21, 0x00, 0x00, 0x1e, - 0x22, 0x00, 0x00, 0x36, 0x21, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x4e, - 0x20, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x36, - 0x21, 0x00, 0x00, 0x4e, 0x1f, 0x00, 0x00, 0x1e, 0x20, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x06, - 0x20, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x4e, 0x1e, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x06, - 0x1e, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x36, - 0x1d, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x4e, 0x1c, 0x00, 0x00, 0x1e, - 0x1d, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x4e, - 0x1b, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x06, 0x1b, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x36, - 0x1c, 0x00, 0x00, 0x4e, 0x1a, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x06, - 0x1b, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x4e, 0x19, 0x00, 0x00, 0x1e, 0x1a, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x06, - 0x19, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x4e, 0x18, 0x00, 0x00, 0x1e, 0x19, 0x00, 0x00, 0x36, - 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x4e, 0x17, 0x00, 0x00, 0x1e, - 0x18, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x4e, - 0x16, 0x00, 0x00, 0x1e, 0x17, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x06, 0x16, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x36, - 0x17, 0x00, 0x00, 0x4e, 0x15, 0x00, 0x00, 0x1e, 0x16, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x06, - 0x16, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x4e, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x06, - 0x14, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x00, 0x1e, 0x14, 0x00, 0x00, 0x36, - 0x13, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x00, 0x1e, - 0x13, 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0x4e, - 0x11, 0x00, 0x00, 0x1e, 0x12, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x36, - 0x12, 0x00, 0x00, 0x4e, 0x10, 0x00, 0x00, 0x1e, 0x11, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x06, - 0x11, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x4e, 0x0f, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x06, - 0x0f, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x4e, 0x0e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x36, - 0x0e, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x4e, 0x0d, 0x00, 0x00, 0x1e, - 0x0e, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x4e, - 0x0c, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x36, - 0x0d, 0x00, 0x00, 0x4e, 0x0b, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, - 0x0c, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x4e, 0x0a, 0x00, 0x00, 0x1e, 0x0b, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x06, - 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, 0x1e, 0x0a, 0x00, 0x00, 0x36, - 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, - 0x09, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x4e, - 0x07, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, - 0x08, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, - 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, - 0x05, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, - 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, - 0x04, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, - 0x02, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, - 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x27, 0x00, 0x00, 0x1e, 0x25, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x06, - 0x27, 0x00, 0x00, 0x06, 0x25, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x4e, 0x28, 0x00, 0x00, 0x1e, 0x27, 0x00, 0x00, 0x36, - 0x28, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x4e, 0x29, 0x00, 0x00, 0x1e, - 0x28, 0x00, 0x00, 0x36, 0x29, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, 0x4e, - 0x2a, 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x36, - 0x29, 0x00, 0x00, 0x4e, 0x2b, 0x00, 0x00, 0x1e, 0x2a, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x06, - 0x2a, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x4e, 0x2c, 0x00, 0x00, 0x1e, 0x2b, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x06, - 0x2c, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x4e, 0x2d, 0x00, 0x00, 0x1e, 0x2c, 0x00, 0x00, 0x36, - 0x2d, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x06, 0x2c, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x00, 0x1e, - 0x2d, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x4e, - 0x2f, 0x00, 0x00, 0x1e, 0x2e, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x06, 0x2f, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x36, - 0x2e, 0x00, 0x00, 0x4e, 0x30, 0x00, 0x00, 0x1e, 0x2f, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, - 0x2f, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x4e, 0x31, 0x00, 0x00, 0x1e, 0x30, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x06, - 0x31, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x00, 0x1e, 0x31, 0x00, 0x00, 0x36, - 0x32, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x00, 0x1e, - 0x32, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x36, 0x32, 0x00, 0x00, 0x4e, - 0x34, 0x00, 0x00, 0x1e, 0x33, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x06, 0x34, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x36, - 0x33, 0x00, 0x00, 0x4e, 0x35, 0x00, 0x00, 0x1e, 0x34, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x06, - 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x4e, 0x36, 0x00, 0x00, 0x1e, 0x35, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x06, - 0x36, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x4e, 0x37, 0x00, 0x00, 0x1e, 0x36, 0x00, 0x00, 0x36, - 0x37, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0x1e, - 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x4e, - 0x39, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x36, - 0x38, 0x00, 0x00, 0x4e, 0x3a, 0x00, 0x00, 0x1e, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x06, - 0x39, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x4e, 0x3b, 0x00, 0x00, 0x1e, 0x3a, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x06, - 0x3b, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x4e, 0x3c, 0x00, 0x00, 0x1e, 0x3b, 0x00, 0x00, 0x36, - 0x3c, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x06, 0x3b, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x1e, - 0x3c, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x4e, - 0x3e, 0x00, 0x00, 0x1e, 0x3d, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x36, - 0x3d, 0x00, 0x00, 0x4e, 0x3f, 0x00, 0x00, 0x1e, 0x3e, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x06, - 0x3e, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x4e, 0x40, 0x00, 0x00, 0x1e, 0x3f, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x06, - 0x40, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x00, 0x36, - 0x41, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x00, 0x1e, - 0x41, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x4e, - 0x43, 0x00, 0x00, 0x1e, 0x42, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x06, 0x43, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x36, - 0x42, 0x00, 0x00, 0x4e, 0x44, 0x00, 0x00, 0x1e, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x06, - 0x43, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x4e, 0x45, 0x00, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x06, - 0x45, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x4e, 0x46, 0x00, 0x00, 0x1e, 0x45, 0x00, 0x00, 0x36, - 0x46, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x4e, 0x47, 0x00, 0x00, 0x1e, - 0x46, 0x00, 0x00, 0x36, 0x47, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, 0x4e, - 0x48, 0x00, 0x00, 0x1e, 0x47, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x36, - 0x47, 0x00, 0x00, 0x4e, 0x49, 0x00, 0x00, 0x1e, 0x48, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x06, - 0x48, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x4e, 0x25, 0x00, 0x00, 0x1e, 0x49, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x06, - 0x25, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x4e, - ]), - }, -}; +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; + +// Binary tile data produced using version 1.2 of the tile format. +export const TILE_DATA_1_2 = { + versionMajor: 1, + versionMinor: 2, + headerLength: 84, + rectangle: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, + 0x41, 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc4, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x50, 0x09, 0x00, 0x00, 0x50, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x35, 0x32, 0x7d, 0x2c, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, + 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x39, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x32, 0x34, 0x7d, 0x7d, 0x2c, 0x22, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, + 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, + 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, + 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, + 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, + 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, + 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, + 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, + 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, + 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, + 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, + 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, + 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, + 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, + 0x3a, 0x5b, 0x37, 0x2e, 0x36, 0x33, 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, + 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, + 0x39, 0x32, 0x32, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, + 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, + 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, + 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, + 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x35, + 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x30, 0x2e, + 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, + 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, + 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, + 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, + 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, + 0x03, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, + ]), + }, + lineString: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, + 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, + 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, + 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, + 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, + 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, + 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, + 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, + 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, + 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, + 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, + 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, + 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, + 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, + 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, + 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, + 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, + 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, + 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, + 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, + 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, + 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, + 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, + 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, + 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, + 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, + ]), + }, + lineStrings: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xdc, 0x17, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, + 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x36, 0x38, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, + 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, + 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x37, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, + 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, + 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, + 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, + 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, + 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, 0x32, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, + 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, + 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, + 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, + 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, + 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, + 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, + 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, + 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, + 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x73, + 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, + 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, + 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, + 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, + 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, + 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, + 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, + 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, + 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, + 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, + 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, + 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, + 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x03, 0x00, 0xa7, 0xaa, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, + 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, + 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, + 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, + 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, + 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, + 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, + 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, + 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, + 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, + 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, + 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, + 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, + 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x60, + 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x0e, + 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x39, + 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, + 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, + 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, + 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, + 0x09, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, + 0x0a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, + 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, + 0x0a, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, + 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, + 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, + 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, + 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, + 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, + 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, + ]), + }, + triangles: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x16, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x10, 0x16, 0x00, 0x00, 0x54, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, + 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x34, + 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, + 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, + 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, + 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, 0x30, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x38, 0x7d, 0x2c, 0x22, + 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x31, 0x38, 0x33, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, + 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, + 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, + 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, + 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, + 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, + 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, + 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, + 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, + 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, + 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, + 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, + 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, + 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, + 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, + 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, + 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, + 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, + 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, + 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, + 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, + 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, + 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, + 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, + 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, + 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, + 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, + 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, + 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, + 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, + 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, + 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, + 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, + 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, + 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, + 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, + 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, + 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, + 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, + 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, + 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, + 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, + 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, + 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, + 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, + 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, + 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, + 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, + 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, + 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, + 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0xa7, 0xaa, 0x03, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, + 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, + 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, + 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, + 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, + 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, + 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, + 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, + 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, + 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, + 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, + 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, + 0x08, 0x00, 0x00, 0x4e, + ]), + }, + cylinder: { + flags: IModelTileIO.Flags.ContainsCurves, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x02, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, + 0x34, 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, + 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, + 0xb1, 0xff, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x3d, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x64, 0x3d, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x32, 0x33, 0x33, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, + 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x39, + 0x30, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, + 0x3a, 0x33, 0x36, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, + 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x36, 0x32, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, + 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, + 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x33, 0x32, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, + 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, + 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, + 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, + 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, + 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, + 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, + 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, + 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, + 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, + 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, 0x6c, 0x68, 0x6f, 0x75, + 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, + 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, + 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, + 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, + 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, + 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x36, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x36, 0x2e, 0x31, 0x30, + 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, 0x2e, 0x31, 0x30, 0x34, + 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, 0x31, 0x35, 0x36, 0x37, + 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, + 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, + 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x32, + 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x33, 0x2e, + 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x2c, 0x22, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, + 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, + 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, + 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, + 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, + 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, + 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, + 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, + 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xd0, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, + 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, + 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, + 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, + 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, + 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, + 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, + 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, + 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, + 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, + 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x23, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x26, + 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x26, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x26, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x26, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x26, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, 0x00, 0x00, 0x43, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, + 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x58, 0x00, + 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x59, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, + 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, + 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, + 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, + 0x00, 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6c, 0x00, + 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6d, + 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x6f, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, + 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, + 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, + 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x82, 0x00, 0x00, 0x81, + 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x84, 0x00, 0x00, 0x83, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, + 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, + 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, + 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, + 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, + 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, + 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, + 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, + 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, + 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, + 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, + 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, + 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, + 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, + 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, + 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x02, + 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x01, + 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x01, + 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, + 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, 0x1f, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x03, + 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x02, + 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x01, + 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x01, + 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, + 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x03, 0x1a, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x03, + 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x02, + 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x01, + 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x01, + 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, + 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x02, + 0x13, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x03, + 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x02, + 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, + 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x01, + 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x02, + 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x03, + 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x02, + 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, + 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x03, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, + 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, + 0x27, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, + 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x02, + 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, + 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x01, + 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x02, + 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, 0x2c, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x03, + 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x02, + 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x01, + 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x01, + 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x02, + 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x03, 0x31, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x03, + 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x02, + 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x01, + 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x01, + 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x02, + 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x03, + 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x02, + 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x01, + 0x37, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x01, + 0x39, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x02, + 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, 0x3b, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, + 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x02, + 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x01, + 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x01, + 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x03, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x02, + 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x03, + 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, + 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x01, + 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x01, + 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x02, + 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, 0x45, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x03, + 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x02, + 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, + 0x46, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x01, + 0x48, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x02, + 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, 0x4a, 0x00, 0x00, 0x4b, + 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, + 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, + 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, + 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, + 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x64, 0x00, 0x00, 0x64, + 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, 0x00, 0x66, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, + 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, + 0x00, 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, + 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7a, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, + 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, + 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, + 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8c, + 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8e, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, + 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x01, 0x4b, 0x00, 0x00, 0x01, + 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, 0x4d, 0x00, 0x00, 0x01, + 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x02, + 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x03, + 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, + 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x01, + 0x54, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x01, + 0x57, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, + 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, 0x5a, 0x00, 0x00, 0x03, + 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x02, + 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x01, + 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x61, 0x00, 0x00, 0x01, + 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x02, + 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, 0x64, 0x00, 0x00, 0x03, + 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x02, + 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x69, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x01, + 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x02, 0x6b, 0x00, 0x00, 0x01, + 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x02, + 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, 0x03, 0x6f, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, 0x6e, 0x00, 0x00, 0x03, + 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x02, + 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, 0x73, 0x00, 0x00, 0x01, + 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, 0x75, 0x00, 0x00, 0x01, + 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x02, + 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, 0x79, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, 0x78, 0x00, 0x00, 0x03, + 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7a, 0x00, 0x00, 0x02, + 0x7a, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x01, + 0x7c, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x01, + 0x7f, 0x00, 0x00, 0x01, 0x7e, 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, + 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x83, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x03, + 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x02, + 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x01, + 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x01, + 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x03, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x02, + 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, 0x8a, 0x00, 0x00, 0x03, 0x8d, 0x00, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, 0x00, 0x00, 0x02, 0x8c, 0x00, 0x00, 0x03, + 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8e, 0x00, 0x00, 0x02, + 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x01, + 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, + 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, + 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xe4, 0x9a, 0xd6, 0xa8, + 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, + 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, + 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, + 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, + 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, + 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xa8, 0xd6, 0x9a, 0xe4, + 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, + 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, + 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, + 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, + 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, + 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x57, 0xd6, 0x4b, 0xca, + 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, + 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, + 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, + 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, + 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, + 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x1b, 0x9a, 0x0a, 0x8a, + 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, + 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, + 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, + 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, + 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, + 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x35, 0x4b, 0x40, 0x40, + 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, + 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, + 0x40, 0x40, 0x4b, 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, + 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, + 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, + 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, + 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, + 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, + 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, + 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, + 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, + 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xbf, 0x40, 0xca, 0x4b, + 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, + 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, + 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, + 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, + 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, + 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, + 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, + 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, + 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, + 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, + 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, + 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, + 0x00, 0x22, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, + 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, + 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2e, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00, 0x35, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, + 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x47, 0x00, 0x00, 0x25, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x24, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x00, 0x1e, 0x24, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x06, + 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x00, 0x1e, 0x23, 0x00, 0x00, 0x36, + 0x22, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x06, 0x23, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x4e, 0x21, 0x00, 0x00, 0x1e, + 0x22, 0x00, 0x00, 0x36, 0x21, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x4e, + 0x20, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x36, + 0x21, 0x00, 0x00, 0x4e, 0x1f, 0x00, 0x00, 0x1e, 0x20, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x06, + 0x20, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x4e, 0x1e, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x06, + 0x1e, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x36, + 0x1d, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x4e, 0x1c, 0x00, 0x00, 0x1e, + 0x1d, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x4e, + 0x1b, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x06, 0x1b, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x36, + 0x1c, 0x00, 0x00, 0x4e, 0x1a, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x06, + 0x1b, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x4e, 0x19, 0x00, 0x00, 0x1e, 0x1a, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x06, + 0x19, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x4e, 0x18, 0x00, 0x00, 0x1e, 0x19, 0x00, 0x00, 0x36, + 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x4e, 0x17, 0x00, 0x00, 0x1e, + 0x18, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x4e, + 0x16, 0x00, 0x00, 0x1e, 0x17, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x06, 0x16, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x36, + 0x17, 0x00, 0x00, 0x4e, 0x15, 0x00, 0x00, 0x1e, 0x16, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x06, + 0x16, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x4e, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x06, + 0x14, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x00, 0x1e, 0x14, 0x00, 0x00, 0x36, + 0x13, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x00, 0x1e, + 0x13, 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0x4e, + 0x11, 0x00, 0x00, 0x1e, 0x12, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x36, + 0x12, 0x00, 0x00, 0x4e, 0x10, 0x00, 0x00, 0x1e, 0x11, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x06, + 0x11, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x4e, 0x0f, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x06, + 0x0f, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x4e, 0x0e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x36, + 0x0e, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x4e, 0x0d, 0x00, 0x00, 0x1e, + 0x0e, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x4e, + 0x0c, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x36, + 0x0d, 0x00, 0x00, 0x4e, 0x0b, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, + 0x0c, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x4e, 0x0a, 0x00, 0x00, 0x1e, 0x0b, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x06, + 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, 0x1e, 0x0a, 0x00, 0x00, 0x36, + 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, + 0x09, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x4e, + 0x07, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, + 0x08, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, + 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, + 0x05, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, + 0x04, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, + 0x02, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, + 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x27, 0x00, 0x00, 0x1e, 0x25, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x06, + 0x27, 0x00, 0x00, 0x06, 0x25, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x4e, 0x28, 0x00, 0x00, 0x1e, 0x27, 0x00, 0x00, 0x36, + 0x28, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x4e, 0x29, 0x00, 0x00, 0x1e, + 0x28, 0x00, 0x00, 0x36, 0x29, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, 0x4e, + 0x2a, 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x36, + 0x29, 0x00, 0x00, 0x4e, 0x2b, 0x00, 0x00, 0x1e, 0x2a, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x06, + 0x2a, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x4e, 0x2c, 0x00, 0x00, 0x1e, 0x2b, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x06, + 0x2c, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x4e, 0x2d, 0x00, 0x00, 0x1e, 0x2c, 0x00, 0x00, 0x36, + 0x2d, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x06, 0x2c, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x00, 0x1e, + 0x2d, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x4e, + 0x2f, 0x00, 0x00, 0x1e, 0x2e, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x06, 0x2f, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x36, + 0x2e, 0x00, 0x00, 0x4e, 0x30, 0x00, 0x00, 0x1e, 0x2f, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, + 0x2f, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x4e, 0x31, 0x00, 0x00, 0x1e, 0x30, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x06, + 0x31, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x00, 0x1e, 0x31, 0x00, 0x00, 0x36, + 0x32, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x00, 0x1e, + 0x32, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x36, 0x32, 0x00, 0x00, 0x4e, + 0x34, 0x00, 0x00, 0x1e, 0x33, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x06, 0x34, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x36, + 0x33, 0x00, 0x00, 0x4e, 0x35, 0x00, 0x00, 0x1e, 0x34, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x06, + 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x4e, 0x36, 0x00, 0x00, 0x1e, 0x35, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x06, + 0x36, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x4e, 0x37, 0x00, 0x00, 0x1e, 0x36, 0x00, 0x00, 0x36, + 0x37, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0x1e, + 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x4e, + 0x39, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x36, + 0x38, 0x00, 0x00, 0x4e, 0x3a, 0x00, 0x00, 0x1e, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x06, + 0x39, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x4e, 0x3b, 0x00, 0x00, 0x1e, 0x3a, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x06, + 0x3b, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x4e, 0x3c, 0x00, 0x00, 0x1e, 0x3b, 0x00, 0x00, 0x36, + 0x3c, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x06, 0x3b, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x1e, + 0x3c, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x4e, + 0x3e, 0x00, 0x00, 0x1e, 0x3d, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x36, + 0x3d, 0x00, 0x00, 0x4e, 0x3f, 0x00, 0x00, 0x1e, 0x3e, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x06, + 0x3e, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x4e, 0x40, 0x00, 0x00, 0x1e, 0x3f, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x06, + 0x40, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x00, 0x36, + 0x41, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x00, 0x1e, + 0x41, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x4e, + 0x43, 0x00, 0x00, 0x1e, 0x42, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x06, 0x43, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x36, + 0x42, 0x00, 0x00, 0x4e, 0x44, 0x00, 0x00, 0x1e, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x06, + 0x43, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x4e, 0x45, 0x00, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x06, + 0x45, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x4e, 0x46, 0x00, 0x00, 0x1e, 0x45, 0x00, 0x00, 0x36, + 0x46, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x4e, 0x47, 0x00, 0x00, 0x1e, + 0x46, 0x00, 0x00, 0x36, 0x47, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, 0x4e, + 0x48, 0x00, 0x00, 0x1e, 0x47, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x36, + 0x47, 0x00, 0x00, 0x4e, 0x49, 0x00, 0x00, 0x1e, 0x48, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x06, + 0x48, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x4e, 0x25, 0x00, 0x00, 0x1e, 0x49, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x06, + 0x25, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x4e, + ]), + }, +}; diff --git a/test-apps/testbed/frontend/TileIO.data.1.3.ts b/integration-tests/core/src/frontend/hub/TileIO.data.1.3.ts similarity index 99% rename from test-apps/testbed/frontend/TileIO.data.1.3.ts rename to integration-tests/core/src/frontend/hub/TileIO.data.1.3.ts index c183b7a..bd6bf14 100644 --- a/test-apps/testbed/frontend/TileIO.data.1.3.ts +++ b/integration-tests/core/src/frontend/hub/TileIO.data.1.3.ts @@ -1,1696 +1,1696 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; - -// Binary tile data produced using version 1.2 of the tile format. -export const TILE_DATA_1_3 = { - versionMajor: 1, - versionMinor: 3, - headerLength: 84, - rectangle: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, - 0x41, 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc4, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x50, 0x09, 0x00, 0x00, 0x50, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x35, 0x32, 0x7d, 0x2c, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x39, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x32, 0x34, 0x7d, 0x7d, 0x2c, 0x22, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, - 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, - 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, - 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, - 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, - 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, - 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, - 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, - 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, - 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, - 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, - 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, - 0x3a, 0x5b, 0x37, 0x2e, 0x36, 0x33, 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, - 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, - 0x39, 0x32, 0x32, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, - 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, - 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, - 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, - 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x35, - 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x30, 0x2e, - 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, - 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, - 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, - 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, - 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, - 0x03, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, - ]), - }, - lineString: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, - 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, - 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, - 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, - 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, - 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, - 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, - 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, - 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, - 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, - 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, - 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, - 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, - 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, - 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, - 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, - 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, - 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, - 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, - 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, - 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, - 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, - 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, - 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, - ]), - }, - lineStrings: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xdc, 0x17, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x36, 0x38, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, - 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x37, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, - 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, - 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, - 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, - 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, - 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, 0x32, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, - 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, - 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, - 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, - 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, - 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, - 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, - 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, - 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x73, - 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, - 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, - 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, - 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, - 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, - 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, - 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, - 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, - 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, - 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, - 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, - 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, - 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, - 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x03, 0x00, 0xa7, 0xaa, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, - 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, - 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, - 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, - 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, - 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, - 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, - 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, - 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, - 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, - 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, - 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, - 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, - 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, - 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, - 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, - 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, - 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x60, - 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x0e, - 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x39, - 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, - 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, - 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, - 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, - 0x09, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, - 0x0a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, - 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, - 0x0a, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, - 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, - 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, - 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, - 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, - 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, - 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, - ]), - }, - triangles: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x16, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x10, 0x16, 0x00, 0x00, 0x54, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, - 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x34, - 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, - 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, - 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, - 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, - 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, 0x30, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x38, 0x7d, 0x2c, 0x22, - 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x31, 0x38, 0x33, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, - 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, - 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, - 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, - 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, - 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, - 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, - 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, - 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, - 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, - 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, - 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, - 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, - 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, - 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, - 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, - 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, - 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, - 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, - 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, - 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, - 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, - 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, - 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, - 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, - 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, - 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, - 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, - 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, - 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, - 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, - 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, - 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, - 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, - 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, - 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, - 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, - 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, - 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, - 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, - 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, - 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, - 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, - 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, - 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, - 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, - 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, - 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, - 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, - 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, - 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, - 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, - 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, - 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0xa7, 0xaa, 0x03, 0x00, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, - 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, - 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, - 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, - 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, - 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, - 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, - 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, - 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, - 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, - 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, - 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, - 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, - 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, - 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, - 0x08, 0x00, 0x00, 0x4e, - ]), - }, - cylinder: { - flags: IModelTileIO.Flags.ContainsCurves, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, - 0x34, 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, - 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, - 0xb1, 0xff, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x3d, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x64, 0x3d, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x32, 0x33, 0x33, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, - 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x39, - 0x30, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x33, 0x36, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, - 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x36, 0x32, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, - 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, - 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, - 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x33, 0x32, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, - 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, - 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, - 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, - 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, - 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, - 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, - 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, - 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, - 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, 0x6c, 0x68, 0x6f, 0x75, - 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, - 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, - 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, - 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, - 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, - 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x36, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x36, 0x2e, 0x31, 0x30, - 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, 0x2e, 0x31, 0x30, 0x34, - 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, 0x31, 0x35, 0x36, 0x37, - 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, - 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, - 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x32, - 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x33, 0x2e, - 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x2c, 0x22, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, - 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, - 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, - 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, - 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, - 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, - 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, - 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0xd0, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, - 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, - 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, - 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, - 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, - 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, - 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, - 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, - 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, - 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, - 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x23, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x26, - 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x26, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2f, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, - 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x26, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3a, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x26, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x26, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, 0x00, 0x00, 0x43, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, - 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, - 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, - 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, - 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x58, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x59, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5b, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, - 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, - 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, - 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, - 0x00, 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, - 0x6a, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6c, 0x00, - 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6d, - 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x6f, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, - 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, - 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, - 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x00, - 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x82, 0x00, 0x00, 0x81, - 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x84, 0x00, 0x00, 0x83, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, - 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, - 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, - 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, - 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, - 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, - 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, - 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, - 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, - 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, - 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, - 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, - 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, - 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, - 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, - 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, - 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x02, - 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x01, - 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x01, - 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, - 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x03, - 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x02, - 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x01, - 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x01, - 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, - 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x03, 0x1a, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x03, - 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x02, - 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x01, - 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x01, - 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, - 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, - 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x02, - 0x13, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, - 0x12, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x01, - 0x12, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x03, - 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x02, - 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, - 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x01, - 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x02, - 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x03, - 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x02, - 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, - 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x03, - 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, - 0x27, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, - 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x02, - 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, - 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x01, - 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x02, - 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, 0x2c, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x03, - 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x02, - 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x01, - 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x01, - 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x02, - 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x03, 0x31, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x03, - 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x02, - 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x01, - 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x01, - 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x02, - 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x03, - 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x02, - 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x01, - 0x37, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x01, - 0x39, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x02, - 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, 0x3b, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, - 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x02, - 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x01, - 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x01, - 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x03, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x02, - 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x03, - 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, - 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x01, - 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x01, - 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x02, - 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, 0x45, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x03, - 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x02, - 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, - 0x46, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x01, - 0x48, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x02, - 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, 0x4a, 0x00, 0x00, 0x4b, - 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, - 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, - 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, - 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, - 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, - 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, - 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x64, 0x00, 0x00, 0x64, - 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, 0x00, 0x66, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, - 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, - 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, - 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, - 0x00, 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, - 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7a, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, - 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, - 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, - 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, - 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8c, - 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8e, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, - 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x01, 0x4b, 0x00, 0x00, 0x01, - 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, 0x4d, 0x00, 0x00, 0x01, - 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x02, - 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x03, - 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, - 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x01, - 0x54, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x01, - 0x57, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, - 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, 0x5a, 0x00, 0x00, 0x03, - 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x02, - 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x01, - 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x61, 0x00, 0x00, 0x01, - 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x02, - 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, 0x64, 0x00, 0x00, 0x03, - 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x02, - 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x69, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x01, - 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x02, 0x6b, 0x00, 0x00, 0x01, - 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x02, - 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, 0x03, 0x6f, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, 0x6e, 0x00, 0x00, 0x03, - 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x02, - 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, 0x73, 0x00, 0x00, 0x01, - 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, 0x75, 0x00, 0x00, 0x01, - 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x02, - 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, 0x79, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, 0x78, 0x00, 0x00, 0x03, - 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7a, 0x00, 0x00, 0x02, - 0x7a, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x01, - 0x7c, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x01, - 0x7f, 0x00, 0x00, 0x01, 0x7e, 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, - 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x83, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x03, - 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x02, - 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x01, - 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x01, - 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x03, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x02, - 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, 0x8a, 0x00, 0x00, 0x03, 0x8d, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, 0x00, 0x00, 0x02, 0x8c, 0x00, 0x00, 0x03, - 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8e, 0x00, 0x00, 0x02, - 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x01, - 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, - 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, - 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xe4, 0x9a, 0xd6, 0xa8, - 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, - 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, - 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, - 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, - 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, - 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xa8, 0xd6, 0x9a, 0xe4, - 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, - 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, - 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, - 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, - 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, - 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x57, 0xd6, 0x4b, 0xca, - 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, - 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, - 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, - 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, - 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, - 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x1b, 0x9a, 0x0a, 0x8a, - 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, - 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, - 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, - 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, - 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, - 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x35, 0x4b, 0x40, 0x40, - 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, - 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, - 0x40, 0x40, 0x4b, 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, - 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, - 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, - 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, - 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, - 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, - 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, - 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, - 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, - 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xbf, 0x40, 0xca, 0x4b, - 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, - 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, - 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, - 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, - 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, - 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, - 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, - 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, - 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, - 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, - 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, - 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, - 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, - 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, - 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, - 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, - 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, - 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, - 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x24, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, - 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00, 0x35, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, - 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x42, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, - 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x45, 0x00, - 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x47, 0x00, 0x00, 0x25, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x27, 0x00, 0x00, 0x24, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x00, 0x1e, 0x24, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x06, - 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x00, 0x1e, 0x23, 0x00, 0x00, 0x36, - 0x22, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x06, 0x23, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x4e, 0x21, 0x00, 0x00, 0x1e, - 0x22, 0x00, 0x00, 0x36, 0x21, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x4e, - 0x20, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x36, - 0x21, 0x00, 0x00, 0x4e, 0x1f, 0x00, 0x00, 0x1e, 0x20, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x06, - 0x20, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x4e, 0x1e, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x06, - 0x1e, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x36, - 0x1d, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x4e, 0x1c, 0x00, 0x00, 0x1e, - 0x1d, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x4e, - 0x1b, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x06, 0x1b, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x36, - 0x1c, 0x00, 0x00, 0x4e, 0x1a, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x06, - 0x1b, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x4e, 0x19, 0x00, 0x00, 0x1e, 0x1a, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x06, - 0x19, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x4e, 0x18, 0x00, 0x00, 0x1e, 0x19, 0x00, 0x00, 0x36, - 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x4e, 0x17, 0x00, 0x00, 0x1e, - 0x18, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x4e, - 0x16, 0x00, 0x00, 0x1e, 0x17, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x06, 0x16, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x36, - 0x17, 0x00, 0x00, 0x4e, 0x15, 0x00, 0x00, 0x1e, 0x16, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x06, - 0x16, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x4e, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x06, - 0x14, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x00, 0x1e, 0x14, 0x00, 0x00, 0x36, - 0x13, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x00, 0x1e, - 0x13, 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0x4e, - 0x11, 0x00, 0x00, 0x1e, 0x12, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x36, - 0x12, 0x00, 0x00, 0x4e, 0x10, 0x00, 0x00, 0x1e, 0x11, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x06, - 0x11, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x4e, 0x0f, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x06, - 0x0f, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x4e, 0x0e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x36, - 0x0e, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x4e, 0x0d, 0x00, 0x00, 0x1e, - 0x0e, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x4e, - 0x0c, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x36, - 0x0d, 0x00, 0x00, 0x4e, 0x0b, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, - 0x0c, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x4e, 0x0a, 0x00, 0x00, 0x1e, 0x0b, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x06, - 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, 0x1e, 0x0a, 0x00, 0x00, 0x36, - 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, - 0x09, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x4e, - 0x07, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, - 0x08, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, - 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, - 0x05, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, - 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, - 0x04, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, - 0x02, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, - 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, - 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x27, 0x00, 0x00, 0x1e, 0x25, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x06, - 0x27, 0x00, 0x00, 0x06, 0x25, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x4e, 0x28, 0x00, 0x00, 0x1e, 0x27, 0x00, 0x00, 0x36, - 0x28, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x4e, 0x29, 0x00, 0x00, 0x1e, - 0x28, 0x00, 0x00, 0x36, 0x29, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, 0x4e, - 0x2a, 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x36, - 0x29, 0x00, 0x00, 0x4e, 0x2b, 0x00, 0x00, 0x1e, 0x2a, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x06, - 0x2a, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x4e, 0x2c, 0x00, 0x00, 0x1e, 0x2b, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x06, - 0x2c, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x4e, 0x2d, 0x00, 0x00, 0x1e, 0x2c, 0x00, 0x00, 0x36, - 0x2d, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x06, 0x2c, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x00, 0x1e, - 0x2d, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x4e, - 0x2f, 0x00, 0x00, 0x1e, 0x2e, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x06, 0x2f, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x36, - 0x2e, 0x00, 0x00, 0x4e, 0x30, 0x00, 0x00, 0x1e, 0x2f, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, - 0x2f, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x4e, 0x31, 0x00, 0x00, 0x1e, 0x30, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x06, - 0x31, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x00, 0x1e, 0x31, 0x00, 0x00, 0x36, - 0x32, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x00, 0x1e, - 0x32, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x36, 0x32, 0x00, 0x00, 0x4e, - 0x34, 0x00, 0x00, 0x1e, 0x33, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x06, 0x34, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x36, - 0x33, 0x00, 0x00, 0x4e, 0x35, 0x00, 0x00, 0x1e, 0x34, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x06, - 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x4e, 0x36, 0x00, 0x00, 0x1e, 0x35, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x06, - 0x36, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x4e, 0x37, 0x00, 0x00, 0x1e, 0x36, 0x00, 0x00, 0x36, - 0x37, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0x1e, - 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x4e, - 0x39, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x36, - 0x38, 0x00, 0x00, 0x4e, 0x3a, 0x00, 0x00, 0x1e, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x06, - 0x39, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x4e, 0x3b, 0x00, 0x00, 0x1e, 0x3a, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x06, - 0x3b, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x4e, 0x3c, 0x00, 0x00, 0x1e, 0x3b, 0x00, 0x00, 0x36, - 0x3c, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x06, 0x3b, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x1e, - 0x3c, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x4e, - 0x3e, 0x00, 0x00, 0x1e, 0x3d, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x36, - 0x3d, 0x00, 0x00, 0x4e, 0x3f, 0x00, 0x00, 0x1e, 0x3e, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x06, - 0x3e, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x4e, 0x40, 0x00, 0x00, 0x1e, 0x3f, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x06, - 0x40, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x00, 0x36, - 0x41, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x00, 0x1e, - 0x41, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x4e, - 0x43, 0x00, 0x00, 0x1e, 0x42, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x06, 0x43, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x36, - 0x42, 0x00, 0x00, 0x4e, 0x44, 0x00, 0x00, 0x1e, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x06, - 0x43, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x4e, 0x45, 0x00, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x06, - 0x45, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x4e, 0x46, 0x00, 0x00, 0x1e, 0x45, 0x00, 0x00, 0x36, - 0x46, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x4e, 0x47, 0x00, 0x00, 0x1e, - 0x46, 0x00, 0x00, 0x36, 0x47, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, 0x4e, - 0x48, 0x00, 0x00, 0x1e, 0x47, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x36, - 0x47, 0x00, 0x00, 0x4e, 0x49, 0x00, 0x00, 0x1e, 0x48, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x06, - 0x48, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x4e, 0x25, 0x00, 0x00, 0x1e, 0x49, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x06, - 0x25, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x4e, - ]), - }, -}; +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; + +// Binary tile data produced using version 1.2 of the tile format. +export const TILE_DATA_1_3 = { + versionMajor: 1, + versionMinor: 3, + headerLength: 84, + rectangle: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, + 0x41, 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc4, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x50, 0x09, 0x00, 0x00, 0x50, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x35, 0x32, 0x7d, 0x2c, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, + 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x39, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x32, 0x34, 0x7d, 0x7d, 0x2c, 0x22, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, + 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, + 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, + 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, + 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, + 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, + 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, + 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, + 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, + 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, + 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, + 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, + 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, + 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, + 0x3a, 0x5b, 0x37, 0x2e, 0x36, 0x33, 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, + 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, + 0x39, 0x32, 0x32, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, + 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, + 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, + 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, + 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x35, + 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x30, 0x2e, + 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, + 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, + 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, + 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, + 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, + 0x03, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, + ]), + }, + lineString: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, + 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, + 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, + 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, + 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, + 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, + 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, + 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, + 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, + 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, + 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, + 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, + 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, + 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, + 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, + 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, + 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, + 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, + 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, + 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, + 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, + 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, + 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, + 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, + 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, + 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, + ]), + }, + lineStrings: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xdc, 0x17, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, + 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x36, 0x38, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, + 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, + 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x37, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, + 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, + 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, + 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, + 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, + 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, 0x32, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, + 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, + 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, + 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, + 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, + 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, + 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, + 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, + 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, + 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x73, + 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, + 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, + 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, + 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, + 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, + 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, + 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, + 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, + 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, + 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, + 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, + 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, + 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x03, 0x00, 0xa7, 0xaa, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, + 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, + 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, + 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, + 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, + 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, + 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, + 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, + 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, + 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, + 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, + 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, + 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, + 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x60, + 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x0e, + 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x39, + 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, + 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, + 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, + 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, + 0x09, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, + 0x0a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, + 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, + 0x0a, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, + 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, + 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, + 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, + 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, + 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, + 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, + ]), + }, + triangles: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x16, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x10, 0x16, 0x00, 0x00, 0x54, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x30, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, + 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x34, + 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, + 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, + 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, + 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x39, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, + 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, 0x30, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x38, 0x7d, 0x2c, 0x22, + 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x31, 0x38, 0x33, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, + 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, + 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, + 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, + 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, + 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, + 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, + 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, + 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, + 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, + 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, + 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, + 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, + 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, + 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, + 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, + 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, + 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, + 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, + 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, + 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, + 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, + 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, + 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, + 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, + 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, + 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, + 0x65, 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, + 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, + 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, + 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, + 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, + 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, + 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, + 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, + 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, + 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, + 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, + 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, + 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, + 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, + 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, + 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, + 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, + 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, + 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, + 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, + 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, + 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, + 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, + 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, + 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, + 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x4e, 0xa7, 0xaa, 0x03, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, + 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, + 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x06, + 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x36, + 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, + 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, + 0x04, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x04, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, + 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, + 0x03, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x07, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, + 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, + 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, + 0x06, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, + 0x08, 0x00, 0x00, 0x4e, + ]), + }, + cylinder: { + flags: IModelTileIO.Flags.ContainsCurves, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x03, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, + 0x34, 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, + 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, + 0xb1, 0xff, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x3d, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x64, 0x3d, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x32, 0x33, 0x33, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, + 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x39, + 0x30, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, + 0x3a, 0x33, 0x36, 0x33, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, + 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x33, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x31, 0x36, 0x32, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, + 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, + 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x33, 0x32, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, + 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, + 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, + 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, + 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, + 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, + 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, + 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x45, 0x64, 0x67, 0x65, + 0x73, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, + 0x45, 0x64, 0x67, 0x65, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, + 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, 0x6c, 0x68, 0x6f, 0x75, + 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, + 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, + 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, + 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, + 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, + 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x34, 0x36, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x36, 0x2e, 0x31, 0x30, + 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, 0x2e, 0x31, 0x30, 0x34, + 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, 0x31, 0x35, 0x36, 0x37, + 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, + 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, + 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x32, + 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x33, 0x2e, + 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x2c, 0x22, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, 0x66, 0x6f, + 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, + 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, 0x20, + 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, + 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, + 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, + 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, + 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, + 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xd0, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, + 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, + 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, + 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, + 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, + 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, + 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, + 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, + 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, + 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, + 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x23, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x26, + 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x26, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x26, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x26, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x26, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, 0x00, 0x00, 0x43, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, + 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x58, 0x00, + 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x59, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, + 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, + 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, + 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, + 0x00, 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6c, 0x00, + 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6d, + 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x6f, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, + 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, + 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, + 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x82, 0x00, 0x00, 0x81, + 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x84, 0x00, 0x00, 0x83, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, + 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, + 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, + 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, + 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, + 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, + 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x29, 0x00, + 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, + 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, + 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, + 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3d, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, + 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, + 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, + 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, + 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x24, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, + 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x02, + 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x01, + 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x01, + 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, + 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, 0x1f, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x03, + 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x02, + 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x01, 0x1d, 0x00, 0x00, 0x01, + 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x01, + 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, + 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x03, 0x1a, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x03, + 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x02, + 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x01, + 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x01, + 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, + 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x02, + 0x13, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x03, + 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x02, + 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x01, + 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x01, + 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x02, + 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x03, + 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x02, + 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, + 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x03, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, + 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, + 0x27, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, + 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x02, + 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, + 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x01, + 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x02, + 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, 0x2c, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x03, + 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x02, + 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x01, + 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x01, + 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x02, + 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x03, 0x31, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x03, + 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x02, + 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x01, + 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x01, + 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x02, + 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x03, + 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x02, + 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x01, + 0x37, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x01, + 0x39, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x02, + 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, 0x3b, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, + 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x02, + 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x01, + 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x01, + 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x03, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x02, + 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x03, + 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, + 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x01, + 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x01, + 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x02, + 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, 0x45, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x03, + 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x02, + 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, + 0x46, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x01, + 0x48, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x02, + 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, 0x4a, 0x00, 0x00, 0x4b, + 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, + 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x50, + 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, + 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, + 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, + 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x64, 0x00, 0x00, 0x64, + 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, 0x00, 0x66, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, + 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, + 0x00, 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, + 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7a, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, + 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, + 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, + 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, + 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8c, + 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8e, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, + 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x01, 0x4b, 0x00, 0x00, 0x01, + 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, 0x4d, 0x00, 0x00, 0x01, + 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x02, + 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x03, + 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, + 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x01, + 0x54, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x01, + 0x57, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, + 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, 0x5a, 0x00, 0x00, 0x03, + 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x02, + 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x01, + 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x61, 0x00, 0x00, 0x01, + 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x02, + 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, 0x64, 0x00, 0x00, 0x03, + 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x02, + 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x69, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x01, + 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x02, 0x6b, 0x00, 0x00, 0x01, + 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x02, + 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, 0x03, 0x6f, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, 0x6e, 0x00, 0x00, 0x03, + 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x02, + 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, 0x73, 0x00, 0x00, 0x01, + 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, 0x75, 0x00, 0x00, 0x01, + 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x02, + 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, 0x79, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, 0x78, 0x00, 0x00, 0x03, + 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7a, 0x00, 0x00, 0x02, + 0x7a, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x01, + 0x7c, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x01, + 0x7f, 0x00, 0x00, 0x01, 0x7e, 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, + 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x83, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x03, + 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x02, + 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x01, + 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x01, + 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x03, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x02, + 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, 0x8a, 0x00, 0x00, 0x03, 0x8d, 0x00, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, 0x00, 0x00, 0x02, 0x8c, 0x00, 0x00, 0x03, + 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8e, 0x00, 0x00, 0x02, + 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x01, + 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, + 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, + 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xe4, 0x9a, 0xd6, 0xa8, + 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, + 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, + 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, + 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, + 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, + 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xa8, 0xd6, 0x9a, 0xe4, + 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, + 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, + 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, + 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, + 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, + 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x57, 0xd6, 0x4b, 0xca, + 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, + 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, + 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, + 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, + 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, + 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x1b, 0x9a, 0x0a, 0x8a, + 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, + 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, + 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, + 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, + 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, + 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x35, 0x4b, 0x40, 0x40, + 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, + 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, + 0x40, 0x40, 0x4b, 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, + 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, + 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, + 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, + 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, + 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, + 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, + 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, + 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, + 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xbf, 0x40, 0xca, 0x4b, + 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, + 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, + 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, + 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, + 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2a, 0x00, + 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, + 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, + 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, + 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, + 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, + 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, + 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, + 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, + 0x00, 0x22, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, + 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x14, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2d, 0x00, + 0x00, 0x2d, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, + 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2e, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00, 0x35, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x41, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, + 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x45, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x47, 0x00, 0x00, 0x25, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x27, 0x00, + 0x00, 0x27, 0x00, 0x00, 0x24, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x23, 0x00, 0x00, 0x1e, 0x24, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x06, + 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x36, 0x24, 0x00, 0x00, 0x4e, 0x22, 0x00, 0x00, 0x1e, 0x23, 0x00, 0x00, 0x36, + 0x22, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x06, 0x23, 0x00, 0x00, 0x36, 0x23, 0x00, 0x00, 0x4e, 0x21, 0x00, 0x00, 0x1e, + 0x22, 0x00, 0x00, 0x36, 0x21, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x06, 0x22, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x4e, + 0x20, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x21, 0x00, 0x00, 0x36, + 0x21, 0x00, 0x00, 0x4e, 0x1f, 0x00, 0x00, 0x1e, 0x20, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x06, + 0x20, 0x00, 0x00, 0x36, 0x20, 0x00, 0x00, 0x4e, 0x1e, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x06, + 0x1e, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x36, 0x1f, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x36, + 0x1d, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x4e, 0x1c, 0x00, 0x00, 0x1e, + 0x1d, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x36, 0x1d, 0x00, 0x00, 0x4e, + 0x1b, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x06, 0x1b, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x36, + 0x1c, 0x00, 0x00, 0x4e, 0x1a, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x06, + 0x1b, 0x00, 0x00, 0x36, 0x1b, 0x00, 0x00, 0x4e, 0x19, 0x00, 0x00, 0x1e, 0x1a, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x06, + 0x19, 0x00, 0x00, 0x06, 0x1a, 0x00, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x4e, 0x18, 0x00, 0x00, 0x1e, 0x19, 0x00, 0x00, 0x36, + 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x19, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x4e, 0x17, 0x00, 0x00, 0x1e, + 0x18, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x4e, + 0x16, 0x00, 0x00, 0x1e, 0x17, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x06, 0x16, 0x00, 0x00, 0x06, 0x17, 0x00, 0x00, 0x36, + 0x17, 0x00, 0x00, 0x4e, 0x15, 0x00, 0x00, 0x1e, 0x16, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x06, + 0x16, 0x00, 0x00, 0x36, 0x16, 0x00, 0x00, 0x4e, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x06, + 0x14, 0x00, 0x00, 0x06, 0x15, 0x00, 0x00, 0x36, 0x15, 0x00, 0x00, 0x4e, 0x13, 0x00, 0x00, 0x1e, 0x14, 0x00, 0x00, 0x36, + 0x13, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x4e, 0x12, 0x00, 0x00, 0x1e, + 0x13, 0x00, 0x00, 0x36, 0x12, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x06, 0x13, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0x4e, + 0x11, 0x00, 0x00, 0x1e, 0x12, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x06, 0x12, 0x00, 0x00, 0x36, + 0x12, 0x00, 0x00, 0x4e, 0x10, 0x00, 0x00, 0x1e, 0x11, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x06, + 0x11, 0x00, 0x00, 0x36, 0x11, 0x00, 0x00, 0x4e, 0x0f, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x06, + 0x0f, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x4e, 0x0e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x36, + 0x0e, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x36, 0x0f, 0x00, 0x00, 0x4e, 0x0d, 0x00, 0x00, 0x1e, + 0x0e, 0x00, 0x00, 0x36, 0x0d, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x4e, + 0x0c, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x0d, 0x00, 0x00, 0x36, + 0x0d, 0x00, 0x00, 0x4e, 0x0b, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, + 0x0c, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0x4e, 0x0a, 0x00, 0x00, 0x1e, 0x0b, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x06, + 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x36, 0x0b, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, 0x1e, 0x0a, 0x00, 0x00, 0x36, + 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x36, 0x0a, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x1e, + 0x09, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x36, 0x09, 0x00, 0x00, 0x4e, + 0x07, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x36, + 0x08, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x1e, 0x07, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, + 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x4e, 0x05, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x06, + 0x05, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x1e, 0x05, 0x00, 0x00, 0x36, + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x1e, + 0x04, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x4e, + 0x02, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x36, + 0x03, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, + 0x02, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x4e, 0x27, 0x00, 0x00, 0x1e, 0x25, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x06, + 0x27, 0x00, 0x00, 0x06, 0x25, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x4e, 0x28, 0x00, 0x00, 0x1e, 0x27, 0x00, 0x00, 0x36, + 0x28, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x36, 0x27, 0x00, 0x00, 0x4e, 0x29, 0x00, 0x00, 0x1e, + 0x28, 0x00, 0x00, 0x36, 0x29, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x06, 0x28, 0x00, 0x00, 0x36, 0x28, 0x00, 0x00, 0x4e, + 0x2a, 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x06, 0x2a, 0x00, 0x00, 0x06, 0x29, 0x00, 0x00, 0x36, + 0x29, 0x00, 0x00, 0x4e, 0x2b, 0x00, 0x00, 0x1e, 0x2a, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x06, + 0x2a, 0x00, 0x00, 0x36, 0x2a, 0x00, 0x00, 0x4e, 0x2c, 0x00, 0x00, 0x1e, 0x2b, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x06, + 0x2c, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x4e, 0x2d, 0x00, 0x00, 0x1e, 0x2c, 0x00, 0x00, 0x36, + 0x2d, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x06, 0x2c, 0x00, 0x00, 0x36, 0x2c, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x00, 0x1e, + 0x2d, 0x00, 0x00, 0x36, 0x2e, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x06, 0x2d, 0x00, 0x00, 0x36, 0x2d, 0x00, 0x00, 0x4e, + 0x2f, 0x00, 0x00, 0x1e, 0x2e, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x06, 0x2f, 0x00, 0x00, 0x06, 0x2e, 0x00, 0x00, 0x36, + 0x2e, 0x00, 0x00, 0x4e, 0x30, 0x00, 0x00, 0x1e, 0x2f, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, + 0x2f, 0x00, 0x00, 0x36, 0x2f, 0x00, 0x00, 0x4e, 0x31, 0x00, 0x00, 0x1e, 0x30, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x06, + 0x31, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x36, 0x30, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x00, 0x1e, 0x31, 0x00, 0x00, 0x36, + 0x32, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x06, 0x31, 0x00, 0x00, 0x36, 0x31, 0x00, 0x00, 0x4e, 0x33, 0x00, 0x00, 0x1e, + 0x32, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, 0x36, 0x32, 0x00, 0x00, 0x4e, + 0x34, 0x00, 0x00, 0x1e, 0x33, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x06, 0x34, 0x00, 0x00, 0x06, 0x33, 0x00, 0x00, 0x36, + 0x33, 0x00, 0x00, 0x4e, 0x35, 0x00, 0x00, 0x1e, 0x34, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x06, + 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x4e, 0x36, 0x00, 0x00, 0x1e, 0x35, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x06, + 0x36, 0x00, 0x00, 0x06, 0x35, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x4e, 0x37, 0x00, 0x00, 0x1e, 0x36, 0x00, 0x00, 0x36, + 0x37, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0x1e, + 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x06, 0x37, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x4e, + 0x39, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x06, 0x39, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x36, + 0x38, 0x00, 0x00, 0x4e, 0x3a, 0x00, 0x00, 0x1e, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x06, + 0x39, 0x00, 0x00, 0x36, 0x39, 0x00, 0x00, 0x4e, 0x3b, 0x00, 0x00, 0x1e, 0x3a, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x06, + 0x3b, 0x00, 0x00, 0x06, 0x3a, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x4e, 0x3c, 0x00, 0x00, 0x1e, 0x3b, 0x00, 0x00, 0x36, + 0x3c, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x06, 0x3b, 0x00, 0x00, 0x36, 0x3b, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x1e, + 0x3c, 0x00, 0x00, 0x36, 0x3d, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x06, 0x3c, 0x00, 0x00, 0x36, 0x3c, 0x00, 0x00, 0x4e, + 0x3e, 0x00, 0x00, 0x1e, 0x3d, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x06, 0x3e, 0x00, 0x00, 0x06, 0x3d, 0x00, 0x00, 0x36, + 0x3d, 0x00, 0x00, 0x4e, 0x3f, 0x00, 0x00, 0x1e, 0x3e, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x06, + 0x3e, 0x00, 0x00, 0x36, 0x3e, 0x00, 0x00, 0x4e, 0x40, 0x00, 0x00, 0x1e, 0x3f, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x06, + 0x40, 0x00, 0x00, 0x06, 0x3f, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x00, 0x36, + 0x41, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x36, 0x40, 0x00, 0x00, 0x4e, 0x42, 0x00, 0x00, 0x1e, + 0x41, 0x00, 0x00, 0x36, 0x42, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x06, 0x41, 0x00, 0x00, 0x36, 0x41, 0x00, 0x00, 0x4e, + 0x43, 0x00, 0x00, 0x1e, 0x42, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x06, 0x43, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x36, + 0x42, 0x00, 0x00, 0x4e, 0x44, 0x00, 0x00, 0x1e, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x06, + 0x43, 0x00, 0x00, 0x36, 0x43, 0x00, 0x00, 0x4e, 0x45, 0x00, 0x00, 0x1e, 0x44, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x06, + 0x45, 0x00, 0x00, 0x06, 0x44, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x4e, 0x46, 0x00, 0x00, 0x1e, 0x45, 0x00, 0x00, 0x36, + 0x46, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x06, 0x45, 0x00, 0x00, 0x36, 0x45, 0x00, 0x00, 0x4e, 0x47, 0x00, 0x00, 0x1e, + 0x46, 0x00, 0x00, 0x36, 0x47, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x06, 0x46, 0x00, 0x00, 0x36, 0x46, 0x00, 0x00, 0x4e, + 0x48, 0x00, 0x00, 0x1e, 0x47, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x36, + 0x47, 0x00, 0x00, 0x4e, 0x49, 0x00, 0x00, 0x1e, 0x48, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x06, + 0x48, 0x00, 0x00, 0x36, 0x48, 0x00, 0x00, 0x4e, 0x25, 0x00, 0x00, 0x1e, 0x49, 0x00, 0x00, 0x36, 0x25, 0x00, 0x00, 0x06, + 0x25, 0x00, 0x00, 0x06, 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x4e, + ]), + }, +}; diff --git a/test-apps/testbed/frontend/TileIO.data.1.4.ts b/integration-tests/core/src/frontend/hub/TileIO.data.1.4.ts similarity index 99% rename from test-apps/testbed/frontend/TileIO.data.1.4.ts rename to integration-tests/core/src/frontend/hub/TileIO.data.1.4.ts index 6d0ead9..53044d9 100644 --- a/test-apps/testbed/frontend/TileIO.data.1.4.ts +++ b/integration-tests/core/src/frontend/hub/TileIO.data.1.4.ts @@ -1,1327 +1,1327 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; - -// Binary tile data produced using version 1.2 of the tile format. -export const TILE_DATA_1_4 = { - versionMajor: 1, - versionMinor: 4, - headerLength: 84, - rectangle: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, - 0x41, 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x07, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, 0xa8, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, - 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, - 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, - 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, - 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, - 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, - 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, - 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, - 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, - 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, - 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, - 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x34, 0x2c, - 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x36, - 0x33, 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, 0x65, 0x2d, 0x30, 0x35, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x31, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x32, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, - 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, - 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x35, 0x30, 0x30, - 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, - 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, - 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, - 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, - 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, - 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, - 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, - 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xf8, 0xff, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, - 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, - ]), - }, - lineString: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, - 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, - 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, - 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, - 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, - 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, - 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, - 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, - 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, - 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, - 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, - 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, - 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, - 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, - 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, - 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, - 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, - 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, - 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, - 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, - 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, - 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, - 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, - 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, - 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, - 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, - ]), - }, - lineStrings: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xdc, 0x17, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, - 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x36, 0x38, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, - 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, - 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x37, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, - 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, - 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, - 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, - 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, - 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, - 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, 0x32, 0x2c, 0x22, 0x6c, 0x69, - 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, - 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, - 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, - 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, - 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, - 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, - 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, - 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, - 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, - 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, - 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x73, - 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, - 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, - 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, - 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, - 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, - 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, - 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, - 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, - 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, - 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, - 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, - 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, - 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, - 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, - 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, - 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, - 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, - 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, - 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, - 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x03, 0x00, 0xa7, 0xaa, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, - 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, - 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, - 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, - 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, - 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, - 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, - 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, - 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, - 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, - 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, - 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, - 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, - 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, - 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, - 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, - 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, - 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, - 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, - 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, - 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, - 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, - 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, - 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, - 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, - 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, - 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, - 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, - 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x60, - 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x0e, - 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x39, - 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, - 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, - 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, - 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, - 0x09, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, - 0x0a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, - 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, - 0x0a, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, - 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, - 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, - 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, - 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, - 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, - 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, - ]), - }, - triangles: { - flags: IModelTileIO.Flags.None, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, - 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, - 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, - 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x0f, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0xf4, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, - 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, - 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x39, 0x31, 0x32, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, - 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, - 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, - 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, - 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, - 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x34, 0x38, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, - 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, - 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x30, 0x7d, 0x7d, 0x2c, 0x22, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, - 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, - 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, - 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, - 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, - 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, - 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, - 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, - 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, - 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, - 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, - 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, - 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, - 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, - 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, - 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, - 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, - 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, - 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, - 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, - 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, - 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, - 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, - 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, - 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, - 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, - 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, - 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, - 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, - 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, - 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, - 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x65, 0x64, - 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, - 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, - 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, - 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, - 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, - 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, - 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, - 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x74, 0x72, 0x75, - 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, - 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, - 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, - 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, - 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, - 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, - 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, - 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, - 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, - 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, - 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, - 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, - 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, - 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, - 0x7d, 0x7d, 0x0a, 0x20, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, - 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, - 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, - 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, - 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, - 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, - 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, - 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, - 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, - 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0xa7, 0xaa, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, - 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, - 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, - 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, - 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, - 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, - 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, - 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, - 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, - ]), - }, - cylinder: { - flags: IModelTileIO.Flags.ContainsCurves, - bytes: new Uint8Array([ - 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, - 0x34, 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, - 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, - 0xb1, 0xff, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x2b, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, - 0x02, 0x00, 0x00, 0x00, 0xd0, 0x2a, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x32, 0x33, 0x33, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, - 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, - 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, - 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, - 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, - 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, - 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, - 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x36, 0x33, 0x32, 0x7d, 0x2c, - 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, - 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, - 0x33, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, - 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, - 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, - 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, - 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, - 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, - 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, - 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, - 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, - 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, - 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, - 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, - 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, - 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, - 0x72, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, - 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, - 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, - 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, - 0x34, 0x36, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, - 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, - 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, - 0x36, 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, - 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, - 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, - 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, - 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, - 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x38, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, - 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x37, 0x2c, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x37, 0x2c, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, - 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, - 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, - 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, - 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, - 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, - 0x7d, 0x7d, 0x0a, 0x20, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xfe, 0x7f, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x29, 0x11, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, - 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, - 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, - 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdd, 0xa2, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, - 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xba, 0xc5, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, - 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0xdd, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, - 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6c, 0xec, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, - 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0xd0, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, - 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2f, 0xae, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, - 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x93, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, - 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x5d, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, - 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0x45, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, - 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5d, 0x22, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, - 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, - 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xae, 0x2f, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, - 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, - 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc5, 0x45, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, - 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xec, 0x6c, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, - 0x00, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x28, 0x00, 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x33, 0x00, 0x00, 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, - 0x00, 0x00, 0x26, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, - 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, - 0x00, 0x26, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, - 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, - 0x00, 0x47, 0x00, 0x00, 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, - 0x00, 0x00, 0x26, 0x00, 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, - 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, - 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, - 0x00, 0x54, 0x00, 0x00, 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, - 0x00, 0x00, 0x58, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, - 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, - 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, - 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, - 0x00, 0x00, 0x65, 0x00, 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x66, 0x00, 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, - 0x00, 0x68, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, - 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, - 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, - 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, - 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, - 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, - 0x00, 0x7c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x84, 0x00, - 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, 0x00, 0x85, - 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, - 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, - 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, - 0x00, 0x90, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, - 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, - 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, - 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x29, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, - 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, - 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, - 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, - 0x00, 0x33, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, - 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, - 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, - 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, - 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, - 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, - 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, - 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, - 0x00, 0x47, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, - 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, - 0x23, 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, - 0x22, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, - 0x22, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, - 0x21, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, - 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, - 0x1e, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, - 0x1d, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x01, - 0x1d, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x02, - 0x1c, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x03, - 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, - 0x19, 0x00, 0x00, 0x03, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, - 0x18, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, - 0x18, 0x00, 0x00, 0x01, 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, - 0x17, 0x00, 0x00, 0x01, 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, - 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, - 0x14, 0x00, 0x00, 0x03, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, - 0x13, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, - 0x13, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, - 0x12, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, - 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, - 0x0f, 0x00, 0x00, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, - 0x0e, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, - 0x0e, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, - 0x0d, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x03, - 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x02, - 0x0a, 0x00, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x01, - 0x09, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x01, - 0x09, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, - 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, - 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, - 0x05, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, - 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, - 0x49, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, - 0x25, 0x00, 0x00, 0x03, 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, - 0x27, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, - 0x29, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, - 0x2a, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, - 0x2c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, - 0x2b, 0x00, 0x00, 0x03, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x01, - 0x2c, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x01, - 0x2e, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x02, - 0x2f, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, - 0x2f, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x03, - 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, - 0x30, 0x00, 0x00, 0x03, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, - 0x31, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, - 0x33, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, - 0x34, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, - 0x36, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, - 0x35, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, - 0x36, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, - 0x38, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, - 0x39, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, - 0x3b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, - 0x3a, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, - 0x3b, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, - 0x3d, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, - 0x3e, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x03, 0x3f, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x03, - 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x02, - 0x3f, 0x00, 0x00, 0x03, 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01, - 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x01, - 0x42, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, - 0x43, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, - 0x45, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, - 0x44, 0x00, 0x00, 0x03, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, - 0x45, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, - 0x47, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, - 0x48, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, - 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, - 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, - 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, - 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, - 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, - 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, - 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, - 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, - 0x00, 0x00, 0x62, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, - 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, - 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, - 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, - 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, - 0x00, 0x00, 0x76, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, - 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, - 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, - 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, - 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, - 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, - 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, - 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, 0x00, - 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x01, - 0x4b, 0x00, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, - 0x4d, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, - 0x4e, 0x00, 0x00, 0x02, 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, - 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, - 0x50, 0x00, 0x00, 0x03, 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, - 0x52, 0x00, 0x00, 0x02, 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, - 0x55, 0x00, 0x00, 0x01, 0x54, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, - 0x57, 0x00, 0x00, 0x01, 0x57, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x02, 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, - 0x5b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, - 0x5a, 0x00, 0x00, 0x03, 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, - 0x5c, 0x00, 0x00, 0x02, 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, - 0x5f, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, - 0x61, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x00, 0x02, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, - 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, - 0x64, 0x00, 0x00, 0x03, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x01, - 0x66, 0x00, 0x00, 0x02, 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x69, 0x00, 0x00, 0x01, - 0x69, 0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x02, - 0x6b, 0x00, 0x00, 0x01, 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, - 0x6c, 0x00, 0x00, 0x02, 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, 0x03, - 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, - 0x6e, 0x00, 0x00, 0x03, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, - 0x70, 0x00, 0x00, 0x02, 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, - 0x73, 0x00, 0x00, 0x01, 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, - 0x75, 0x00, 0x00, 0x01, 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, - 0x76, 0x00, 0x00, 0x02, 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, - 0x79, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, - 0x78, 0x00, 0x00, 0x03, 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, - 0x7a, 0x00, 0x00, 0x02, 0x7a, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, - 0x7d, 0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, - 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x7e, 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x02, 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, - 0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, - 0x82, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, - 0x84, 0x00, 0x00, 0x02, 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, - 0x87, 0x00, 0x00, 0x01, 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, - 0x89, 0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x03, 0x8b, 0x00, 0x00, 0x00, - 0x8a, 0x00, 0x00, 0x02, 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, 0x8a, 0x00, 0x00, 0x03, - 0x8d, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, 0x00, 0x00, 0x02, - 0x8c, 0x00, 0x00, 0x03, 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, - 0x8e, 0x00, 0x00, 0x02, 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, 0x01, - 0x91, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, - 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, - 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, - 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, - 0xe4, 0x9a, 0xd6, 0xa8, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, - 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, - 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, - 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, - 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, - 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, - 0xa8, 0xd6, 0x9a, 0xe4, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, - 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, - 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, - 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, - 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, - 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, - 0x57, 0xd6, 0x4b, 0xca, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, - 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, - 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, - 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, 0x1b, 0x9a, - 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, - 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, - 0x1b, 0x9a, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, - 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, - 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, - 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, - 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, - 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, - 0x35, 0x4b, 0x40, 0x40, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, - 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, - 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, - 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, - 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, - 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, - 0x75, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, - 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, - 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, - 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xb4, 0x35, 0xbf, 0x40, - 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, - 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, - 0xbf, 0x40, 0xca, 0x4b, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, - 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, - 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, - 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, - ]), - }, -}; +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; + +// Binary tile data produced using version 1.2 of the tile format. +export const TILE_DATA_1_4 = { + versionMajor: 1, + versionMinor: 4, + headerLength: 84, + rectangle: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x4b, 0x37, 0x89, + 0x41, 0x00, 0x04, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x14, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x03, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x13, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0x07, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, 0xa8, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x34, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, + 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, + 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, + 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, + 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, + 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, + 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, + 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, + 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, + 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, + 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, + 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x34, 0x2c, + 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x36, + 0x33, 0x30, 0x36, 0x35, 0x35, 0x33, 0x37, 0x34, 0x39, 0x39, 0x30, 0x34, 0x36, 0x31, 0x31, 0x65, 0x2d, 0x30, 0x35, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x31, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x32, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, + 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x36, 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x31, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, + 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x35, 0x30, 0x30, + 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x2c, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, + 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, + 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, + 0x5b, 0x2d, 0x32, 0x2e, 0x35, 0x30, 0x30, 0x33, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, + 0x2c, 0x2d, 0x35, 0x2e, 0x30, 0x30, 0x30, 0x37, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x31, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, + 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, + 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, + 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xf8, 0xff, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, + ]), + }, + lineString: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, + 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, + 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, + 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, + 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, + 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, + 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, + 0x35, 0x33, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, + 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, + 0x31, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, + 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, + 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, + 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, 0x34, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, + 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, + 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, + 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, 0x30, 0x30, + 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, + 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, + 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, + 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2c, 0x22, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, + 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, + 0x7d, 0x0a, 0x20, 0x20, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, + 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, + 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, + 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, + 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, + 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, + ]), + }, + lineStrings: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xab, 0xf1, 0xd2, 0x4d, 0x62, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x3d, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00, 0xdc, 0x17, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, + 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x32, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x3a, 0x37, 0x32, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x36, 0x38, 0x34, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x33, 0x36, 0x38, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x3a, 0x34, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, + 0x37, 0x36, 0x30, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, + 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, + 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x31, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x37, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x34, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x34, 0x31, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x38, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, 0x30, + 0x35, 0x32, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, + 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, + 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, + 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, + 0x39, 0x33, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, + 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x35, 0x37, 0x39, 0x30, 0x30, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x34, 0x31, 0x37, 0x37, 0x30, 0x36, 0x36, 0x32, 0x33, 0x32, 0x2c, 0x22, 0x6c, 0x69, + 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x7d, + 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, + 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, + 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x22, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x30, 0x22, 0x2c, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x30, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x30, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x36, 0x2c, 0x22, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, + 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, + 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, + 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, + 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, + 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, + 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, + 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x75, 0x6e, 0x69, + 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x31, 0x36, 0x37, 0x31, 0x31, 0x39, 0x33, 0x35, 0x2c, + 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x38, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x69, 0x73, + 0x50, 0x6c, 0x61, 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x65, + 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, + 0x22, 0x62, 0x76, 0x70, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, 0x32, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, + 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, + 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, + 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x39, 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, + 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x32, 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x37, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, + 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, + 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, + 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, + 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, + 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, + 0x2c, 0x2d, 0x33, 0x30, 0x2e, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, + 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x38, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, 0x7d, 0x7d, 0x0a, + 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xff, 0xac, 0x2a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, + 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, + 0x02, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, + 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, + 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x03, 0x00, 0xa7, 0xaa, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x55, 0xa7, 0xaa, 0xfe, 0x7f, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x55, 0x55, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x7f, + 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0xa7, 0xaa, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xa7, 0xaa, + 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x50, 0xd5, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x90, + 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x36, + 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x09, + 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x0c, + 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x0f, + 0x02, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, + 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x06, + 0x03, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0d, + 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x90, + 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x90, + 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x60, + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0e, 0x04, 0x00, 0x00, 0x0d, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0d, + 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x90, + 0x03, 0x00, 0x00, 0x0f, 0x03, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x33, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x90, + 0x05, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x60, + 0x05, 0x00, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x0d, + 0x05, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x0f, 0x05, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1b, 0x06, 0x00, 0x00, 0x39, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x39, 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x60, + 0x06, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x51, + 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0e, + 0x06, 0x00, 0x00, 0x0d, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x21, + 0x07, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x36, 0x07, 0x00, 0x00, 0x90, + 0x08, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x4e, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x60, + 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x0e, + 0x09, 0x00, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x39, + 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x06, + 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x51, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x0c, + 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x00, 0x0d, 0x08, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00, 0x0f, + 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x21, 0x09, 0x00, 0x00, 0x39, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x60, + 0x09, 0x00, 0x00, 0x39, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x09, + 0x0a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x51, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0d, + 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x60, + 0x0a, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x0c, + 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0e, 0x09, 0x00, 0x00, 0x0d, 0x09, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x0f, + 0x09, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x33, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x60, + 0x0a, 0x00, 0x00, 0x33, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x09, + 0x0b, 0x00, 0x00, 0x09, 0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x4b, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0d, + 0x0b, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x60, 0x0b, 0x00, 0x00, 0x0e, 0x0b, 0x00, 0x00, 0x0d, 0x0b, 0x00, 0x00, 0x60, + 0x0b, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0x0e, + ]), + }, + triangles: { + flags: IModelTileIO.Flags.None, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0xf1, 0xd2, 0x4d, + 0x62, 0x00, 0x1e, 0xc0, 0xc7, 0x4b, 0x37, 0x89, 0x41, 0x00, 0x24, 0xc0, 0x00, 0x00, 0xbd, 0x9a, 0xf2, 0xd7, 0x5a, 0xbe, + 0x55, 0x0e, 0x2d, 0xb2, 0x9d, 0xff, 0x1d, 0x40, 0x39, 0xb4, 0xc8, 0x76, 0xbe, 0xff, 0x23, 0x40, 0x00, 0x00, 0xbd, 0x9a, + 0xf2, 0xd7, 0x5a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x0f, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0xf4, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, 0x7d, + 0x2c, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x35, 0x36, 0x34, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x22, 0x3a, 0x33, 0x34, 0x38, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, + 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, + 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x32, 0x31, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x39, 0x31, 0x32, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, + 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, + 0x31, 0x36, 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x38, 0x34, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, + 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, + 0x37, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x31, 0x35, 0x36, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, + 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x36, + 0x32, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x34, 0x38, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3a, + 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, + 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x32, 0x37, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x32, 0x30, 0x7d, 0x7d, 0x2c, 0x22, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, + 0x52, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, + 0x44, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x22, 0x5d, 0x2c, 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, + 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, + 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, + 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x22, 0x3a, 0x32, 0x35, 0x35, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x3a, 0x7b, 0x22, 0x66, + 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, + 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, + 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, + 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x37, 0x30, 0x36, 0x36, 0x38, 0x37, + 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, + 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x7d, 0x7d, + 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, + 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, + 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, + 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, + 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, + 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, + 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, + 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, + 0x2c, 0x22, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, + 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, + 0x52, 0x67, 0x62, 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, + 0x37, 0x31, 0x33, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, + 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, + 0x31, 0x38, 0x34, 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, + 0x2c, 0x31, 0x2e, 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, + 0x2d, 0x30, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, + 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, + 0x5b, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, + 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, + 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, + 0x5d, 0x7d, 0x2c, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x65, 0x64, + 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, + 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, + 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x31, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x6e, 0x61, + 0x72, 0x22, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3a, 0x22, + 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, + 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x31, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, + 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x31, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x39, 0x2c, 0x22, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x32, 0x2c, 0x22, + 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x74, 0x72, 0x75, + 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, + 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, + 0x30, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x32, 0x38, 0x39, 0x31, 0x39, 0x36, 0x36, 0x31, 0x32, 0x34, 0x39, 0x37, 0x31, 0x33, + 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, + 0x2e, 0x30, 0x30, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x36, 0x32, 0x31, 0x34, 0x39, 0x39, 0x39, 0x36, 0x31, 0x38, 0x34, + 0x34, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, + 0x35, 0x32, 0x36, 0x31, 0x33, 0x31, 0x30, 0x37, 0x34, 0x39, 0x39, 0x38, 0x30, 0x39, 0x32, 0x38, 0x65, 0x2d, 0x30, 0x38, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x2c, 0x31, + 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x3a, 0x5b, 0x37, 0x2e, + 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x32, 0x2c, 0x31, 0x30, 0x2e, + 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x30, 0x30, + 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, + 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x37, 0x2e, 0x35, 0x30, 0x31, 0x31, 0x32, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x32, 0x2c, 0x2d, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x38, 0x2c, 0x2d, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x37, 0x35, 0x30, 0x5d, 0x7d, 0x2c, + 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x33, 0x39, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, + 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, + 0x7d, 0x7d, 0x0a, 0x20, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xa7, 0xaa, 0xf8, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xf8, 0xff, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0xf8, 0xff, + 0xfe, 0x7f, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, + 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, + 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, + 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, + 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0xa7, 0xaa, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xf8, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, + 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0xfe, 0x7f, 0xfe, 0x7f, 0x01, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xa7, 0xaa, 0x03, 0x00, 0xfe, 0x7f, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x03, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x55, 0x55, 0x03, 0x00, + 0xfe, 0x7f, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, + 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, + 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, + ]), + }, + cylinder: { + flags: IModelTileIO.Flags.ContainsCurves, + bytes: new Uint8Array([ + 0x69, 0x4d, 0x64, 0x6c, 0x04, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd6, 0xc5, 0x6d, + 0x34, 0x00, 0x00, 0xc0, 0x39, 0xd6, 0xc5, 0x6d, 0x34, 0x00, 0x00, 0xc0, 0x56, 0xc1, 0xa8, 0xa4, 0x4e, 0x00, 0x08, 0xc0, + 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0x8e, 0x53, 0x74, 0x24, 0x97, 0xff, 0xff, 0x3f, 0xaa, 0x3e, 0x57, 0x5b, + 0xb1, 0xff, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x2b, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x54, 0x46, + 0x02, 0x00, 0x00, 0x00, 0xd0, 0x2a, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x22, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x32, 0x33, 0x33, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x30, + 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x37, 0x32, 0x38, 0x2c, + 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x34, 0x39, 0x32, 0x38, 0x7d, 0x2c, 0x22, + 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, + 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, + 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x37, 0x33, 0x30, 0x34, 0x7d, 0x2c, 0x22, 0x62, + 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x7b, + 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, + 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x32, 0x39, 0x36, + 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x33, 0x36, 0x33, 0x32, 0x7d, 0x2c, + 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x36, 0x34, 0x38, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x36, 0x36, + 0x35, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, + 0x3a, 0x31, 0x32, 0x39, 0x36, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x32, + 0x33, 0x33, 0x36, 0x7d, 0x2c, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, + 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x22, 0x3a, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x62, 0x79, + 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3a, 0x38, 0x36, 0x34, 0x2c, 0x22, 0x62, 0x79, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x38, 0x31, 0x36, 0x38, 0x7d, 0x7d, 0x2c, 0x22, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, 0x22, 0x4b, 0x48, 0x52, 0x5f, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x5f, 0x67, 0x6c, 0x54, 0x46, 0x22, 0x2c, 0x22, 0x57, 0x45, 0x42, 0x33, 0x44, 0x5f, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x5d, 0x2c, + 0x22, 0x67, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x22, 0x3a, 0x5b, + 0x22, 0x4f, 0x45, 0x53, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, + 0x69, 0x6e, 0x74, 0x22, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x3a, 0x7b, 0x22, + 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x3a, 0x7b, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x22, + 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, + 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x30, 0x2c, + 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x3a, 0x30, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4d, 0x65, 0x73, 0x68, + 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, + 0x3a, 0x5b, 0x7b, 0x22, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x69, + 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, + 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x51, 0x75, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x69, 0x6c, + 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x2c, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x50, 0x61, 0x69, 0x72, 0x73, 0x30, 0x53, + 0x69, 0x6c, 0x68, 0x6f, 0x75, 0x65, 0x74, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x7d, 0x2c, 0x22, 0x69, 0x73, 0x50, 0x6c, 0x61, + 0x6e, 0x61, 0x72, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x22, 0x3a, 0x22, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x30, 0x22, 0x2c, 0x22, 0x73, 0x75, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x22, 0x62, 0x76, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x22, + 0x62, 0x76, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x30, 0x22, 0x2c, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x31, + 0x34, 0x36, 0x2c, 0x22, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x68, + 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x2c, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6e, 0x75, 0x6d, 0x52, 0x67, 0x62, + 0x61, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3a, 0x5b, + 0x36, 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, + 0x30, 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x36, + 0x2e, 0x31, 0x30, 0x34, 0x35, 0x32, 0x34, 0x32, 0x39, 0x39, 0x39, 0x39, 0x32, 0x33, 0x37, 0x30, 0x30, 0x65, 0x2d, 0x30, + 0x35, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x39, 0x2e, + 0x31, 0x35, 0x36, 0x37, 0x38, 0x36, 0x34, 0x34, 0x39, 0x39, 0x38, 0x38, 0x35, 0x35, 0x35, 0x30, 0x65, 0x2d, 0x30, 0x35, + 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x38, 0x2c, 0x31, 0x2e, 0x30, 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x61, + 0x78, 0x22, 0x3a, 0x5b, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x39, 0x37, 0x2c, 0x32, 0x2e, 0x30, 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x37, 0x2c, 0x33, 0x2e, 0x30, 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, + 0x5d, 0x2c, 0x22, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x22, 0x3a, 0x5b, 0x2d, 0x32, 0x2e, 0x30, + 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x32, 0x2e, 0x30, + 0x30, 0x30, 0x32, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x2c, 0x2d, 0x33, 0x2e, 0x30, + 0x30, 0x30, 0x34, 0x34, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5d, 0x7d, 0x2c, 0x22, 0x75, + 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x3a, 0x36, 0x35, 0x32, 0x38, 0x30, 0x2c, 0x22, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3a, 0x35, 0x38, 0x34, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x22, 0x4d, 0x65, + 0x73, 0x68, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x22, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x3a, 0x7b, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x7d, + 0x7d, 0x7d, 0x0a, 0x20, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xfe, 0x7f, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x41, 0xd2, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xc5, 0x69, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x29, 0x11, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xbb, 0x07, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x38, 0x54, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0xfb, 0xbf, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, + 0x07, 0xfe, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, + 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x80, 0xcc, 0xcc, 0xf8, 0xff, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xcc, 0xcc, + 0x07, 0xfe, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x07, 0xfe, 0x37, 0x96, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x93, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdd, 0xa2, 0xcc, 0xcc, 0x41, 0xf8, 0xc3, 0xab, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdd, 0xa2, 0xcc, 0xcc, 0xd3, 0xee, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, + 0xd3, 0xee, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xae, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x07, 0xe2, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc5, 0xba, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xba, 0xc5, 0xcc, 0xcc, 0x41, 0xd2, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc5, 0xcc, 0xcc, + 0xfb, 0xbf, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xfb, 0xbf, 0xd3, 0xee, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xd0, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0xcc, 0xcc, 0xc3, 0xab, 0x41, 0xf8, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0xdd, 0xcc, 0xcc, 0x37, 0x96, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, + 0x37, 0x96, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xec, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xfe, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0xec, 0xcc, 0xcc, 0xc5, 0x69, 0x07, 0xfe, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xec, 0xcc, 0xcc, + 0x38, 0x54, 0x41, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x38, 0x54, 0x41, 0xf8, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xdd, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0xd0, 0xcc, 0xcc, 0x01, 0x40, 0xd3, 0xee, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xd0, 0xcc, 0xcc, 0xba, 0x2d, 0x07, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, + 0xba, 0x2d, 0x07, 0xe2, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xc5, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0xf4, 0x1d, 0x41, 0xd2, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xba, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2f, 0xae, 0xcc, 0xcc, 0x29, 0x11, 0xfb, 0xbf, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xae, 0xcc, 0xcc, + 0xbb, 0x07, 0xc3, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xbb, 0x07, 0xc3, 0xab, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa2, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x93, 0xcc, 0xcc, 0xf5, 0x01, 0x37, 0x96, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x93, 0xcc, 0xcc, 0x03, 0x00, 0xfe, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, + 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xf5, 0x01, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0x5d, 0xcc, 0xcc, 0xbb, 0x07, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5d, 0xcc, 0xcc, + 0x29, 0x11, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0x29, 0x11, 0x01, 0x40, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x51, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x45, 0xcc, 0xcc, 0xf4, 0x1d, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3a, 0x45, 0xcc, 0xcc, 0xba, 0x2d, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, + 0xba, 0x2d, 0xf4, 0x1d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x3a, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x01, 0x40, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x2f, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x22, 0xcc, 0xcc, 0x38, 0x54, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x22, 0xcc, 0xcc, + 0xc5, 0x69, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xc5, 0x69, 0xf5, 0x01, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x13, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xcc, 0xcc, 0xfe, 0x7f, 0x03, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0xcc, 0xcc, 0x37, 0x96, 0xf5, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, + 0x37, 0x96, 0xf5, 0x01, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x13, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xc3, 0xab, 0xbb, 0x07, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xae, 0x2f, 0xcc, 0xcc, 0xfb, 0xbf, 0x29, 0x11, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x2f, 0xcc, 0xcc, + 0x41, 0xd2, 0xf4, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x41, 0xd2, 0xf4, 0x1d, + 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x3a, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x45, 0xcc, 0xcc, 0x07, 0xe2, 0xba, 0x2d, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc5, 0x45, 0xcc, 0xcc, 0xd3, 0xee, 0x01, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, + 0xd3, 0xee, 0x01, 0x40, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x51, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x41, 0xf8, 0x38, 0x54, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdd, 0x5d, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xec, 0x6c, 0xcc, 0xcc, 0x07, 0xfe, 0xc5, 0x69, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x6c, 0xcc, 0xcc, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x26, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x26, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x26, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2a, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x26, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x26, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x26, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x26, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x26, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x26, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x26, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x26, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x26, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x26, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x26, + 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x26, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x26, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x26, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x26, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x26, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x26, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x25, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, + 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x50, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, + 0x00, 0x00, 0x51, 0x00, 0x00, 0x50, 0x00, 0x00, 0x52, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, + 0x53, 0x00, 0x00, 0x52, 0x00, 0x00, 0x54, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, + 0x00, 0x54, 0x00, 0x00, 0x56, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, + 0x00, 0x00, 0x58, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x5b, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x5f, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, + 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x62, 0x00, 0x00, 0x64, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, + 0x00, 0x00, 0x65, 0x00, 0x00, 0x64, 0x00, 0x00, 0x66, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x66, 0x00, 0x00, 0x68, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, + 0x00, 0x68, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x6f, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x72, 0x00, 0x00, 0x71, + 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x74, 0x00, 0x00, 0x73, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x76, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, + 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x76, 0x00, 0x00, 0x78, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, + 0x00, 0x00, 0x79, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x84, 0x00, + 0x00, 0x83, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00, 0x00, 0x85, + 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x88, 0x00, 0x00, 0x87, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, + 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, + 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x90, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, + 0x00, 0x90, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x22, 0x00, 0x00, 0x23, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x23, 0x00, 0x00, 0x21, 0x00, 0x00, 0x22, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x19, 0x00, 0x00, 0x17, 0x00, 0x00, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x16, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x12, 0x00, + 0x00, 0x13, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, + 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, + 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x25, 0x00, 0x00, 0x25, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x27, 0x00, 0x00, 0x27, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x29, 0x00, 0x00, 0x28, 0x00, 0x00, 0x28, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, + 0x00, 0x00, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x2b, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x2c, + 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x31, 0x00, 0x00, 0x31, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, + 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, + 0x00, 0x35, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, 0x00, 0x00, 0x37, 0x00, 0x00, 0x36, 0x00, 0x00, 0x36, + 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, 0x38, 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x41, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x43, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x45, 0x00, 0x00, 0x45, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x46, 0x00, 0x00, 0x46, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x47, 0x00, 0x00, 0x47, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x48, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x02, + 0x23, 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x02, 0x23, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x01, + 0x22, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x03, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x01, + 0x22, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, + 0x21, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x03, + 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, + 0x1e, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, + 0x1d, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x1d, 0x00, 0x00, 0x01, + 0x1d, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x02, + 0x1c, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x02, 0x1b, 0x00, 0x00, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x03, + 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x02, + 0x19, 0x00, 0x00, 0x03, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x19, 0x00, 0x00, 0x01, 0x19, 0x00, 0x00, 0x01, + 0x18, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x01, + 0x18, 0x00, 0x00, 0x01, 0x17, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x02, + 0x17, 0x00, 0x00, 0x01, 0x17, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x03, 0x16, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x02, 0x16, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x03, + 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x02, + 0x14, 0x00, 0x00, 0x03, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x01, + 0x13, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x01, + 0x13, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, + 0x12, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x03, + 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x02, + 0x0f, 0x00, 0x00, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x01, + 0x0e, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x01, + 0x0e, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, + 0x0d, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x03, + 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x02, + 0x0a, 0x00, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x01, + 0x09, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x01, + 0x09, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, + 0x08, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x03, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, + 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0x03, + 0x49, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x02, + 0x25, 0x00, 0x00, 0x03, 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x01, + 0x27, 0x00, 0x00, 0x02, 0x27, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x01, + 0x29, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x03, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x02, + 0x2a, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x02, 0x29, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x02, 0x2b, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2a, 0x00, 0x00, 0x02, 0x2a, 0x00, 0x00, 0x03, + 0x2c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x01, 0x2b, 0x00, 0x00, 0x02, + 0x2b, 0x00, 0x00, 0x03, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x01, + 0x2c, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x03, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x01, + 0x2e, 0x00, 0x00, 0x01, 0x2d, 0x00, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x03, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x02, + 0x2f, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00, 0x02, 0x2f, 0x00, 0x00, 0x03, + 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x02, + 0x30, 0x00, 0x00, 0x03, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x01, + 0x31, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x01, + 0x33, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x02, + 0x34, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x03, 0x35, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x03, + 0x36, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x02, + 0x35, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x01, + 0x36, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x01, + 0x38, 0x00, 0x00, 0x01, 0x37, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x03, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x02, + 0x39, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x03, 0x3a, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x01, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x03, + 0x3b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x02, + 0x3a, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x01, + 0x3b, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x01, + 0x3d, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x02, + 0x3e, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x01, 0x3d, 0x00, 0x00, 0x02, 0x3d, 0x00, 0x00, 0x03, 0x3f, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x03, + 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x02, + 0x3f, 0x00, 0x00, 0x03, 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x01, + 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x01, + 0x42, 0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x02, 0x41, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x02, + 0x43, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x01, 0x42, 0x00, 0x00, 0x02, 0x42, 0x00, 0x00, 0x03, 0x44, 0x00, 0x00, 0x00, + 0x43, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00, 0x02, 0x43, 0x00, 0x00, 0x03, + 0x45, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x02, + 0x44, 0x00, 0x00, 0x03, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x01, + 0x45, 0x00, 0x00, 0x02, 0x45, 0x00, 0x00, 0x03, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x01, + 0x47, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x02, 0x46, 0x00, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x02, + 0x48, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x02, 0x47, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x03, + 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x4c, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, + 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x50, 0x00, 0x00, 0x51, 0x00, 0x00, 0x51, 0x00, 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x00, 0x55, 0x00, 0x00, 0x54, 0x00, 0x00, 0x54, + 0x00, 0x00, 0x55, 0x00, 0x00, 0x55, 0x00, 0x00, 0x56, 0x00, 0x00, 0x57, 0x00, 0x00, 0x56, 0x00, 0x00, 0x56, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, 0x00, 0x58, 0x00, 0x00, 0x58, 0x00, 0x00, 0x59, 0x00, + 0x00, 0x59, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, + 0x00, 0x00, 0x62, 0x00, 0x00, 0x62, 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x65, 0x00, 0x00, 0x65, 0x00, 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x66, 0x00, + 0x00, 0x66, 0x00, 0x00, 0x67, 0x00, 0x00, 0x67, 0x00, 0x00, 0x68, 0x00, 0x00, 0x69, 0x00, 0x00, 0x68, 0x00, 0x00, 0x68, + 0x00, 0x00, 0x69, 0x00, 0x00, 0x69, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x6b, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6d, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x6f, + 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x71, 0x00, 0x00, + 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x72, 0x00, 0x00, 0x72, 0x00, 0x00, 0x73, 0x00, 0x00, 0x73, 0x00, 0x00, 0x74, 0x00, + 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, + 0x00, 0x00, 0x76, 0x00, 0x00, 0x76, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x00, 0x79, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7a, 0x00, + 0x00, 0x7a, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x81, 0x00, + 0x00, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x00, 0x00, 0x82, 0x00, 0x00, 0x83, 0x00, 0x00, 0x83, + 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x84, 0x00, 0x00, 0x84, 0x00, 0x00, 0x85, 0x00, 0x00, 0x85, 0x00, 0x00, + 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x87, 0x00, 0x00, 0x87, 0x00, 0x00, 0x88, 0x00, + 0x00, 0x89, 0x00, 0x00, 0x88, 0x00, 0x00, 0x88, 0x00, 0x00, 0x89, 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, + 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8e, 0x00, + 0x00, 0x8e, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x90, 0x00, 0x00, 0x91, 0x00, 0x00, 0x90, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x91, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x01, + 0x4b, 0x00, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x02, + 0x4d, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x03, 0x4f, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x02, 0x4f, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0x00, 0x00, 0x03, + 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x02, 0x51, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x02, + 0x50, 0x00, 0x00, 0x03, 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x02, 0x53, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x01, + 0x52, 0x00, 0x00, 0x02, 0x52, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x01, 0x54, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x03, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x02, + 0x57, 0x00, 0x00, 0x01, 0x57, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x02, 0x56, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x02, 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x03, + 0x5b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x02, + 0x5a, 0x00, 0x00, 0x03, 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x01, + 0x5c, 0x00, 0x00, 0x02, 0x5c, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x02, 0x5f, 0x00, 0x00, 0x01, + 0x5f, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x02, 0x5e, 0x00, 0x00, 0x03, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, + 0x61, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x03, 0x63, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x02, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62, 0x00, 0x00, 0x03, + 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x02, 0x65, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x02, + 0x64, 0x00, 0x00, 0x03, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x02, 0x67, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x01, + 0x66, 0x00, 0x00, 0x02, 0x66, 0x00, 0x00, 0x03, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x69, 0x00, 0x00, 0x01, + 0x69, 0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x02, 0x68, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x02, + 0x6b, 0x00, 0x00, 0x01, 0x6b, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x02, 0x6a, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x02, 0x6d, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x02, 0x6c, 0x00, 0x00, 0x03, + 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x02, 0x6f, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x02, + 0x6e, 0x00, 0x00, 0x03, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x02, 0x71, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, + 0x70, 0x00, 0x00, 0x02, 0x70, 0x00, 0x00, 0x03, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x02, 0x73, 0x00, 0x00, 0x01, + 0x73, 0x00, 0x00, 0x01, 0x72, 0x00, 0x00, 0x02, 0x72, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x02, + 0x75, 0x00, 0x00, 0x01, 0x75, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x03, 0x77, 0x00, 0x00, 0x00, + 0x76, 0x00, 0x00, 0x02, 0x77, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x76, 0x00, 0x00, 0x03, + 0x79, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x02, + 0x78, 0x00, 0x00, 0x03, 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x7b, 0x00, 0x00, 0x01, 0x7b, 0x00, 0x00, 0x01, + 0x7a, 0x00, 0x00, 0x02, 0x7a, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x7d, 0x00, 0x00, 0x01, + 0x7d, 0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x02, + 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x7e, 0x00, 0x00, 0x02, 0x7e, 0x00, 0x00, 0x03, 0x81, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x02, 0x81, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, + 0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, + 0x82, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x01, + 0x84, 0x00, 0x00, 0x02, 0x84, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x02, 0x87, 0x00, 0x00, 0x01, + 0x87, 0x00, 0x00, 0x01, 0x86, 0x00, 0x00, 0x02, 0x86, 0x00, 0x00, 0x03, 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x02, + 0x89, 0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x03, 0x8b, 0x00, 0x00, 0x00, + 0x8a, 0x00, 0x00, 0x02, 0x8b, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x02, 0x8a, 0x00, 0x00, 0x03, + 0x8d, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x02, 0x8d, 0x00, 0x00, 0x01, 0x8d, 0x00, 0x00, 0x01, 0x8c, 0x00, 0x00, 0x02, + 0x8c, 0x00, 0x00, 0x03, 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x02, 0x8f, 0x00, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, + 0x8e, 0x00, 0x00, 0x02, 0x8e, 0x00, 0x00, 0x03, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x02, 0x91, 0x00, 0x00, 0x01, + 0x91, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x03, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, + 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xe4, 0x9a, + 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, 0xf5, 0x8a, 0xe4, 0x9a, + 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, 0xe4, 0x9a, 0xd6, 0xa8, + 0xe4, 0x9a, 0xd6, 0xa8, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, + 0xd6, 0xa8, 0xca, 0xb4, 0xd6, 0xa8, 0xca, 0xb4, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, + 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xca, 0xb4, 0xbf, 0xbf, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, + 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xbf, 0xbf, 0xb4, 0xca, 0xb4, 0xca, 0xa8, 0xd6, + 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, 0xb4, 0xca, 0xa8, 0xd6, + 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, 0xa8, 0xd6, 0x9a, 0xe4, + 0xa8, 0xd6, 0x9a, 0xe4, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, + 0x9a, 0xe4, 0x8a, 0xf5, 0x9a, 0xe4, 0x8a, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, + 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x8a, 0xf5, 0x75, 0xf5, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, + 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x75, 0xf5, 0x65, 0xe4, 0x65, 0xe4, 0x57, 0xd6, + 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, 0x65, 0xe4, 0x57, 0xd6, + 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, 0x57, 0xd6, 0x4b, 0xca, + 0x57, 0xd6, 0x4b, 0xca, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, + 0x4b, 0xca, 0x40, 0xbf, 0x4b, 0xca, 0x40, 0xbf, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, + 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x40, 0xbf, 0x35, 0xb4, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, + 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x35, 0xb4, 0x29, 0xa8, 0x29, 0xa8, 0x1b, 0x9a, + 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, 0x29, 0xa8, 0x1b, 0x9a, + 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, 0x1b, 0x9a, 0x0a, 0x8a, + 0x1b, 0x9a, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, + 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, + 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x0a, 0x75, 0x1b, 0x65, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, + 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x1b, 0x65, 0x29, 0x57, 0x29, 0x57, 0x35, 0x4b, + 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, 0x29, 0x57, 0x35, 0x4b, + 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, 0x35, 0x4b, 0x40, 0x40, + 0x35, 0x4b, 0x40, 0x40, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, + 0x40, 0x40, 0x4b, 0x35, 0x40, 0x40, 0x4b, 0x35, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, + 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x4b, 0x35, 0x57, 0x29, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, + 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x57, 0x29, 0x65, 0x1b, 0x65, 0x1b, 0x75, 0x0a, + 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, 0x65, 0x1b, 0x75, 0x0a, + 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, 0x75, 0x0a, 0x8a, 0x0a, + 0x75, 0x0a, 0x8a, 0x0a, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, + 0x8a, 0x0a, 0x9a, 0x1b, 0x8a, 0x0a, 0x9a, 0x1b, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, + 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0x9a, 0x1b, 0xa8, 0x29, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, + 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xa8, 0x29, 0xb4, 0x35, 0xb4, 0x35, 0xbf, 0x40, + 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, 0xb4, 0x35, 0xbf, 0x40, + 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, 0xbf, 0x40, 0xca, 0x4b, + 0xbf, 0x40, 0xca, 0x4b, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, + 0xca, 0x4b, 0xd6, 0x57, 0xca, 0x4b, 0xd6, 0x57, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, + 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xd6, 0x57, 0xe4, 0x65, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, + 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, 0xe4, 0x65, 0xf5, 0x75, + ]), + }, +}; diff --git a/test-apps/testbed/frontend/TileIO.data.fake.ts b/integration-tests/core/src/frontend/hub/TileIO.data.fake.ts similarity index 94% rename from test-apps/testbed/frontend/TileIO.data.fake.ts rename to integration-tests/core/src/frontend/hub/TileIO.data.fake.ts index 32469f7..c9b042a 100644 --- a/test-apps/testbed/frontend/TileIO.data.fake.ts +++ b/integration-tests/core/src/frontend/hub/TileIO.data.fake.ts @@ -1,107 +1,114 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -import { TileTestData, TileTestCase } from "./TileIO.data"; -import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; - -type TestCaseName = "rectangle" | "triangles" | "lineString" | "lineStrings" | "cylinder"; - -function changeVersionInPlace(bytes: Uint8Array, versionMajor?: number, versionMinor?: number): void { - if (undefined !== versionMinor) { - bytes[4] = (versionMinor & 0x00ff); - bytes[5] = (versionMinor & 0xff00) >> 8; - } - - if (undefined !== versionMajor) { - bytes[6] = (versionMajor & 0x00ff); - bytes[7] = (versionMajor & 0xff00) >> 8; - } -} - -function changeTestCaseVersion(src: TileTestCase, majorVersion?: number, minorVersion?: number): TileTestCase { - const bytes = new Uint8Array(src.bytes); - changeVersionInPlace(bytes, majorVersion, minorVersion); - return { - flags: src.flags, - bytes, - }; -} - -function changeVersion(src: TileTestData, versionMajor?: number, versionMinor?: number): TileTestData { - const dst: TileTestData = { - versionMajor: undefined !== versionMajor ? versionMajor : src.versionMajor, - versionMinor: undefined !== versionMinor ? versionMinor : src.versionMinor, - headerLength: src.headerLength, - rectangle: changeTestCaseVersion(src.rectangle, versionMajor, versionMinor), - lineString: changeTestCaseVersion(src.lineString, versionMajor, versionMinor), - lineStrings: changeTestCaseVersion(src.lineStrings, versionMajor, versionMinor), - triangles: changeTestCaseVersion(src.triangles, versionMajor, versionMinor), - cylinder: changeTestCaseVersion(src.cylinder, versionMajor, versionMinor), - }; - - dst.unreadable = (dst.versionMajor > IModelTileIO.CurrentVersion.Major) ? true : undefined; - return dst; -} - -// Make a copy of the input test data that differs only in the minor version number. -export function changeMinorVersion(src: TileTestData, versionMinor: number): TileTestData { - return changeVersion(src, undefined, versionMinor); -} - -// Make a copy of the input test data that differs only in the major version number. -export function changeMajorVersion(src: TileTestData, versionMajor: number): TileTestData { - return changeVersion(src, versionMajor); -} - -function changeHeaderLengthInPlace(bytes: Uint8Array, data: TileTestData, numPaddingBytes: number): void { - // header length is 32-bit little-endian integer beginning at index 8. - const headerLength = data.headerLength + numPaddingBytes; - bytes[8] = (headerLength & 0xff); - bytes[9] = (headerLength & 0xff00) >>> 8; - bytes[10] = (headerLength & 0xff0000) >>> 0x10; - bytes[11] = (headerLength & 0xff000000) >>> 0x18; - - // tile length is 32-bit little-endian integer beginning at index 80 - const tileLength = ((bytes[80] | (bytes[81] << 8) | (bytes[82] << 0x10) | (bytes[83] << 0x18)) >>> 0) + numPaddingBytes; - bytes[80] = (tileLength & 0xff); - bytes[81] = (tileLength & 0xff00) >>> 8; - bytes[82] = (tileLength & 0xff0000) >>> 0x10; - bytes[83] = (tileLength & 0xff000000) >>> 0x18; -} - -function padTestCaseHeader(data: TileTestData, testCase: TestCaseName, minorVersion: number, numPaddingBytes: number): TileTestCase { - const src = data[testCase]; - const bytes = new Uint8Array(src.bytes.length + numPaddingBytes); - for (let i = 0; i < data.headerLength; i++) - bytes[i] = src.bytes[i]; - - for (let i = 0; i < numPaddingBytes; i++) - bytes[data.headerLength + i] = Math.floor(Math.random() * 0xff); - - for (let i = data.headerLength; i < src.bytes.length; i++) - bytes[i + numPaddingBytes] = src.bytes[i]; - - changeVersionInPlace(bytes, undefined, minorVersion); - changeHeaderLengthInPlace(bytes, data, numPaddingBytes); - - return { - flags: src.flags, - bytes, - }; -} - -// Make a copy of the input test data that differs only in the minor version number and in the header length (appends extra bytes to header) -export function changeHeaderLength(src: TileTestData, versionMinor: number, numPaddingBytes: number): TileTestData { - return { - versionMajor: src.versionMajor, - versionMinor, - headerLength: src.headerLength + numPaddingBytes, - rectangle: padTestCaseHeader(src, "rectangle", versionMinor, numPaddingBytes), - triangles: padTestCaseHeader(src, "triangles", versionMinor, numPaddingBytes), - lineString: padTestCaseHeader(src, "lineString", versionMinor, numPaddingBytes), - lineStrings: padTestCaseHeader(src, "lineStrings", versionMinor, numPaddingBytes), - cylinder: padTestCaseHeader(src, "cylinder", versionMinor, numPaddingBytes), - }; -} +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import { TileTestData, TileTestCase } from "./TileIO.data"; +import { IModelTileIO } from "@bentley/imodeljs-frontend/lib/tile"; + +type TestCaseName = "rectangle" | "triangles" | "lineString" | "lineStrings" | "cylinder"; + +function changeVersionInPlace(bytes: Uint8Array, versionMajor?: number, versionMinor?: number): void { + if (undefined !== versionMinor) { + bytes[4] = (versionMinor & 0x00ff); + bytes[5] = (versionMinor & 0xff00) >> 8; + } + + if (undefined !== versionMajor) { + bytes[6] = (versionMajor & 0x00ff); + bytes[7] = (versionMajor & 0xff00) >> 8; + } +} + +function changeTestCaseVersion(src: TileTestCase, majorVersion?: number, minorVersion?: number): TileTestCase { + const bytes = new Uint8Array(src.bytes); + changeVersionInPlace(bytes, majorVersion, minorVersion); + return { + flags: src.flags, + bytes, + }; +} + +function changeVersion(src: TileTestData, versionMajor?: number, versionMinor?: number): TileTestData { + let dst: TileTestData = { + versionMajor: undefined !== versionMajor ? versionMajor : src.versionMajor, + versionMinor: undefined !== versionMinor ? versionMinor : src.versionMinor, + headerLength: src.headerLength, + rectangle: changeTestCaseVersion(src.rectangle, versionMajor, versionMinor), + lineString: changeTestCaseVersion(src.lineString, versionMajor, versionMinor), + lineStrings: changeTestCaseVersion(src.lineStrings, versionMajor, versionMinor), + triangles: changeTestCaseVersion(src.triangles, versionMajor, versionMinor), + cylinder: changeTestCaseVersion(src.cylinder, versionMajor, versionMinor), + }; + + dst.unreadable = (dst.versionMajor > IModelTileIO.CurrentVersion.Major) ? true : undefined; + + if (undefined !== versionMajor && versionMajor > 1 && 1 === src.versionMajor) { + // Added 4 bytes in v02.00 for empty sub-range bitmask + dst = changeHeaderLength(dst, dst.versionMinor, 4); + } + + return dst; +} + +// Make a copy of the input test data that differs only in the minor version number. +export function changeMinorVersion(src: TileTestData, versionMinor: number): TileTestData { + return changeVersion(src, undefined, versionMinor); +} + +// Make a copy of the input test data that differs only in the major version number. +export function changeMajorVersion(src: TileTestData, versionMajor: number): TileTestData { + return changeVersion(src, versionMajor); +} + +function changeHeaderLengthInPlace(bytes: Uint8Array, data: TileTestData, numPaddingBytes: number): void { + // header length is 32-bit little-endian integer beginning at index 8. + const headerLength = data.headerLength + numPaddingBytes; + bytes[8] = (headerLength & 0xff); + bytes[9] = (headerLength & 0xff00) >>> 8; + bytes[10] = (headerLength & 0xff0000) >>> 0x10; + bytes[11] = (headerLength & 0xff000000) >>> 0x18; + + // tile length is 32-bit little-endian integer beginning at index 80 + const tileLength = ((bytes[80] | (bytes[81] << 8) | (bytes[82] << 0x10) | (bytes[83] << 0x18)) >>> 0) + numPaddingBytes; + bytes[80] = (tileLength & 0xff); + bytes[81] = (tileLength & 0xff00) >>> 8; + bytes[82] = (tileLength & 0xff0000) >>> 0x10; + bytes[83] = (tileLength & 0xff000000) >>> 0x18; +} + +function padTestCaseHeader(data: TileTestData, testCase: TestCaseName, minorVersion: number, numPaddingBytes: number): TileTestCase { + const src = data[testCase]; + const bytes = new Uint8Array(src.bytes.length + numPaddingBytes); + for (let i = 0; i < data.headerLength; i++) + bytes[i] = src.bytes[i]; + + for (let i = 0; i < numPaddingBytes; i++) + bytes[data.headerLength + i] = Math.floor(Math.random() * 0xff); + + for (let i = data.headerLength; i < src.bytes.length; i++) + bytes[i + numPaddingBytes] = src.bytes[i]; + + changeVersionInPlace(bytes, undefined, minorVersion); + changeHeaderLengthInPlace(bytes, data, numPaddingBytes); + + return { + flags: src.flags, + bytes, + }; +} + +// Make a copy of the input test data that differs only in the minor version number and in the header length (appends extra bytes to header) +export function changeHeaderLength(src: TileTestData, versionMinor: number, numPaddingBytes: number): TileTestData { + return { + versionMajor: src.versionMajor, + versionMinor, + headerLength: src.headerLength + numPaddingBytes, + unreadable: src.unreadable, + rectangle: padTestCaseHeader(src, "rectangle", versionMinor, numPaddingBytes), + triangles: padTestCaseHeader(src, "triangles", versionMinor, numPaddingBytes), + lineString: padTestCaseHeader(src, "lineString", versionMinor, numPaddingBytes), + lineStrings: padTestCaseHeader(src, "lineStrings", versionMinor, numPaddingBytes), + cylinder: padTestCaseHeader(src, "cylinder", versionMinor, numPaddingBytes), + }; +} diff --git a/test-apps/testbed/frontend/TileIO.data.ts b/integration-tests/core/src/frontend/hub/TileIO.data.ts similarity index 100% rename from test-apps/testbed/frontend/TileIO.data.ts rename to integration-tests/core/src/frontend/hub/TileIO.data.ts diff --git a/test-apps/testbed/frontend/TileIO.test.ts b/integration-tests/core/src/frontend/hub/TileIO.test.ts similarity index 95% rename from test-apps/testbed/frontend/TileIO.test.ts rename to integration-tests/core/src/frontend/hub/TileIO.test.ts index 7660eb0..367541c 100644 --- a/test-apps/testbed/frontend/TileIO.test.ts +++ b/integration-tests/core/src/frontend/hub/TileIO.test.ts @@ -3,24 +3,23 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { expect } from "chai"; -import { TileIO, IModelTileIO, IModelTileLoader, TileTree, TileRequest } from "@bentley/imodeljs-frontend/lib/tile"; +import { TileIO, IModelTileIO, IModelTile, TileTree, TileRequest } from "@bentley/imodeljs-frontend/lib/tile"; import { SurfaceType } from "@bentley/imodeljs-frontend/lib/rendering"; import { Batch, MeshGraphic, GraphicsArray, Primitive, PolylineGeometry } from "@bentley/imodeljs-frontend/lib/webgl"; import { ModelProps, RelatedElementProps, FeatureIndexType, BatchType, ServerTimeoutError } from "@bentley/imodeljs-common"; import { Id64, Id64String } from "@bentley/bentleyjs-core"; import * as path from "path"; -import { CONSTANTS } from "../common/Testbed"; import { MockRender, RenderGraphic, IModelApp, IModelConnection, GeometricModelState } from "@bentley/imodeljs-frontend"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "../WebGLTestContext"; import { TileTestCase, TileTestData } from "./TileIO.data"; import { TILE_DATA_1_1 } from "./TileIO.data.1.1"; import { TILE_DATA_1_2 } from "./TileIO.data.1.2"; import { TILE_DATA_1_3 } from "./TileIO.data.1.3"; import { TILE_DATA_1_4 } from "./TileIO.data.1.4"; import { changeMinorVersion, changeMajorVersion, changeHeaderLength } from "./TileIO.data.fake"; -import { testOnScreenViewport } from "./TestViewport"; +import { testOnScreenViewport } from "../TestViewport"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); const testCases = [ TILE_DATA_1_1, @@ -104,8 +103,8 @@ async function processRectangle(data: TileTestData, imodel: IModelConnection, pr expect(delta(high.y, 5.0)).to.be.lessThan(0.0005); expect(delta(high.z, 0.0)).to.be.lessThan(0.0005); - expect(result.renderGraphic).not.to.be.undefined; - processGraphic(result.renderGraphic!); + expect(result.graphic).not.to.be.undefined; + processGraphic(result.graphic!); } } @@ -134,8 +133,8 @@ async function processTriangles(data: TileTestData, imodel: IModelConnection, pr expect(delta(high.y, 10.0)).to.be.lessThan(0.00051); expect(delta(high.z, 0.0)).to.be.lessThan(0.0005); - expect(result.renderGraphic).not.to.be.undefined; - processGraphic(result.renderGraphic!); + expect(result.graphic).not.to.be.undefined; + processGraphic(result.graphic!); } } @@ -164,8 +163,8 @@ async function processLineString(data: TileTestData, imodel: IModelConnection, p expect(delta(high.y, 10.0)).to.be.lessThan(0.00051); expect(delta(high.z, 0.0)).to.be.lessThan(0.0005); - expect(result.renderGraphic).not.to.be.undefined; - processGraphic(result.renderGraphic!); + expect(result.graphic).not.to.be.undefined; + processGraphic(result.graphic!); } } @@ -194,8 +193,8 @@ async function processLineStrings(data: TileTestData, imodel: IModelConnection, expect(delta(high.y, 30.0)).to.be.lessThan(0.0016); expect(delta(high.z, 0.0)).to.be.lessThan(0.0005); - expect(result.renderGraphic).not.to.be.undefined; - processGraphic(result.renderGraphic!); + expect(result.graphic).not.to.be.undefined; + processGraphic(result.graphic!); } } @@ -224,8 +223,8 @@ async function processCylinder(data: TileTestData, imodel: IModelConnection, pro expect(delta(high.y, 2.0)).to.be.lessThan(0.0005); expect(delta(high.z, 3.0)).to.be.lessThan(0.0005); - expect(result.renderGraphic).not.to.be.undefined; - processGraphic(result.renderGraphic!); + expect(result.graphic).not.to.be.undefined; + processGraphic(result.graphic!); } } @@ -530,7 +529,7 @@ describe("mirukuru TileTree", () => { let imodel: IModelConnection; before(async () => { - imodel = await IModelConnection.openStandalone(path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/mirukuru.ibim")); + imodel = await IModelConnection.openStandalone(path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/mirukuru.ibim")); MockRender.App.startup(); }); @@ -552,7 +551,7 @@ describe("mirukuru TileTree", () => { const rootTile = treeProps.rootTile; expect(rootTile.isLeaf).not.to.be.true; // the backend will only set this to true if the tile range contains no elements. - const loader = new IModelTileLoader(imodel, BatchType.Primary); + const loader = new IModelTile.Loader(imodel, treeProps.formatVersion, BatchType.Primary); const tree = new TileTree(TileTree.Params.fromJSON(treeProps, imodel, true, loader, "0x1c")); const response: TileRequest.Response = await loader.requestTileContent(tree.rootTile); @@ -560,9 +559,9 @@ describe("mirukuru TileTree", () => { expect(response).instanceof(Uint8Array); const isCanceled = () => false; // Our tile has no Request, therefore not considered in "loading" state, so would be immediately treated as "canceled" during loading... - const gfx = await loader.loadTileGraphic(tree.rootTile, response as Uint8Array, isCanceled); + const gfx = await loader.loadTileContent(tree.rootTile, response as Uint8Array, isCanceled); expect(gfx).not.to.be.undefined; - expect(gfx.renderGraphic).not.to.be.undefined; + expect(gfx.graphic).not.to.be.undefined; expect(gfx.isLeaf).to.be.true; expect(gfx.contentRange).not.to.be.undefined; expect(gfx.contentRange!.isNull).to.be.false; diff --git a/test-apps/testbed/frontend/ECSqlQuery.test.ts b/integration-tests/core/src/frontend/standalone/ECSqlQuery.test.ts similarity index 93% rename from test-apps/testbed/frontend/ECSqlQuery.test.ts rename to integration-tests/core/src/frontend/standalone/ECSqlQuery.test.ts index 0925226..af7f436 100644 --- a/test-apps/testbed/frontend/ECSqlQuery.test.ts +++ b/integration-tests/core/src/frontend/standalone/ECSqlQuery.test.ts @@ -1,90 +1,89 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import { assert } from "chai"; -import * as path from "path"; -import { IModelConnection } from "@bentley/imodeljs-frontend"; -import { CONSTANTS } from "../common/Testbed"; - -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/"); - -describe("ECSql Query", () => { - let imodel1: IModelConnection; - let imodel2: IModelConnection; - let imodel3: IModelConnection; - let imodel4: IModelConnection; - let imodel5: IModelConnection; - - before(async () => { - imodel1 = await IModelConnection.openStandalone(iModelLocation + "test.bim"); - imodel2 = await IModelConnection.openStandalone(iModelLocation + "CompatibilityTestSeed.bim"); - imodel3 = await IModelConnection.openStandalone(iModelLocation + "GetSetAutoHandledStructProperties.bim"); - imodel4 = await IModelConnection.openStandalone(iModelLocation + "GetSetAutoHandledArrayProperties.bim"); - imodel5 = await IModelConnection.openStandalone(iModelLocation + "mirukuru.ibim"); - }); - - after(async () => { - if (imodel1) await imodel1.closeStandalone(); - if (imodel2) await imodel2.closeStandalone(); - if (imodel3) await imodel3.closeStandalone(); - if (imodel4) await imodel4.closeStandalone(); - if (imodel5) await imodel5.closeStandalone(); - - }); - - it("Paging Results", async () => { - const getRowPerPage = (nPageSize: number, nRowCount: number) => { - const nRowPerPage = nRowCount / nPageSize; - const nPages = Math.ceil(nRowPerPage); - const nRowOnLastPage = nRowCount - (Math.floor(nRowPerPage) * pageSize); - const pages = new Array(nPages).fill(pageSize); - if (nRowPerPage) { - pages[nPages - 1] = nRowOnLastPage; - } - return pages; - }; - - const pageSize = 5; - const query = "SELECT ECInstanceId as Id, Parent.Id as ParentId FROM BisCore.element"; - const dbs = [imodel1, imodel2, imodel3, imodel4, imodel5]; - const pendingRowCount = []; - for (const db of dbs) { - pendingRowCount.push(db.queryRowCount(query)); - } - - const rowCounts = await Promise.all(pendingRowCount); - const expected = [46, 62, 7, 7, 28]; - assert.equal(rowCounts.length, expected.length); - for (let i = 0; i < expected.length; i++) { - assert.equal(rowCounts[i], expected[i]); - } - // verify row per page - for (const db of dbs) { - const i = dbs.indexOf(db); - const rowPerPage = getRowPerPage(pageSize, expected[i]); - for (let k = 0; k < rowPerPage.length; k++) { - const row = await db.queryPage(query, undefined, { size: pageSize, start: k }); - assert.equal(row.length, rowPerPage[k]); - } - } - - // verify async iterator - for (const db of dbs) { - const resultSet = []; - for await (const row of db.query(query, undefined, { size: pageSize })) { - resultSet.push(row); - assert.isTrue(Reflect.has(row, "id")); - if (Reflect.ownKeys(row).length > 1) { - assert.isTrue(Reflect.has(row, "parentId")); - const parentId: string = row.parentId; - assert.isTrue(parentId.startsWith("0x")); - } - const id: string = row.id; - assert.isTrue(id.startsWith("0x")); - } - const entry = dbs.indexOf(db); - assert.equal(rowCounts[entry], resultSet.length); - } - }); -}); +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { assert } from "chai"; +import * as path from "path"; +import { IModelConnection } from "@bentley/imodeljs-frontend"; + +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/"); + +describe("ECSql Query", () => { + let imodel1: IModelConnection; + let imodel2: IModelConnection; + let imodel3: IModelConnection; + let imodel4: IModelConnection; + let imodel5: IModelConnection; + + before(async () => { + imodel1 = await IModelConnection.openStandalone(iModelLocation + "test.bim"); + imodel2 = await IModelConnection.openStandalone(iModelLocation + "CompatibilityTestSeed.bim"); + imodel3 = await IModelConnection.openStandalone(iModelLocation + "GetSetAutoHandledStructProperties.bim"); + imodel4 = await IModelConnection.openStandalone(iModelLocation + "GetSetAutoHandledArrayProperties.bim"); + imodel5 = await IModelConnection.openStandalone(iModelLocation + "mirukuru.ibim"); + }); + + after(async () => { + if (imodel1) await imodel1.closeStandalone(); + if (imodel2) await imodel2.closeStandalone(); + if (imodel3) await imodel3.closeStandalone(); + if (imodel4) await imodel4.closeStandalone(); + if (imodel5) await imodel5.closeStandalone(); + + }); + + it("Paging Results", async () => { + const getRowPerPage = (nPageSize: number, nRowCount: number) => { + const nRowPerPage = nRowCount / nPageSize; + const nPages = Math.ceil(nRowPerPage); + const nRowOnLastPage = nRowCount - (Math.floor(nRowPerPage) * pageSize); + const pages = new Array(nPages).fill(pageSize); + if (nRowPerPage) { + pages[nPages - 1] = nRowOnLastPage; + } + return pages; + }; + + const pageSize = 5; + const query = "SELECT ECInstanceId as Id, Parent.Id as ParentId FROM BisCore.element"; + const dbs = [imodel1, imodel2, imodel3, imodel4, imodel5]; + const pendingRowCount = []; + for (const db of dbs) { + pendingRowCount.push(db.queryRowCount(query)); + } + + const rowCounts = await Promise.all(pendingRowCount); + const expected = [46, 62, 7, 7, 28]; + assert.equal(rowCounts.length, expected.length); + for (let i = 0; i < expected.length; i++) { + assert.equal(rowCounts[i], expected[i]); + } + // verify row per page + for (const db of dbs) { + const i = dbs.indexOf(db); + const rowPerPage = getRowPerPage(pageSize, expected[i]); + for (let k = 0; k < rowPerPage.length; k++) { + const row = await db.queryPage(query, undefined, { size: pageSize, start: k }); + assert.equal(row.length, rowPerPage[k]); + } + } + + // verify async iterator + for (const db of dbs) { + const resultSet = []; + for await (const row of db.query(query, undefined, { size: pageSize })) { + resultSet.push(row); + assert.isTrue(Reflect.has(row, "id")); + if (Reflect.ownKeys(row).length > 1) { + assert.isTrue(Reflect.has(row, "parentId")); + const parentId: string = row.parentId; + assert.isTrue(parentId.startsWith("0x")); + } + const id: string = row.id; + assert.isTrue(id.startsWith("0x")); + } + const entry = dbs.indexOf(db); + assert.equal(rowCounts[entry], resultSet.length); + } + }); +}); diff --git a/test-apps/testbed/frontend/FeatureOverrides.test.ts b/integration-tests/core/src/frontend/standalone/FeatureOverrides.test.ts similarity index 96% rename from test-apps/testbed/frontend/FeatureOverrides.test.ts rename to integration-tests/core/src/frontend/standalone/FeatureOverrides.test.ts index c8dbe4e..0a822a0 100644 --- a/test-apps/testbed/frontend/FeatureOverrides.test.ts +++ b/integration-tests/core/src/frontend/standalone/FeatureOverrides.test.ts @@ -7,13 +7,12 @@ import { expect, assert } from "chai"; import { FeatureOverrides, Target } from "@bentley/imodeljs-frontend/lib/webgl"; import { IModelApp, ScreenViewport, IModelConnection, SpatialViewState, StandardViewId } from "@bentley/imodeljs-frontend"; import { PackedFeatureTable } from "@bentley/imodeljs-frontend/lib/rendering"; -import { CONSTANTS } from "../common/Testbed"; import * as path from "path"; import { GeometryClass, FeatureTable, Feature } from "@bentley/imodeljs-common"; import { Id64 } from "@bentley/bentleyjs-core"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "../WebGLTestContext"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); function waitUntilTimeHasPassed() { const ot = Date.now(); diff --git a/test-apps/testbed/frontend/FeatureSymbology.test.ts b/integration-tests/core/src/frontend/standalone/FeatureSymbology.test.ts similarity index 89% rename from test-apps/testbed/frontend/FeatureSymbology.test.ts rename to integration-tests/core/src/frontend/standalone/FeatureSymbology.test.ts index 3445b30..e82c3da 100644 --- a/test-apps/testbed/frontend/FeatureSymbology.test.ts +++ b/integration-tests/core/src/frontend/standalone/FeatureSymbology.test.ts @@ -9,9 +9,8 @@ import * as path from "path"; // import { DeepCompare } from "@bentley/geometry-core"; import { Id64 } from "@bentley/bentleyjs-core"; import { ViewState, SpatialViewState, IModelConnection, FeatureSymbology } from "@bentley/imodeljs-frontend"; -import { CONSTANTS } from "../common/Testbed"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); class Overrides extends FeatureSymbology.Overrides { public constructor(view?: ViewState) { super(view); } @@ -24,42 +23,6 @@ class Overrides extends FeatureSymbology.Overrides { public get visibleSubCategories() { return this._visibleSubCategories; } } -describe("FeatureSymbology.Appearance", () => { - it("default constructor works as expected", () => { - const app = FeatureSymbology.Appearance.fromJSON(); - assert.isUndefined(app.rgb); - assert.isUndefined(app.weight); - assert.isUndefined(app.transparency); - assert.isUndefined(app.linePixels); - assert.isUndefined(app.ignoresMaterial); - }); - - it("AppearanceProps passed in constructor works as expected", () => { - const props1 = { rgb: new RgbColor(100, 100, 100), weight: 1, transparency: 200 / 255, linePixels: LinePixels.Code2, ignoresMaterial: true } as FeatureSymbology.AppearanceProps; - const props2 = { rgb: new RgbColor(100, 100, 100), weight: 1, transparency: 200 / 255, linePixels: LinePixels.Code2 } as FeatureSymbology.AppearanceProps; - let app = FeatureSymbology.Appearance.fromJSON(props1); - assert.isTrue(app.overridesRgb); - assert.isTrue(app.overridesWeight); - assert.isTrue(app.overridesTransparency); - assert.isTrue(app.overridesLinePixels); - assert.isTrue(app.ignoresMaterial); - - app = FeatureSymbology.Appearance.fromJSON(props2); - assert.isUndefined(app.ignoresMaterial); - }); - - it("extend works as expected", () => { - const props1 = { rgb: new RgbColor(100, 100, 100), linePixels: LinePixels.Code2, ignoresMaterial: true } as FeatureSymbology.AppearanceProps; - const props2 = { rgb: new RgbColor(250, 180, 150), weight: 1, transparency: 200 / 255, linePixels: LinePixels.Code3 } as FeatureSymbology.AppearanceProps; - const expectedProps = { rgb: new RgbColor(100, 100, 100), linePixels: LinePixels.Code2, ignoresMaterial: true, weight: 1, transparency: 200 / 255 } as FeatureSymbology.AppearanceProps; - let app1 = FeatureSymbology.Appearance.fromJSON(props1); - const app2 = FeatureSymbology.Appearance.fromJSON(props2); - app1 = app2.extendAppearance(app1); - const expected = FeatureSymbology.Appearance.fromJSON(expectedProps); - assert.isTrue(expected.equals(app1)); - }); -}); - describe("FeatureSymbology.Overrides", () => { let imodel: IModelConnection, viewState: SpatialViewState, diff --git a/test-apps/testbed/frontend/GeoCoord.test.ts b/integration-tests/core/src/frontend/standalone/GeoCoord.test.ts similarity index 95% rename from test-apps/testbed/frontend/GeoCoord.test.ts rename to integration-tests/core/src/frontend/standalone/GeoCoord.test.ts index 4eb41e8..bcca6b3 100644 --- a/test-apps/testbed/frontend/GeoCoord.test.ts +++ b/integration-tests/core/src/frontend/standalone/GeoCoord.test.ts @@ -1,166 +1,165 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import { CONSTANTS } from "../common/Testbed"; -import { IModelConnection, GeoConverter } from "@bentley/imodeljs-frontend"; -import { expect } from "chai"; -import * as path from "path"; -import { XYZProps, Point3d } from "@bentley/geometry-core"; -import { GeoCoordStatus, IModelCoordinatesResponseProps, GeoCoordinatesResponseProps } from "@bentley/imodeljs-common"; - -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/mirukuru.ibim"); - -// spell-checker: disable - -describe("GeoCoord", () => { - let iModel: IModelConnection; - const geoPointList: XYZProps[] = []; - let wgs84Converter: GeoConverter; - let nad27Converter: GeoConverter; - let sameDatumConverter: GeoConverter; - let wgs84Response: IModelCoordinatesResponseProps; - let wgs84GeoCoordsResponse: GeoCoordinatesResponseProps; - - before(async () => { - iModel = await IModelConnection.openStandalone(iModelLocation); - // make an array of 10x10 geoPoints in geoPointList. - for (let iLatitude: number = 0; iLatitude < 10; iLatitude++) { - for (let iLongitude: number = 0; iLongitude < 10; iLongitude++) { - geoPointList.push({ x: (132.600 + 0.02 * iLongitude), y: (34.350 + 0.02 * iLatitude), z: 0.0 }); - } - } - wgs84Converter = iModel.geoServices.getConverter("WGS84"); - nad27Converter = iModel.geoServices.getConverter("NAD27"); - sameDatumConverter = iModel.geoServices.getConverter(); - }); - - after(async () => { - if (iModel) await iModel.closeStandalone(); - }); - - it("should get different results for different datums", async () => { - const testPoints: XYZProps[] = []; - for (let iGeoPoint: number = 1; iGeoPoint < geoPointList.length; iGeoPoint += 2) { - testPoints.push(geoPointList[iGeoPoint]); - } - - wgs84Response = await wgs84Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); - - // shouldn't have any from the cache. - expect(wgs84Response.fromCache === 0).to.be.true; - - // shouldn't have any failures. - for (const result of wgs84Response.iModelCoords) { - expect(GeoCoordStatus.Success === result.s); - } - - const nad27Response = await nad27Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); - - // shouldn't have any from the cache. - expect(nad27Response.fromCache === 0).to.be.true; - - for (const result of nad27Response.iModelCoords) { - expect(GeoCoordStatus.Success === result.s).to.be.true; - } - - // we expect the iModelCoord results from treating the geoCoords as WGS84 lat/longs to be different from what we get treating them as NAD27 lat/longs. - for (let iPoint: number = 0; iPoint < wgs84Response.iModelCoords.length; ++iPoint) { - const wgs84Point = Point3d.fromJSON(wgs84Response.iModelCoords[iPoint].p); - const nad27Point = Point3d.fromJSON(nad27Response.iModelCoords[iPoint].p); - expect(wgs84Point.isAlmostEqual(nad27Point)).to.be.false; - } - - const sameDatumResponse = await sameDatumConverter.getIModelCoordinatesFromGeoCoordinates(testPoints); - - // shouldn't have any from the cache. - expect(sameDatumResponse.fromCache === 0).to.be.true; - - for (const result of sameDatumResponse.iModelCoords) { - expect(GeoCoordStatus.Success === result.s).to.be.true; - } - }); - - it("should read repeated requests from the cache", async () => { - // use the same points as the first test. - const testPoints: XYZProps[] = []; - for (let iGeoPoint: number = 1; iGeoPoint < geoPointList.length; iGeoPoint += 2) { - testPoints.push(geoPointList[iGeoPoint]); - } - // when we ask again, we expect faster response as no round trip is necessary, but we expect the same results. - const wgs84Response2 = await wgs84Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); - - // they should all come from the cache. - expect(wgs84Response2.fromCache === 50).to.be.true; - - // expect ok status for each. - for (const result of wgs84Response.iModelCoords) { - expect(GeoCoordStatus.Success === result.s).to.be.true; - } - - // expect equal answers for all of them. - for (let iPoint: number = 0; iPoint < wgs84Response.iModelCoords.length; ++iPoint) { - const wgs84Point = Point3d.fromJSON(wgs84Response.iModelCoords[iPoint].p); - const wgs84Point2 = Point3d.fromJSON(wgs84Response2.iModelCoords[iPoint].p); - expect(wgs84Point.isAlmostEqual(wgs84Point2)).to.be.true; - } - - // now try the round trip to make sure they are close. - const wgs84IModelPoints: XYZProps[] = []; - for (const thisPoint of wgs84Response.iModelCoords) - wgs84IModelPoints.push(thisPoint.p); - - // convert back to geoCoords and compare - wgs84GeoCoordsResponse = await wgs84Converter.getGeoCoordinatesFromIModelCoordinates(wgs84IModelPoints); - - for (const result of wgs84GeoCoordsResponse.geoCoords) { - expect(GeoCoordStatus.Success === result.s).to.be.true; - } - - // round-tripped result should be close to original point for each of the three datum responses. - for (let iPoint: number = 0; iPoint < testPoints.length; ++iPoint) { - const thisPoint = Point3d.fromJSON(testPoints[iPoint]); - const thatPoint = Point3d.fromJSON(wgs84GeoCoordsResponse.geoCoords[iPoint].p); - expect(thisPoint.isAlmostEqual(thatPoint)).to.be.true; - } - }); - - it("should get some IModelCoords from the cache and calculate some", async () => { - // use the first 10 points. - const testPoints: XYZProps[] = []; - for (let iGeoPoint: number = 0; iGeoPoint < 10; ++iGeoPoint) { - testPoints.push(geoPointList[iGeoPoint]); - } - - const first10Response = await wgs84Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); - - // expect half from cache. - expect(first10Response.fromCache === 5).to.be.true; - - // the longitude values are increasing, so we expect the x values to increase. - for (let iPoint = 0; iPoint < (testPoints.length - 1); iPoint++) { - const firstPoint = Point3d.fromJSON(first10Response.iModelCoords[iPoint].p); - const secondPoint = Point3d.fromJSON(first10Response.iModelCoords[iPoint + 1].p); - expect(firstPoint.x < secondPoint.x).to.be.true; - } - }); - - it("should get some GeoCoords from the cache and calculate some", async () => { - // interleave the first 10 points with some halfway between. - const testPoints: XYZProps[] = []; - for (let iIModelPoint: number = 0; iIModelPoint < 10; ++iIModelPoint) { - testPoints.push(wgs84Response.iModelCoords[iIModelPoint].p); - const firstPoint = Point3d.fromJSON(wgs84Response.iModelCoords[iIModelPoint].p); - const secondPoint = Point3d.fromJSON(wgs84Response.iModelCoords[iIModelPoint + 1].p); - const pointBetween = { - x: (firstPoint.x + secondPoint.x) / 2, - y: (firstPoint.y + secondPoint.y) / 2, - z: 0, - }; - testPoints.push(pointBetween); - } - - const mixedResponse = await wgs84Converter.getGeoCoordinatesFromIModelCoordinates(testPoints); - expect(mixedResponse.fromCache === 10).to.be.true; - }); -}); +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { IModelConnection, GeoConverter } from "@bentley/imodeljs-frontend"; +import { expect } from "chai"; +import * as path from "path"; +import { XYZProps, Point3d } from "@bentley/geometry-core"; +import { GeoCoordStatus, IModelCoordinatesResponseProps, GeoCoordinatesResponseProps } from "@bentley/imodeljs-common"; + +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/mirukuru.ibim"); + +// spell-checker: disable + +describe("GeoCoord", () => { + let iModel: IModelConnection; + const geoPointList: XYZProps[] = []; + let wgs84Converter: GeoConverter; + let nad27Converter: GeoConverter; + let sameDatumConverter: GeoConverter; + let wgs84Response: IModelCoordinatesResponseProps; + let wgs84GeoCoordsResponse: GeoCoordinatesResponseProps; + + before(async () => { + iModel = await IModelConnection.openStandalone(iModelLocation); + // make an array of 10x10 geoPoints in geoPointList. + for (let iLatitude: number = 0; iLatitude < 10; iLatitude++) { + for (let iLongitude: number = 0; iLongitude < 10; iLongitude++) { + geoPointList.push({ x: (132.600 + 0.02 * iLongitude), y: (34.350 + 0.02 * iLatitude), z: 0.0 }); + } + } + wgs84Converter = iModel.geoServices.getConverter("WGS84"); + nad27Converter = iModel.geoServices.getConverter("NAD27"); + sameDatumConverter = iModel.geoServices.getConverter(); + }); + + after(async () => { + if (iModel) await iModel.closeStandalone(); + }); + + it("should get different results for different datums", async () => { + const testPoints: XYZProps[] = []; + for (let iGeoPoint: number = 1; iGeoPoint < geoPointList.length; iGeoPoint += 2) { + testPoints.push(geoPointList[iGeoPoint]); + } + + wgs84Response = await wgs84Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); + + // shouldn't have any from the cache. + expect(wgs84Response.fromCache === 0).to.be.true; + + // shouldn't have any failures. + for (const result of wgs84Response.iModelCoords) { + expect(GeoCoordStatus.Success === result.s); + } + + const nad27Response = await nad27Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); + + // shouldn't have any from the cache. + expect(nad27Response.fromCache === 0).to.be.true; + + for (const result of nad27Response.iModelCoords) { + expect(GeoCoordStatus.Success === result.s).to.be.true; + } + + // we expect the iModelCoord results from treating the geoCoords as WGS84 lat/longs to be different from what we get treating them as NAD27 lat/longs. + for (let iPoint: number = 0; iPoint < wgs84Response.iModelCoords.length; ++iPoint) { + const wgs84Point = Point3d.fromJSON(wgs84Response.iModelCoords[iPoint].p); + const nad27Point = Point3d.fromJSON(nad27Response.iModelCoords[iPoint].p); + expect(wgs84Point.isAlmostEqual(nad27Point)).to.be.false; + } + + const sameDatumResponse = await sameDatumConverter.getIModelCoordinatesFromGeoCoordinates(testPoints); + + // shouldn't have any from the cache. + expect(sameDatumResponse.fromCache === 0).to.be.true; + + for (const result of sameDatumResponse.iModelCoords) { + expect(GeoCoordStatus.Success === result.s).to.be.true; + } + }); + + it("should read repeated requests from the cache", async () => { + // use the same points as the first test. + const testPoints: XYZProps[] = []; + for (let iGeoPoint: number = 1; iGeoPoint < geoPointList.length; iGeoPoint += 2) { + testPoints.push(geoPointList[iGeoPoint]); + } + // when we ask again, we expect faster response as no round trip is necessary, but we expect the same results. + const wgs84Response2 = await wgs84Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); + + // they should all come from the cache. + expect(wgs84Response2.fromCache === 50).to.be.true; + + // expect ok status for each. + for (const result of wgs84Response.iModelCoords) { + expect(GeoCoordStatus.Success === result.s).to.be.true; + } + + // expect equal answers for all of them. + for (let iPoint: number = 0; iPoint < wgs84Response.iModelCoords.length; ++iPoint) { + const wgs84Point = Point3d.fromJSON(wgs84Response.iModelCoords[iPoint].p); + const wgs84Point2 = Point3d.fromJSON(wgs84Response2.iModelCoords[iPoint].p); + expect(wgs84Point.isAlmostEqual(wgs84Point2)).to.be.true; + } + + // now try the round trip to make sure they are close. + const wgs84IModelPoints: XYZProps[] = []; + for (const thisPoint of wgs84Response.iModelCoords) + wgs84IModelPoints.push(thisPoint.p); + + // convert back to geoCoords and compare + wgs84GeoCoordsResponse = await wgs84Converter.getGeoCoordinatesFromIModelCoordinates(wgs84IModelPoints); + + for (const result of wgs84GeoCoordsResponse.geoCoords) { + expect(GeoCoordStatus.Success === result.s).to.be.true; + } + + // round-tripped result should be close to original point for each of the three datum responses. + for (let iPoint: number = 0; iPoint < testPoints.length; ++iPoint) { + const thisPoint = Point3d.fromJSON(testPoints[iPoint]); + const thatPoint = Point3d.fromJSON(wgs84GeoCoordsResponse.geoCoords[iPoint].p); + expect(thisPoint.isAlmostEqual(thatPoint)).to.be.true; + } + }); + + it("should get some IModelCoords from the cache and calculate some", async () => { + // use the first 10 points. + const testPoints: XYZProps[] = []; + for (let iGeoPoint: number = 0; iGeoPoint < 10; ++iGeoPoint) { + testPoints.push(geoPointList[iGeoPoint]); + } + + const first10Response = await wgs84Converter.getIModelCoordinatesFromGeoCoordinates(testPoints); + + // expect half from cache. + expect(first10Response.fromCache === 5).to.be.true; + + // the longitude values are increasing, so we expect the x values to increase. + for (let iPoint = 0; iPoint < (testPoints.length - 1); iPoint++) { + const firstPoint = Point3d.fromJSON(first10Response.iModelCoords[iPoint].p); + const secondPoint = Point3d.fromJSON(first10Response.iModelCoords[iPoint + 1].p); + expect(firstPoint.x < secondPoint.x).to.be.true; + } + }); + + it("should get some GeoCoords from the cache and calculate some", async () => { + // interleave the first 10 points with some halfway between. + const testPoints: XYZProps[] = []; + for (let iIModelPoint: number = 0; iIModelPoint < 10; ++iIModelPoint) { + testPoints.push(wgs84Response.iModelCoords[iIModelPoint].p); + const firstPoint = Point3d.fromJSON(wgs84Response.iModelCoords[iIModelPoint].p); + const secondPoint = Point3d.fromJSON(wgs84Response.iModelCoords[iIModelPoint + 1].p); + const pointBetween = { + x: (firstPoint.x + secondPoint.x) / 2, + y: (firstPoint.y + secondPoint.y) / 2, + z: 0, + }; + testPoints.push(pointBetween); + } + + const mixedResponse = await wgs84Converter.getGeoCoordinatesFromIModelCoordinates(testPoints); + expect(mixedResponse.fromCache === 10).to.be.true; + }); +}); diff --git a/test-apps/testbed/frontend/GeometryAccumulator.test.ts b/integration-tests/core/src/frontend/standalone/GeometryAccumulator.test.ts similarity index 97% rename from test-apps/testbed/frontend/GeometryAccumulator.test.ts rename to integration-tests/core/src/frontend/standalone/GeometryAccumulator.test.ts index 73a4309..dd9a7e2 100644 --- a/test-apps/testbed/frontend/GeometryAccumulator.test.ts +++ b/integration-tests/core/src/frontend/standalone/GeometryAccumulator.test.ts @@ -24,12 +24,14 @@ import { import { Branch, System } from "@bentley/imodeljs-frontend/lib/webgl"; import { Transform, Range3d, StrokeOptions, LineString3d, Path, Point3d, Loop } from "@bentley/geometry-core"; import { ColorDef, GraphicParams } from "@bentley/imodeljs-common"; -import { CONSTANTS } from "../common/Testbed"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { FakeDisplayParams } from "./DisplayParams.test"; +import { WebGLTestContext } from "../WebGLTestContext"; // import { FakeGraphic } from "./Graphic.test"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); + +export class FakeDisplayParams extends DisplayParams { + public constructor() { super(DisplayParams.Type.Linear, new ColorDef(), new ColorDef()); } +} export class FakeGeometry extends Geometry { public constructor() { super(Transform.createIdentity(), Range3d.createNull(), new FakeDisplayParams()); } diff --git a/test-apps/testbed/frontend/Graphic.test.ts b/integration-tests/core/src/frontend/standalone/Graphic.test.ts similarity index 89% rename from test-apps/testbed/frontend/Graphic.test.ts rename to integration-tests/core/src/frontend/standalone/Graphic.test.ts index 9d3b49c..888840b 100644 --- a/test-apps/testbed/frontend/Graphic.test.ts +++ b/integration-tests/core/src/frontend/standalone/Graphic.test.ts @@ -8,15 +8,14 @@ import { Point3d, Range3d } from "@bentley/geometry-core"; import { ColorByName, QParams3d, QPoint3dList } from "@bentley/imodeljs-common"; import { IModelConnection, IModelApp } from "@bentley/imodeljs-frontend"; import { RenderGraphic, MeshArgs, RenderMemory } from "@bentley/imodeljs-frontend/lib/rendering"; -import { CONSTANTS } from "../common/Testbed"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "../WebGLTestContext"; export class FakeGraphic extends RenderGraphic { public dispose(): void { } public collectStatistics(_stats: RenderMemory.Statistics): void { } } -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); describe("createTriMesh", () => { let imodel: IModelConnection; diff --git a/test-apps/testbed/frontend/IModelGateway.test.ts b/integration-tests/core/src/frontend/standalone/IModelGateway.test.ts similarity index 94% rename from test-apps/testbed/frontend/IModelGateway.test.ts rename to integration-tests/core/src/frontend/standalone/IModelGateway.test.ts index 31fecb5..9fc1e44 100644 --- a/test-apps/testbed/frontend/IModelGateway.test.ts +++ b/integration-tests/core/src/frontend/standalone/IModelGateway.test.ts @@ -10,9 +10,9 @@ describe("StandaloneIModelRpcInterface", () => { it("openStandalone should handle a blank filename", async () => { try { await StandaloneIModelRpcInterface.getClient().openStandalone("", OpenMode.Readonly); - assert(false); } catch (e) { - assert(true); + return; } + assert(false); }); }); diff --git a/test-apps/testbed/frontend/MeshBuilder.test.ts b/integration-tests/core/src/frontend/standalone/MeshBuilder.test.ts similarity index 98% rename from test-apps/testbed/frontend/MeshBuilder.test.ts rename to integration-tests/core/src/frontend/standalone/MeshBuilder.test.ts index 15e80ca..37f81e2 100644 --- a/test-apps/testbed/frontend/MeshBuilder.test.ts +++ b/integration-tests/core/src/frontend/standalone/MeshBuilder.test.ts @@ -29,10 +29,12 @@ import { Triangle, } from "@bentley/imodeljs-frontend/lib/rendering"; import { System } from "@bentley/imodeljs-frontend/lib/webgl"; -import { FakeDisplayParams } from "./DisplayParams.test"; -import { CONSTANTS } from "../common/Testbed"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); + +export class FakeDisplayParams extends DisplayParams { + public constructor() { super(DisplayParams.Type.Linear, new ColorDef(), new ColorDef()); } +} /** * MESH BUILDER TESTS diff --git a/test-apps/testbed/frontend/MeshBuilderMap.test.ts b/integration-tests/core/src/frontend/standalone/MeshBuilderMap.test.ts similarity index 98% rename from test-apps/testbed/frontend/MeshBuilderMap.test.ts rename to integration-tests/core/src/frontend/standalone/MeshBuilderMap.test.ts index 4671d17..0c0ab9a 100644 --- a/test-apps/testbed/frontend/MeshBuilderMap.test.ts +++ b/integration-tests/core/src/frontend/standalone/MeshBuilderMap.test.ts @@ -20,11 +20,13 @@ import { MeshBuilderMap, } from "@bentley/imodeljs-frontend/lib/rendering"; import { System } from "@bentley/imodeljs-frontend/lib/webgl"; -import { FakeDisplayParams } from "./DisplayParams.test"; -import { CONSTANTS } from "../common/Testbed"; import { ColorDef, GraphicParams } from "@bentley/imodeljs-common"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); + +export class FakeDisplayParams extends DisplayParams { + public constructor() { super(DisplayParams.Type.Linear, new ColorDef(), new ColorDef()); } +} /** * MESH BUILDER MAP TESTS diff --git a/test-apps/testbed/frontend/MeshPrimitives.test.ts b/integration-tests/core/src/frontend/standalone/MeshPrimitives.test.ts similarity index 93% rename from test-apps/testbed/frontend/MeshPrimitives.test.ts rename to integration-tests/core/src/frontend/standalone/MeshPrimitives.test.ts index 53d334b..a910dea 100644 --- a/test-apps/testbed/frontend/MeshPrimitives.test.ts +++ b/integration-tests/core/src/frontend/standalone/MeshPrimitives.test.ts @@ -6,12 +6,14 @@ import { expect, assert } from "chai"; import { MockRender, IModelConnection, SpatialViewState, StandardViewId } from "@bentley/imodeljs-frontend"; import { Range3d, Point3d, Point2d } from "@bentley/geometry-core"; import * as path from "path"; -import { Mesh, Triangle } from "@bentley/imodeljs-frontend/lib/rendering"; -import { FakeDisplayParams } from "./DisplayParams.test"; -import { CONSTANTS } from "../common/Testbed"; +import { DisplayParams, Mesh, Triangle } from "@bentley/imodeljs-frontend/lib/rendering"; import { MeshPolyline, QPoint3d, ColorDef, OctEncodedNormal } from "@bentley/imodeljs-common"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); + +export class FakeDisplayParams extends DisplayParams { + public constructor() { super(DisplayParams.Type.Linear, new ColorDef(), new ColorDef()); } +} /** * MESH BUILDER TESTS diff --git a/test-apps/testbed/frontend/ModelState.test.ts b/integration-tests/core/src/frontend/standalone/ModelState.test.ts similarity index 92% rename from test-apps/testbed/frontend/ModelState.test.ts rename to integration-tests/core/src/frontend/standalone/ModelState.test.ts index 6951d4a..7f1d071 100644 --- a/test-apps/testbed/frontend/ModelState.test.ts +++ b/integration-tests/core/src/frontend/standalone/ModelState.test.ts @@ -7,9 +7,8 @@ import * as path from "path"; import { MockRender, ModelSelectorState, IModelConnection, DrawingModelState, SheetModelState, SpatialModelState, GeometricModelState } from "@bentley/imodeljs-frontend"; import { Id64 } from "@bentley/bentleyjs-core"; import { Code, ModelSelectorProps } from "@bentley/imodeljs-common"; -import { CONSTANTS } from "../common/Testbed"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/"); describe("ModelState", () => { let imodel: IModelConnection; @@ -102,14 +101,16 @@ describe("ModelState", () => { try { await imodel2.views.getThumbnail("0x25"); - assert.fail("getThumbnail should not return"); - } catch (_err) { } // thumbnail doesn't exist - - thumbnail.format = "png"; - thumbnail.height = 100; - thumbnail.width = 200; - thumbnail.image = new Uint8Array(300); - thumbnail.image.fill(33); + } catch (_err) { + return; + } // thumbnail doesn't exist + assert.fail("getThumbnail should not return"); + + // thumbnail.format = "png"; + // thumbnail.height = 100; + // thumbnail.width = 200; + // thumbnail.image = new Uint8Array(300); + // thumbnail.image.fill(33); // await imodel2.views.saveThumbnail("0x24", thumbnail); // const thumbnail2 = await imodel2.views.getThumbnail("0x24"); diff --git a/test-apps/testbed/frontend/PrimitiveBuilder.test.ts b/integration-tests/core/src/frontend/standalone/PrimitiveBuilder.test.ts similarity index 98% rename from test-apps/testbed/frontend/PrimitiveBuilder.test.ts rename to integration-tests/core/src/frontend/standalone/PrimitiveBuilder.test.ts index 02e9f38..3f5472d 100644 --- a/test-apps/testbed/frontend/PrimitiveBuilder.test.ts +++ b/integration-tests/core/src/frontend/standalone/PrimitiveBuilder.test.ts @@ -19,10 +19,9 @@ import { import { Branch } from "@bentley/imodeljs-frontend/lib/webgl"; import { Arc3d, Point3d, LineString3d, Loop, Path, Transform, Range3d, Polyface, IndexedPolyface, Point2d } from "@bentley/geometry-core"; import { ColorDef, GraphicParams } from "@bentley/imodeljs-common"; -import { CONSTANTS } from "../common/Testbed"; -import { WebGLTestContext } from "./WebGLTestContext"; +import { WebGLTestContext } from "../WebGLTestContext"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); describe("PrimitiveBuilder tests", () => { let imodel: IModelConnection; diff --git a/test-apps/testbed/frontend/Render.test.ts b/integration-tests/core/src/frontend/standalone/Render.test.ts similarity index 96% rename from test-apps/testbed/frontend/Render.test.ts rename to integration-tests/core/src/frontend/standalone/Render.test.ts index 99912e4..a09d852 100644 --- a/test-apps/testbed/frontend/Render.test.ts +++ b/integration-tests/core/src/frontend/standalone/Render.test.ts @@ -1,369 +1,368 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import { expect } from "chai"; -import * as path from "path"; -import { WebGLTestContext } from "./WebGLTestContext"; -import { testViewports, comparePixelData, Color } from "./TestViewport"; -import { CONSTANTS } from "../common/Testbed"; -import { RenderMode, ColorDef, RgbColor } from "@bentley/imodeljs-common"; -import { RenderMemory, Pixel } from "@bentley/imodeljs-frontend/lib/rendering"; -import { - DepthRangeNpc, - IModelConnection, - SpatialViewState, - ViewRect, - FeatureSymbology, - FeatureOverrideProvider, - Viewport, -} from "@bentley/imodeljs-frontend"; - -// Mirukuru contains a single view, looking at a single design model containing a single white rectangle (element ID 41 (0x29), subcategory ID = 24 (0x18)). -// (It also is supposed to contain a reality model but the URL is presumably wrong). -// The initial view is in top orientation, centered on the top of the rectangle, but not fitted to its extents (empty space on all sides of rectangle). -// Background color is black; ACS triad on; render mode smooth with lighting enabled and visible edges enabled. -describe("Render mirukuru", () => { - let imodel: IModelConnection; - - before(async () => { - const imodelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/mirukuru.ibim"); - imodel = await IModelConnection.openStandalone(imodelLocation); - WebGLTestContext.startup(); - }); - - after(async () => { - if (imodel) await imodel.closeStandalone(); - WebGLTestContext.shutdown(); - }); - - it("should have expected view definition", async () => { - const viewState = await imodel.views.load("0x24"); - expect(viewState).instanceof(SpatialViewState); - }); - - it("should render empty initial view", async () => { - const rect = new ViewRect(0, 0, 100, 100); - await testViewports("0x24", imodel, rect.width, rect.height, async (vp) => { - await vp.drawFrame(); - - // Should have all black background pixels - let colors = vp.readUniqueColors(); - expect(colors.length).to.equal(1); - expect(colors.contains(Color.fromRgba(0, 0, 0, 0xff))).to.be.true; - - // Change background color - expect pixel colors to match - vp.view.displayStyle.backgroundColor = ColorDef.green; - vp.invalidateRenderPlan(); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(1); - expect(colors.contains(Color.fromRgba(0, 0x80, 0, 0xff))).to.be.true; - - // Should have no features, depth, or geometry - only background pixels - const pixels = vp.readUniquePixelData(); - expect(pixels.length).to.equal(1); - - // Background pixels have distanceFraction = 0 indicating far plane. - const backgroundPixel = new Pixel.Data(undefined, 0, Pixel.GeometryType.None, Pixel.Planarity.None); - expect(comparePixelData(backgroundPixel, pixels.array[0])).to.equal(0); - - // Can read a single pixel - const pixel = vp.readPixel(rect.width / 2, rect.height / 2); - expect(comparePixelData(backgroundPixel, pixel)).to.equal(0); - - // Out-of-bounds pixels are in "unknown" state - const unknownPixel = new Pixel.Data(); - const coords = [[-1, -1], [0, -1], [rect.width, 0], [rect.width - 1, rect.height * 2]]; - for (const coord of coords) { - const oob = vp.readPixel(coord[0], coord[1]); - expect(comparePixelData(unknownPixel, oob)).to.equal(0); - } - }); - }); - - it("should render the model", async () => { - const rect = new ViewRect(0, 0, 100, 100); - await testViewports("0x24", imodel, rect.width, rect.height, async (vp) => { - await vp.waitForAllTilesToRender(); - expect(vp.numRequestedTiles).to.equal(0); - expect(vp.numSelectedTiles).to.equal(1); - - // White rectangle is centered in view with black background surrounding. Lighting is on so rectangle will not be pure white. - let colors = vp.readUniqueColors(); - const bgColor = Color.fromRgba(0, 0, 0, 0xff); - expect(colors.length).least(2); - expect(colors.contains(bgColor)).to.be.true; // black background - - const expectWhitish = (c: Color) => { - expect(c.r).least(0x7f); - expect(c.g).least(0x7f); - expect(c.b).least(0x7f); - expect(c.a).to.equal(0xff); - }; - - for (const c of colors.array) { - if (0 !== c.compare(bgColor)) - expectWhitish(c); - } - - let color = vp.readColor(rect.left, rect.top); - expect(color.compare(bgColor)).to.equal(0); - color = vp.readColor(rect.right - 1, rect.top); - expect(color.compare(bgColor)).to.equal(0); - color = vp.readColor(rect.right - 1, rect.bottom - 1); - expect(color.compare(bgColor)).to.equal(0); - color = vp.readColor(rect.left, rect.bottom - 1); - expect(color.compare(bgColor)).to.equal(0); - - color = vp.readColor(rect.width / 2, rect.height / 2); - expectWhitish(color); - - // Confirm we drew the rectangular element as a planar surface and its edges. - const elemId = "0x29"; - const subcatId = "0x18"; - let pixels = vp.readUniquePixelData(); - expect(pixels.length).to.equal(3); - expect(pixels.containsFeature(elemId, subcatId)); - expect(pixels.containsGeometry(Pixel.GeometryType.Surface, Pixel.Planarity.Planar)); - expect(pixels.containsGeometry(Pixel.GeometryType.Edge, Pixel.Planarity.Planar)); - - // With lighting off, pixels should be either pure black (background) or pure white (rectangle) - // NB: Shouldn't really modify view flags in place but meh. - const vf = vp.view.viewFlags; - vf.sourceLights = vf.cameraLights = vf.solarLight = false; - vp.invalidateRenderPlan(); - await vp.drawFrame(); - - const white = Color.from(0xffffffff); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(2); - expect(colors.contains(bgColor)).to.be.true; - expect(colors.contains(white)).to.be.true; - - // In wireframe, same colors, but center pixel will be background color - only edges draw. - vf.renderMode = RenderMode.Wireframe; - vp.invalidateRenderPlan(); - await vp.drawFrame(); - - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(2); - expect(colors.contains(bgColor)).to.be.true; - expect(colors.contains(white)).to.be.true; - - color = vp.readColor(rect.width / 2, rect.height / 2); - expect(color.compare(bgColor)).to.equal(0); - - pixels = vp.readUniquePixelData(); - expect(pixels.length).to.equal(2); - expect(pixels.containsFeature(elemId, subcatId)); - expect(pixels.containsGeometry(Pixel.GeometryType.Edge, Pixel.Planarity.Planar)); - }); - }); - - it("should override symbology", async () => { - const rect = new ViewRect(0, 0, 200, 150); - await testViewports("0x24", imodel, rect.width, rect.height, async (vp) => { - const elemId = "0x29"; - const subcatId = "0x18"; - const vf = vp.view.viewFlags; - vf.visibleEdges = vf.hiddenEdges = vf.sourceLights = vf.cameraLights = vf.solarLight = false; - - type AddFeatureOverrides = (overrides: FeatureSymbology.Overrides, viewport: Viewport) => void; - class RenderTestOverrideProvider implements FeatureOverrideProvider { - public ovrFunc?: AddFeatureOverrides; - public addFeatureOverrides(overrides: FeatureSymbology.Overrides, viewport: Viewport): void { - if (undefined !== this.ovrFunc) - this.ovrFunc(overrides, viewport); - } - } - const ovrProvider = new RenderTestOverrideProvider(); - vp.featureOverrideProvider = ovrProvider; - - // Specify element is never drawn. - ovrProvider.ovrFunc = (ovrs, _) => ovrs.setNeverDrawn(elemId); - vp.view.setFeatureOverridesDirty(true); - await vp.waitForAllTilesToRender(); - - const bgColor = Color.fromRgba(0, 0, 0, 0xff); - let colors = vp.readUniqueColors(); - expect(colors.length).to.equal(1); - expect(colors.contains(bgColor)).to.be.true; - - let pixels = vp.readUniquePixelData(); - expect(pixels.length).to.equal(1); - - // Specify element is nonLocatable - ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromJSON({ nonLocatable: true })); - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - pixels = vp.readUniquePixelData(undefined, true); // Exclude non-locatable elements - expect(pixels.length).to.equal(1); - expect(pixels.containsElement(elemId)).to.be.false; - pixels = vp.readUniquePixelData(); // Include non-locatable elements - expect(pixels.length).to.equal(2); - expect(pixels.containsElement(elemId)).to.be.true; - - // Specify element is drawn blue - ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromRgb(ColorDef.blue)); - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(2); - expect(colors.contains(Color.fromRgba(0, 0, 0xff, 0xff))).to.be.true; - - // Specify default overrides - ovrProvider.ovrFunc = (ovrs, _) => ovrs.setDefaultOverrides(FeatureSymbology.Appearance.fromRgb(ColorDef.red)); - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(2); - expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.true; - - // Specify default overrides, but also override element color - ovrProvider.ovrFunc = (ovrs, _) => { - ovrs.setDefaultOverrides(FeatureSymbology.Appearance.fromRgb(ColorDef.green)); - ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromRgb(new ColorDef(0x7f0000))); // blue = 0x7f... - }; - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(2); - expect(colors.contains(Color.fromRgba(0, 0, 0x7f, 0xff))).to.be.true; - expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.false; - - // Override by subcategory - ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideSubCategory(subcatId, FeatureSymbology.Appearance.fromRgb(ColorDef.red)); - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.true; - - // Override color for element and subcategory - element wins - ovrProvider.ovrFunc = (ovrs, _) => { - ovrs.overrideSubCategory(subcatId, FeatureSymbology.Appearance.fromRgb(ColorDef.blue)); - ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromRgb(ColorDef.red)); - }; - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.true; - - // Override to be fully transparent - element should not draw at all - ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromTransparency(1.0)); - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(1); - expect(colors.contains(bgColor)).to.be.true; - - pixels = vp.readUniquePixelData(); - expect(pixels.length).to.equal(1); - expect(pixels.containsElement(elemId)).to.be.false; - - // Set bg color to red, elem color to 50% transparent blue => expect blending - vp.view.displayStyle.backgroundColor = ColorDef.red; - vp.invalidateRenderPlan(); - ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromJSON({ rgb: new RgbColor(0, 0, 1), transparency: 0.5 })); - vp.view.setFeatureOverridesDirty(true); - await vp.drawFrame(); - colors = vp.readUniqueColors(); - expect(colors.length).to.equal(2); - const red = Color.fromRgba(0xff, 0, 0, 0xff); - expect(colors.contains(red)).to.be.true; - for (const c of colors.array) { - if (0 !== c.compare(red)) { - expect(c.r).least(0x70); - expect(c.r).most(0x90); - expect(c.g).to.equal(0); - /* ###TODO determine why blue is zero? No repro in display-test-app... - expect(c.b).least(0x70); - expect(c.b).most(0x90); - */ - expect(c.a).to.equal(0xff); // The alpha is intentionally not preserved by Viewport.readImage() - } - } - }); - }); - - it("should determine visible depth range", async () => { - const fullRect = new ViewRect(0, 0, 100, 100); - await testViewports("0x24", imodel, fullRect.width, fullRect.height, async (vp) => { - await vp.waitForAllTilesToRender(); - - // Depth range for entire view should correspond to the face of the slab in the center of the view which is parallel to the camera's near+far planes. - // i.e., min and max should be equal, and roughly half-way between the near and far planes. - const fullRange = vp.determineVisibleDepthRange(fullRect); - expect(fullRange).not.to.be.undefined; - expect(fullRange!.minimum).least(0.45); - expect(fullRange!.minimum).most(0.55); - expect(fullRange!.minimum).to.equal(fullRange!.maximum); - - // If we pass in a DepthRangeNpc, the same object should be returned to us. - const myRange = new DepthRangeNpc(); - let range = vp.determineVisibleDepthRange(fullRect, myRange); - expect(range).to.equal(myRange); - expect(range!.maximum).to.equal(fullRange!.maximum); - expect(range!.minimum).to.equal(fullRange!.minimum); - - // Depth range in center of view should be same as above. - const centerRect = new ViewRect(40, 40, 60, 60); - range = vp.determineVisibleDepthRange(centerRect); - expect(range!.maximum).to.equal(fullRange!.maximum); - expect(range!.minimum).to.equal(fullRange!.minimum); - - // Depth range in empty portion of view should be null. - const topLeftRect = new ViewRect(0, 0, 5, 5); - range = vp.determineVisibleDepthRange(topLeftRect); - expect(range).to.be.undefined; - - // If we pass in an output DepthRangeNpc, and read an empty portion of view, the output should be set to a null range but the reutnr value should still be undefined. - range = vp.determineVisibleDepthRange(topLeftRect, myRange); - expect(range).to.be.undefined; - expect(myRange.minimum).to.equal(1); - expect(myRange.maximum).to.equal(0); - }); - }); -}); - -function expectMemory(consumer: RenderMemory.Consumers, total: number, max: number, count: number) { - expect(consumer.totalBytes).to.equal(total); - expect(consumer.maxBytes).to.equal(max); - expect(consumer.count).to.equal(count); -} - -describe("RenderMemory", () => { - it("should accumulate correctly", () => { - const stats = new RenderMemory.Statistics(); - - stats.addTexture(20); - stats.addTexture(10); - expect(stats.totalBytes).to.equal(30); - expectMemory(stats.textures, 30, 20, 2); - - stats.addVertexTable(10); - stats.addVertexTable(20); - expect(stats.totalBytes).to.equal(60); - expectMemory(stats.vertexTables, 30, 20, 2); - - expectMemory(stats.buffers, 0, 0, 0); - - stats.addSurface(20); - stats.addPolyline(30); - stats.addPolyline(10); - expect(stats.totalBytes).to.equal(120); - expectMemory(stats.buffers, 60, 30, 3); - expectMemory(stats.buffers.surfaces, 20, 20, 1); - expectMemory(stats.buffers.polylines, 40, 30, 2); - expectMemory(stats.buffers.pointStrings, 0, 0, 0); - - stats.clear(); - expect(stats.totalBytes).to.equal(0); - expectMemory(stats.textures, 0, 0, 0); - expectMemory(stats.vertexTables, 0, 0, 0); - expectMemory(stats.buffers, 0, 0, 0); - expectMemory(stats.buffers.surfaces, 0, 0, 0); - expectMemory(stats.buffers.polylines, 0, 0, 0); - expectMemory(stats.buffers.pointStrings, 0, 0, 0); - }); -}); +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { expect } from "chai"; +import * as path from "path"; +import { WebGLTestContext } from "../WebGLTestContext"; +import { testViewports, comparePixelData, Color } from "../TestViewport"; +import { RenderMode, ColorDef, RgbColor } from "@bentley/imodeljs-common"; +import { RenderMemory, Pixel } from "@bentley/imodeljs-frontend/lib/rendering"; +import { + DepthRangeNpc, + IModelConnection, + SpatialViewState, + ViewRect, + FeatureSymbology, + FeatureOverrideProvider, + Viewport, +} from "@bentley/imodeljs-frontend"; + +// Mirukuru contains a single view, looking at a single design model containing a single white rectangle (element ID 41 (0x29), subcategory ID = 24 (0x18)). +// (It also is supposed to contain a reality model but the URL is presumably wrong). +// The initial view is in top orientation, centered on the top of the rectangle, but not fitted to its extents (empty space on all sides of rectangle). +// Background color is black; ACS triad on; render mode smooth with lighting enabled and visible edges enabled. +describe("Render mirukuru", () => { + let imodel: IModelConnection; + + before(async () => { + const imodelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/mirukuru.ibim"); + imodel = await IModelConnection.openStandalone(imodelLocation); + WebGLTestContext.startup(); + }); + + after(async () => { + if (imodel) await imodel.closeStandalone(); + WebGLTestContext.shutdown(); + }); + + it("should have expected view definition", async () => { + const viewState = await imodel.views.load("0x24"); + expect(viewState).instanceof(SpatialViewState); + }); + + it("should render empty initial view", async () => { + const rect = new ViewRect(0, 0, 100, 100); + await testViewports("0x24", imodel, rect.width, rect.height, async (vp) => { + await vp.drawFrame(); + + // Should have all black background pixels + let colors = vp.readUniqueColors(); + expect(colors.length).to.equal(1); + expect(colors.contains(Color.fromRgba(0, 0, 0, 0xff))).to.be.true; + + // Change background color - expect pixel colors to match + vp.view.displayStyle.backgroundColor = ColorDef.green; + vp.invalidateRenderPlan(); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(1); + expect(colors.contains(Color.fromRgba(0, 0x80, 0, 0xff))).to.be.true; + + // Should have no features, depth, or geometry - only background pixels + const pixels = vp.readUniquePixelData(); + expect(pixels.length).to.equal(1); + + // Background pixels have distanceFraction = 0 indicating far plane. + const backgroundPixel = new Pixel.Data(undefined, 0, Pixel.GeometryType.None, Pixel.Planarity.None); + expect(comparePixelData(backgroundPixel, pixels.array[0])).to.equal(0); + + // Can read a single pixel + const pixel = vp.readPixel(rect.width / 2, rect.height / 2); + expect(comparePixelData(backgroundPixel, pixel)).to.equal(0); + + // Out-of-bounds pixels are in "unknown" state + const unknownPixel = new Pixel.Data(); + const coords = [[-1, -1], [0, -1], [rect.width, 0], [rect.width - 1, rect.height * 2]]; + for (const coord of coords) { + const oob = vp.readPixel(coord[0], coord[1]); + expect(comparePixelData(unknownPixel, oob)).to.equal(0); + } + }); + }); + + it("should render the model", async () => { + const rect = new ViewRect(0, 0, 100, 100); + await testViewports("0x24", imodel, rect.width, rect.height, async (vp) => { + await vp.waitForAllTilesToRender(); + expect(vp.numRequestedTiles).to.equal(0); + expect(vp.numSelectedTiles).to.equal(1); + + // White rectangle is centered in view with black background surrounding. Lighting is on so rectangle will not be pure white. + let colors = vp.readUniqueColors(); + const bgColor = Color.fromRgba(0, 0, 0, 0xff); + expect(colors.length).least(2); + expect(colors.contains(bgColor)).to.be.true; // black background + + const expectWhitish = (c: Color) => { + expect(c.r).least(0x7f); + expect(c.g).least(0x7f); + expect(c.b).least(0x7f); + expect(c.a).to.equal(0xff); + }; + + for (const c of colors.array) { + if (0 !== c.compare(bgColor)) + expectWhitish(c); + } + + let color = vp.readColor(rect.left, rect.top); + expect(color.compare(bgColor)).to.equal(0); + color = vp.readColor(rect.right - 1, rect.top); + expect(color.compare(bgColor)).to.equal(0); + color = vp.readColor(rect.right - 1, rect.bottom - 1); + expect(color.compare(bgColor)).to.equal(0); + color = vp.readColor(rect.left, rect.bottom - 1); + expect(color.compare(bgColor)).to.equal(0); + + color = vp.readColor(rect.width / 2, rect.height / 2); + expectWhitish(color); + + // Confirm we drew the rectangular element as a planar surface and its edges. + const elemId = "0x29"; + const subcatId = "0x18"; + let pixels = vp.readUniquePixelData(); + expect(pixels.length).to.equal(3); + expect(pixels.containsFeature(elemId, subcatId)); + expect(pixels.containsGeometry(Pixel.GeometryType.Surface, Pixel.Planarity.Planar)); + expect(pixels.containsGeometry(Pixel.GeometryType.Edge, Pixel.Planarity.Planar)); + + // With lighting off, pixels should be either pure black (background) or pure white (rectangle) + // NB: Shouldn't really modify view flags in place but meh. + const vf = vp.view.viewFlags; + vf.sourceLights = vf.cameraLights = vf.solarLight = false; + vp.invalidateRenderPlan(); + await vp.drawFrame(); + + const white = Color.from(0xffffffff); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(2); + expect(colors.contains(bgColor)).to.be.true; + expect(colors.contains(white)).to.be.true; + + // In wireframe, same colors, but center pixel will be background color - only edges draw. + vf.renderMode = RenderMode.Wireframe; + vp.invalidateRenderPlan(); + await vp.drawFrame(); + + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(2); + expect(colors.contains(bgColor)).to.be.true; + expect(colors.contains(white)).to.be.true; + + color = vp.readColor(rect.width / 2, rect.height / 2); + expect(color.compare(bgColor)).to.equal(0); + + pixels = vp.readUniquePixelData(); + expect(pixels.length).to.equal(2); + expect(pixels.containsFeature(elemId, subcatId)); + expect(pixels.containsGeometry(Pixel.GeometryType.Edge, Pixel.Planarity.Planar)); + }); + }); + + it("should override symbology", async () => { + const rect = new ViewRect(0, 0, 200, 150); + await testViewports("0x24", imodel, rect.width, rect.height, async (vp) => { + const elemId = "0x29"; + const subcatId = "0x18"; + const vf = vp.view.viewFlags; + vf.visibleEdges = vf.hiddenEdges = vf.sourceLights = vf.cameraLights = vf.solarLight = false; + + type AddFeatureOverrides = (overrides: FeatureSymbology.Overrides, viewport: Viewport) => void; + class RenderTestOverrideProvider implements FeatureOverrideProvider { + public ovrFunc?: AddFeatureOverrides; + public addFeatureOverrides(overrides: FeatureSymbology.Overrides, viewport: Viewport): void { + if (undefined !== this.ovrFunc) + this.ovrFunc(overrides, viewport); + } + } + const ovrProvider = new RenderTestOverrideProvider(); + vp.featureOverrideProvider = ovrProvider; + + // Specify element is never drawn. + ovrProvider.ovrFunc = (ovrs, _) => ovrs.setNeverDrawn(elemId); + vp.view.setFeatureOverridesDirty(true); + await vp.waitForAllTilesToRender(); + + const bgColor = Color.fromRgba(0, 0, 0, 0xff); + let colors = vp.readUniqueColors(); + expect(colors.length).to.equal(1); + expect(colors.contains(bgColor)).to.be.true; + + let pixels = vp.readUniquePixelData(); + expect(pixels.length).to.equal(1); + + // Specify element is nonLocatable + ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromJSON({ nonLocatable: true })); + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + pixels = vp.readUniquePixelData(undefined, true); // Exclude non-locatable elements + expect(pixels.length).to.equal(1); + expect(pixels.containsElement(elemId)).to.be.false; + pixels = vp.readUniquePixelData(); // Include non-locatable elements + expect(pixels.length).to.equal(2); + expect(pixels.containsElement(elemId)).to.be.true; + + // Specify element is drawn blue + ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromRgb(ColorDef.blue)); + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(2); + expect(colors.contains(Color.fromRgba(0, 0, 0xff, 0xff))).to.be.true; + + // Specify default overrides + ovrProvider.ovrFunc = (ovrs, _) => ovrs.setDefaultOverrides(FeatureSymbology.Appearance.fromRgb(ColorDef.red)); + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(2); + expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.true; + + // Specify default overrides, but also override element color + ovrProvider.ovrFunc = (ovrs, _) => { + ovrs.setDefaultOverrides(FeatureSymbology.Appearance.fromRgb(ColorDef.green)); + ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromRgb(new ColorDef(0x7f0000))); // blue = 0x7f... + }; + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(2); + expect(colors.contains(Color.fromRgba(0, 0, 0x7f, 0xff))).to.be.true; + expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.false; + + // Override by subcategory + ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideSubCategory(subcatId, FeatureSymbology.Appearance.fromRgb(ColorDef.red)); + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.true; + + // Override color for element and subcategory - element wins + ovrProvider.ovrFunc = (ovrs, _) => { + ovrs.overrideSubCategory(subcatId, FeatureSymbology.Appearance.fromRgb(ColorDef.blue)); + ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromRgb(ColorDef.red)); + }; + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.contains(Color.fromRgba(0xff, 0, 0, 0xff))).to.be.true; + + // Override to be fully transparent - element should not draw at all + ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromTransparency(1.0)); + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(1); + expect(colors.contains(bgColor)).to.be.true; + + pixels = vp.readUniquePixelData(); + expect(pixels.length).to.equal(1); + expect(pixels.containsElement(elemId)).to.be.false; + + // Set bg color to red, elem color to 50% transparent blue => expect blending + vp.view.displayStyle.backgroundColor = ColorDef.red; + vp.invalidateRenderPlan(); + ovrProvider.ovrFunc = (ovrs, _) => ovrs.overrideElement(elemId, FeatureSymbology.Appearance.fromJSON({ rgb: new RgbColor(0, 0, 1), transparency: 0.5 })); + vp.view.setFeatureOverridesDirty(true); + await vp.drawFrame(); + colors = vp.readUniqueColors(); + expect(colors.length).to.equal(2); + const red = Color.fromRgba(0xff, 0, 0, 0xff); + expect(colors.contains(red)).to.be.true; + for (const c of colors.array) { + if (0 !== c.compare(red)) { + expect(c.r).least(0x70); + expect(c.r).most(0x90); + expect(c.g).to.equal(0); + /* ###TODO determine why blue is zero? No repro in display-test-app... + expect(c.b).least(0x70); + expect(c.b).most(0x90); + */ + expect(c.a).to.equal(0xff); // The alpha is intentionally not preserved by Viewport.readImage() + } + } + }); + }); + + it("should determine visible depth range", async () => { + const fullRect = new ViewRect(0, 0, 100, 100); + await testViewports("0x24", imodel, fullRect.width, fullRect.height, async (vp) => { + await vp.waitForAllTilesToRender(); + + // Depth range for entire view should correspond to the face of the slab in the center of the view which is parallel to the camera's near+far planes. + // i.e., min and max should be equal, and roughly half-way between the near and far planes. + const fullRange = vp.determineVisibleDepthRange(fullRect); + expect(fullRange).not.to.be.undefined; + expect(fullRange!.minimum).least(0.45); + expect(fullRange!.minimum).most(0.55); + expect(fullRange!.minimum).to.equal(fullRange!.maximum); + + // If we pass in a DepthRangeNpc, the same object should be returned to us. + const myRange = new DepthRangeNpc(); + let range = vp.determineVisibleDepthRange(fullRect, myRange); + expect(range).to.equal(myRange); + expect(range!.maximum).to.equal(fullRange!.maximum); + expect(range!.minimum).to.equal(fullRange!.minimum); + + // Depth range in center of view should be same as above. + const centerRect = new ViewRect(40, 40, 60, 60); + range = vp.determineVisibleDepthRange(centerRect); + expect(range!.maximum).to.equal(fullRange!.maximum); + expect(range!.minimum).to.equal(fullRange!.minimum); + + // Depth range in empty portion of view should be null. + const topLeftRect = new ViewRect(0, 0, 5, 5); + range = vp.determineVisibleDepthRange(topLeftRect); + expect(range).to.be.undefined; + + // If we pass in an output DepthRangeNpc, and read an empty portion of view, the output should be set to a null range but the reutnr value should still be undefined. + range = vp.determineVisibleDepthRange(topLeftRect, myRange); + expect(range).to.be.undefined; + expect(myRange.minimum).to.equal(1); + expect(myRange.maximum).to.equal(0); + }); + }); +}); + +function expectMemory(consumer: RenderMemory.Consumers, total: number, max: number, count: number) { + expect(consumer.totalBytes).to.equal(total); + expect(consumer.maxBytes).to.equal(max); + expect(consumer.count).to.equal(count); +} + +describe("RenderMemory", () => { + it("should accumulate correctly", () => { + const stats = new RenderMemory.Statistics(); + + stats.addTexture(20); + stats.addTexture(10); + expect(stats.totalBytes).to.equal(30); + expectMemory(stats.textures, 30, 20, 2); + + stats.addVertexTable(10); + stats.addVertexTable(20); + expect(stats.totalBytes).to.equal(60); + expectMemory(stats.vertexTables, 30, 20, 2); + + expectMemory(stats.buffers, 0, 0, 0); + + stats.addSurface(20); + stats.addPolyline(30); + stats.addPolyline(10); + expect(stats.totalBytes).to.equal(120); + expectMemory(stats.buffers, 60, 30, 3); + expectMemory(stats.buffers.surfaces, 20, 20, 1); + expectMemory(stats.buffers.polylines, 40, 30, 2); + expectMemory(stats.buffers.pointStrings, 0, 0, 0); + + stats.clear(); + expect(stats.totalBytes).to.equal(0); + expectMemory(stats.textures, 0, 0, 0); + expectMemory(stats.vertexTables, 0, 0, 0); + expectMemory(stats.buffers, 0, 0, 0); + expectMemory(stats.buffers.surfaces, 0, 0, 0); + expectMemory(stats.buffers.polylines, 0, 0, 0); + expectMemory(stats.buffers.pointStrings, 0, 0, 0); + }); +}); diff --git a/test-apps/testbed/frontend/Tool.test.ts b/integration-tests/core/src/frontend/standalone/Tool.test.ts similarity index 97% rename from test-apps/testbed/frontend/Tool.test.ts rename to integration-tests/core/src/frontend/standalone/Tool.test.ts index d64f462..210d33e 100644 --- a/test-apps/testbed/frontend/Tool.test.ts +++ b/integration-tests/core/src/frontend/standalone/Tool.test.ts @@ -6,9 +6,8 @@ import * as path from "path"; import { assert } from "chai"; import { MockRender, IModelConnection, ElementAgenda, ModifyElementSource, SelectEventType } from "@bentley/imodeljs-frontend"; import { Id64 } from "@bentley/bentleyjs-core"; -import { CONSTANTS } from "../common/Testbed"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); describe("Tools", () => { let imodel: IModelConnection; diff --git a/test-apps/testbed/frontend/ViewState.test.ts b/integration-tests/core/src/frontend/standalone/ViewState.test.ts similarity index 97% rename from test-apps/testbed/frontend/ViewState.test.ts rename to integration-tests/core/src/frontend/standalone/ViewState.test.ts index 9f95ec2..e5b8b2a 100644 --- a/test-apps/testbed/frontend/ViewState.test.ts +++ b/integration-tests/core/src/frontend/standalone/ViewState.test.ts @@ -10,18 +10,16 @@ import { SpatialViewState, ViewStatus, ViewState3d, StandardView, StandardViewId, MarginPercent, AuxCoordSystemSpatialState, CategorySelectorState, ModelSelectorState, IModelConnection, DisplayStyle3dState, SheetModelState, SpatialModelState, DrawingModelState, MockRender, } from "@bentley/imodeljs-frontend"; -import { CONSTANTS } from "../common/Testbed"; -import { IModelUnitTestRpcInterface } from "../common/IModelUnitTestRpcInterface"; -import { IModelUnitTestRpcImpl } from "../backend/IModelUnitTestRpcImpl"; +import { TestRpcInterface } from "../../common/RpcInterfaces"; -const iModelLocation = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/test.bim"); -const iModelLocation2 = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets/CompatibilityTestSeed.bim"); +const iModelLocation = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/test.bim"); +const iModelLocation2 = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets/CompatibilityTestSeed.bim"); describe("ViewState", () => { let imodel: IModelConnection; let imodel2: IModelConnection; let viewState: SpatialViewState; - let unitTestRpcImp: IModelUnitTestRpcImpl; + let unitTestRpcImp: TestRpcInterface; before(async () => { MockRender.App.startup(); @@ -32,12 +30,13 @@ describe("ViewState", () => { imodel2 = await IModelConnection.openStandalone(iModelLocation2); - unitTestRpcImp = IModelUnitTestRpcInterface.getClient(); + unitTestRpcImp = TestRpcInterface.getClient(); }); after(async () => { if (imodel) await imodel.closeStandalone(); if (imodel2) await imodel2.closeStandalone(); + MockRender.App.shutdown(); }); const compareView = (v1: SpatialViewState, v2: SpatialViewDefinitionProps, str: string) => { diff --git a/test-apps/testbed/frontend/Viewport.test.ts b/integration-tests/core/src/frontend/standalone/Viewport.test.ts similarity index 98% rename from test-apps/testbed/frontend/Viewport.test.ts rename to integration-tests/core/src/frontend/standalone/Viewport.test.ts index 9ac30a2..92b5465 100644 --- a/test-apps/testbed/frontend/Viewport.test.ts +++ b/integration-tests/core/src/frontend/standalone/Viewport.test.ts @@ -7,10 +7,9 @@ import { Point3d, Angle } from "@bentley/geometry-core"; import { Cartographic, FontType, FontMap, ColorDef } from "@bentley/imodeljs-common"; import * as path from "path"; import { MockRender, SpatialViewState, StandardViewId, IModelConnection, ScreenViewport, IModelApp, PanViewTool, CompassMode, TwoWayViewportSync } from "@bentley/imodeljs-frontend"; -import { CONSTANTS } from "../common/Testbed"; import { RenderPlan } from "@bentley/imodeljs-frontend/lib/rendering"; -const iModelDir = path.join(CONSTANTS.IMODELJS_CORE_DIRNAME, "core/backend/lib/test/assets"); +const iModelDir = path.join(process.env.IMODELJS_CORE_DIRNAME!, "core/backend/lib/test/assets"); describe("Viewport", () => { let imodel: IModelConnection; diff --git a/test-apps/testbed/tsconfig.json b/integration-tests/core/tsconfig.json similarity index 55% rename from test-apps/testbed/tsconfig.json rename to integration-tests/core/tsconfig.json index 77cdd06..0ca1e81 100644 --- a/test-apps/testbed/tsconfig.json +++ b/integration-tests/core/tsconfig.json @@ -1,15 +1,9 @@ { "extends": "./node_modules/@bentley/build-tools/tsconfig-base.json", "compilerOptions": { - "target": "es2017", - "module": "commonjs", "outDir": "./lib" }, "include": [ - "./**/*.ts" - ], - "exclude": [ - "lib", - "node_modules" + "src/**/*.ts" ] } \ No newline at end of file diff --git a/integration-tests/core/tslint.json b/integration-tests/core/tslint.json new file mode 100644 index 0000000..b30d9ab --- /dev/null +++ b/integration-tests/core/tslint.json @@ -0,0 +1,8 @@ +{ + "extends": "@bentley/build-tools/tslint.json", + "rules": { + "no-direct-imports": false, + "no-conditional-assignment": true, + "callable-types": false + } +} \ No newline at end of file diff --git a/integration-tests/core/webpack.config.js b/integration-tests/core/webpack.config.js new file mode 100644 index 0000000..fe1795f --- /dev/null +++ b/integration-tests/core/webpack.config.js @@ -0,0 +1,86 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +const path = require("path"); +const glob = require("glob"); +const webpack = require("webpack"); +const raw = require("@bentley/config-loader/lib/IModelJsConfig").IModelJsConfig.init(true /*suppress error*/, true); + +function createConfig(shouldInstrument) { + const config = { + mode: "development", + entry: glob.sync(path.resolve(__dirname, "lib/**/*.test.js")), + output: { + path: path.resolve(__dirname, "lib/dist"), + filename: "bundled-tests.js", + devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]" + }, + devtool: "nosources-source-map", + module: { + noParse: [ + // Don't parse draco_*_nodejs.js modules for `require` calls. There are + // requires for fs that cause it to fail even though the fs dependency + // is not used. + /draco_decoder_nodejs.js$/, + /draco_encoder_nodejs.js$/ + ], + rules: [ + { + test: /\.js$/, + use: "source-map-loader", + enforce: "pre" + }, + { + test: /azure-storage|AzureFileHandler|UrlFileHandler/, + use: "null-loader" + }, + ] + }, + stats: "errors-only", + optimization: { + nodeEnv: "production" + }, + plugins: [ + // Makes some environment variables available to the JS code, for example: + // if (process.env.NODE_ENV === "development") { ... }. See `./env.js`. + new webpack.DefinePlugin({ + "process.env": Object.keys(raw) + .filter((key) => { + return key.match(/^imjs_/i); + }) + .reduce((env, key) => { + env[key] = JSON.stringify(raw[key]); + return env; + }, { + IMODELJS_CORE_DIRNAME: JSON.stringify(path.join(__dirname, "../..")), + }), + }) + ] + }; + + if (shouldInstrument) { + config.output.filename = "bundled-tests.instrumented.js"; + config.module.rules.push({ + test: /\.(jsx?|tsx?)$/, + include: [ + path.join(__dirname, "../../core/backend"), + path.join(__dirname, "../../core/frontend"), + ], + loader: require.resolve("istanbul-instrumenter-loader"), + options: { + debug: true + }, + enforce: "post", + }); + } + + return config; +} + +// Exporting two configs in a array like this actually tells webpack to run twice - once for each config. +module.exports = [ + createConfig(true), + createConfig(false) +] diff --git a/integration-tests/rpc/README.md b/integration-tests/rpc/README.md new file mode 100644 index 0000000..00a4693 --- /dev/null +++ b/integration-tests/rpc/README.md @@ -0,0 +1,4 @@ +# iModel.js RPC Tests +This package contains tests of the RPC transport mechanism defined in imodeljs-common. + +Tests in this package should **only** have dependencies on the imodeljs-common package. \ No newline at end of file diff --git a/integration-tests/rpc/certa.json b/integration-tests/rpc/certa.json new file mode 100644 index 0000000..b552eff --- /dev/null +++ b/integration-tests/rpc/certa.json @@ -0,0 +1,13 @@ +{ + // Comments are allowed here! + "testBundle": "./lib/dist/bundled-tests.js", + "ports": { + "frontend": 3020, + "frontendDebugging": 9223 + }, + "chromeOptions": { + "args": [ + "--disable-web-security" + ] + } +} \ No newline at end of file diff --git a/test-apps/testbed/local_dev_server.crt b/integration-tests/rpc/local_dev_server.crt similarity index 100% rename from test-apps/testbed/local_dev_server.crt rename to integration-tests/rpc/local_dev_server.crt diff --git a/test-apps/testbed/local_dev_server.key b/integration-tests/rpc/local_dev_server.key similarity index 100% rename from test-apps/testbed/local_dev_server.key rename to integration-tests/rpc/local_dev_server.key diff --git a/integration-tests/rpc/package.json b/integration-tests/rpc/package.json new file mode 100644 index 0000000..f8d0eaf --- /dev/null +++ b/integration-tests/rpc/package.json @@ -0,0 +1,50 @@ +{ + "name": "rpc-integration-tests", + "//private": "NOTE: this is a private package that is never published", + "private": true, + "license": "MIT", + "scripts": { + "build": "tsc 1>&2 && npm run webpack:frontend && node ./node_modules/@bentley/build-tools/scripts/ignoreargs.js 1>&2", + "clean": "rimraf lib package-deps.json coverage", + "cover": "", + "docs": "", + "lint": "tslint --project . 1>&2", + "webpack:frontend": "webpack --config webpack.config.js 1>&2", + "test": "npm run test:chrome && npm run test:http2 && npm run test:direct", + "test:chrome": "node ./node_modules/@bentley/certa/bin/certa.js -r chrome -b ./lib/backend/http.js", + "test:http2": "node ./node_modules/@bentley/certa/bin/certa.js -r chrome -b ./lib/backend/http2.js --invert --grep \"#FIXME-http2\"", + "test:electron": "node ./node_modules/@bentley/certa/bin/certa.js -r electron -b ./lib/backend/electron.js", + "test:direct": "node ./node_modules/@bentley/certa/bin/certa.js -r node -b ./lib/backend/direct.js --invert --grep \"#FIXME-direct\"" + }, + "repository": {}, + "dependencies": { + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "chai": "^4.1.2", + "electron": "^4.0.1", + "express": "^4.16.3", + "semver": "^5.5.0" + }, + "devDependencies": { + "@bentley/certa": "0.190.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@types/chai": "^4.1.4", + "@types/express": "^4.16.1", + "@types/mocha": "^5.2.5", + "@types/node": "10.12.18", + "@types/semver": "^5.5.0", + "@types/webpack": "^3.8.5", + "chai": "^4.1.2", + "cpx": "^1.5.0", + "glob": "^7.1.2", + "null-loader": "^0.1.1", + "rimraf": "^2.6.2", + "source-map-loader": "^0.2.3", + "tslint": "^5.11.0", + "typescript": "~3.2.2", + "webpack": "^4.20.2" + } +} diff --git a/integration-tests/rpc/src/backend/CommonBackendSetup.ts b/integration-tests/rpc/src/backend/CommonBackendSetup.ts new file mode 100644 index 0000000..dbf4d7d --- /dev/null +++ b/integration-tests/rpc/src/backend/CommonBackendSetup.ts @@ -0,0 +1,55 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { IModelHost } from "@bentley/imodeljs-backend"; +import { RpcConfiguration, IModelReadRpcInterface } from "@bentley/imodeljs-common"; +import { Logger, LogLevel } from "@bentley/bentleyjs-core"; +import { IModelJsConfig } from "@bentley/config-loader/lib/IModelJsConfig"; +import { Config } from "@bentley/imodeljs-clients"; +import { registerBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BackendTestCallbacks } from "../common/SideChannels"; +import { TestRpcImpl2, resetOp8Initializer } from "./TestRpcImpl"; + +IModelJsConfig.init(true, true, Config.App); +RpcConfiguration.developmentMode = true; + +// Start the backend +IModelHost.startup(); + +registerBackendCallback(BackendTestCallbacks.registerTestRpcImpl2Class, () => { + TestRpcImpl2.register(); + TestRpcImpl2.instantiate(); + return true; +}); + +registerBackendCallback(BackendTestCallbacks.replaceTestRpcImpl2Instance, () => { + TestRpcImpl2.instantiate(); + return true; +}); + +registerBackendCallback(BackendTestCallbacks.unregisterTestRpcImpl2Class, () => { + TestRpcImpl2.unregister(); + return true; +}); + +registerBackendCallback(BackendTestCallbacks.setIncompatibleInterfaceVersion, () => { + IModelReadRpcInterface.version = "0.0.0"; + return true; +}); + +const compatibleVersion = IModelReadRpcInterface.version; +registerBackendCallback(BackendTestCallbacks.restoreIncompatibleInterfaceVersion, () => { + IModelReadRpcInterface.version = compatibleVersion; + return true; +}); + +registerBackendCallback(BackendTestCallbacks.resetOp8Initializer, () => { + resetOp8Initializer(); + return true; +}); + +Logger.initializeToConsole(); +Logger.setLevel("imodeljs-backend.IModelReadRpcImpl", LogLevel.Error); // Change to trace to debug +Logger.setLevel("imodeljs-backend.IModelDb", LogLevel.Error); // Change to trace to debug +Logger.setLevel("Performance", LogLevel.Error); // Change to Info to capture diff --git a/test-apps/testbed/backend/TestRpcImpl.ts b/integration-tests/rpc/src/backend/TestRpcImpl.ts similarity index 83% rename from test-apps/testbed/backend/TestRpcImpl.ts rename to integration-tests/rpc/src/backend/TestRpcImpl.ts index 263fb98..e224280 100644 --- a/test-apps/testbed/backend/TestRpcImpl.ts +++ b/integration-tests/rpc/src/backend/TestRpcImpl.ts @@ -2,12 +2,18 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -import { TestRpcInterface, ZeroMajorRpcInterface, TestOp1Params, TestRpcInterface2, TestRpcInterface3, TestNotFoundResponse, TestNotFoundResponseCode } from "../common/TestRpcInterface"; -import { RpcInterface, RpcManager, RpcRequest, RpcOperationsProfile, RpcPendingResponse, IModelToken, RpcInvocation } from "@bentley/imodeljs-common"; +import { TestRpcInterface, ZeroMajorRpcInterface, TestOp1Params, TestRpcInterface2, TestRpcInterface3, TestNotFoundResponse, TestNotFoundResponseCode, RpcTransportTestImpl } from "../common/TestRpcInterface"; +import { RpcInterface, RpcManager, RpcRequest, RpcOperationsProfile, RpcPendingResponse, RpcInvocation } from "@bentley/imodeljs-common"; import { BentleyError, BentleyStatus, Id64String, ActivityLoggingContext } from "@bentley/bentleyjs-core"; -import { BriefcaseManager, ChangeSummaryManager, ChangeSummaryExtractOptions, IModelDb, IModelJsFs } from "@bentley/imodeljs-backend"; -import { AccessToken } from "@bentley/imodeljs-clients"; -import { testInterfaceResource } from "../common/TestbedConfig"; + +export async function testInterfaceResource() { + const data = new Uint8Array(4); + data[0] = 1; + data[1] = 2; + data[2] = 3; + data[3] = 4; + return Promise.resolve(data); +} let op8Initializer = 0; @@ -93,21 +99,6 @@ export class TestRpcImpl extends RpcInterface implements TestRpcInterface { } } - public async extractChangeSummaries(accessToken: AccessToken, iModelToken: IModelToken, options: any): Promise { - const activityContext = ActivityLoggingContext.current; activityContext.enter(); - await ChangeSummaryManager.extractChangeSummaries(activityContext, accessToken, IModelDb.find(iModelToken), options as ChangeSummaryExtractOptions); - } - - public async deleteChangeCache(iModelToken: IModelToken): Promise { - const activityContext = ActivityLoggingContext.current; activityContext.enter(); - if (!iModelToken.iModelId) - throw new Error("iModelToken is invalid. Must not be a standalone iModel"); - - const changesPath: string = BriefcaseManager.getChangeCachePathName(iModelToken.iModelId); - if (IModelJsFs.existsSync(changesPath)) - IModelJsFs.unlinkSync(changesPath); - } - public async op9(requestId: string): Promise { const activityContext = ActivityLoggingContext.current; activityContext.enter(); const invocation = RpcInvocation.current(this); @@ -213,3 +204,8 @@ export class TestRpcImpl3 extends RpcInterface implements TestRpcInterface3 { return data; } } + +TestRpcImpl.register(); +TestRpcImpl3.register(); +TestZeroMajorRpcImpl.register(); +RpcTransportTestImpl.register(); diff --git a/integration-tests/rpc/src/backend/direct.ts b/integration-tests/rpc/src/backend/direct.ts new file mode 100644 index 0000000..91b197e --- /dev/null +++ b/integration-tests/rpc/src/backend/direct.ts @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { registerBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BackendTestCallbacks } from "../common/SideChannels"; +import "./CommonBackendSetup"; + +registerBackendCallback(BackendTestCallbacks.getEnvironment, () => "direct"); diff --git a/integration-tests/rpc/src/backend/electron.ts b/integration-tests/rpc/src/backend/electron.ts new file mode 100644 index 0000000..abb468f --- /dev/null +++ b/integration-tests/rpc/src/backend/electron.ts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { ElectronRpcManager } from "@bentley/imodeljs-common"; +import { rpcInterfaces } from "../common/TestRpcInterface"; +import { registerBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BackendTestCallbacks } from "../common/SideChannels"; +import "./CommonBackendSetup"; + +registerBackendCallback(BackendTestCallbacks.getEnvironment, () => "electron"); + +const rpcConfig = ElectronRpcManager.initializeImpl({}, rpcInterfaces); + +registerBackendCallback(BackendTestCallbacks.setChunkThreshold, (value: number) => { + rpcConfig.protocol.transferChunkThreshold = value; + return true; +}); diff --git a/integration-tests/rpc/src/backend/http.ts b/integration-tests/rpc/src/backend/http.ts new file mode 100644 index 0000000..bc0a26e --- /dev/null +++ b/integration-tests/rpc/src/backend/http.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { BentleyCloudRpcManager } from "@bentley/imodeljs-common"; +import { rpcInterfaces } from "../common/TestRpcInterface"; +import { IModelJsExpressServer } from "@bentley/imodeljs-backend"; +import * as express from "express"; + +import { registerBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BackendTestCallbacks } from "../common/SideChannels"; +import "./CommonBackendSetup"; + +registerBackendCallback(BackendTestCallbacks.getEnvironment, () => "http"); + +async function init() { + const rpcConfig = BentleyCloudRpcManager.initializeImpl({ info: { title: "rpc-integration-test", version: "v1.0" } }, rpcInterfaces); + + // create a basic express web server + const port = Number(process.env.CERTA_PORT || 3021) + 2000; + const app = express(); + const server = new IModelJsExpressServer(app, rpcConfig.protocol); + await server.initialize(port); + // tslint:disable-next-line:no-console + console.log("Web backend for integration-tests listening on port " + port); +} + +module.exports = init(); diff --git a/integration-tests/rpc/src/backend/http2.ts b/integration-tests/rpc/src/backend/http2.ts new file mode 100644 index 0000000..971c3d6 --- /dev/null +++ b/integration-tests/rpc/src/backend/http2.ts @@ -0,0 +1,110 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as path from "path"; +import * as fs from "fs"; +import * as http2 from "http2"; +import { BentleyCloudRpcManager, BentleyCloudRpcConfiguration, HttpServerRequest, HttpServerResponse } from "@bentley/imodeljs-common"; +import { rpcInterfaces } from "../common/TestRpcInterface"; + +import { registerBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BackendTestCallbacks } from "../common/SideChannels"; +import "./CommonBackendSetup"; + +registerBackendCallback(BackendTestCallbacks.getEnvironment, () => "http2"); + +async function init() { + const rpcConfig = BentleyCloudRpcManager.initializeImpl({ info: { title: "integration-test", version: "v1.0" } }, rpcInterfaces); + // create a basic express web server + const port = Number(process.env.CERTA_PORT || 3021) + 2000; + await initHttpForConfig(rpcConfig, port); + // tslint:disable-next-line:no-console + console.log("HTTP2 Web backend for integration-tests listening on port " + port); +} + +async function initHttpForConfig(rpcConfig: BentleyCloudRpcConfiguration, port: number) { + const http2Options = { key: fs.readFileSync(path.join(__dirname, "../../local_dev_server.key")), cert: fs.readFileSync(path.join(__dirname, "../../local_dev_server.crt")) }; + http2.createSecureServer(http2Options, (req2, res2) => { + if (req2.method === "GET") { + handleHttp2Get(req2, res2); + } else if (req2.method === "POST") { + handleHttp2Post(req2, res2); // tslint:disable-line:no-floating-promises + } + }).listen(port); + + function handleHttp2Get(req2: http2.Http2ServerRequest, res2: http2.Http2ServerResponse) { + const { req, res } = wrapHttp2API(req2, res2); + + if (req2.url.indexOf("/v3/swagger.json") === 0) { + rpcConfig.protocol.handleOpenApiDescriptionRequest(req, res); + } else if (req2.url.match(/\/imodel\//)) { + rpcConfig.protocol.handleOperationGetRequest(req, res); // tslint:disable-line:no-floating-promises + } else { + // serve static assets... + const p = path.join(__dirname, "/public", req2.url); // FYI: path.join(...req.url) is NOT safe for a production server + if (fs.existsSync(p)) { + fs.createReadStream(p).pipe(req2.stream); + } else { + res2.statusCode = 404; + res2.end(""); + } + } + } + + async function handleHttp2Post(req2: http2.Http2ServerRequest, res2: http2.Http2ServerResponse) { + const { req, res } = wrapHttp2API(req2, res2); + + try { + req.body = await readHttp2Body(req2); + rpcConfig.protocol.handleOperationPostRequest(req, res); // tslint:disable-line:no-floating-promises + } catch (err) { + res2.end(`Fatal testbed error: ${err.toString()}`); + } + } + + async function readHttp2Body(req2: http2.Http2ServerRequest) { + return new Promise((resolve, reject) => { + const chunks: Buffer[] = []; + req2.on("data", (chunk) => { + chunks.push(chunk); + }).on("end", () => { + const body = Buffer.concat(chunks); + resolve((req2.headers["content-type"] === "application/octet-stream") ? body : body.toString()); + }).on("error", (err) => { + reject(err); + }); + }); + } + + function wrapHttp2API(req2: http2.Http2ServerRequest, res2: http2.Http2ServerResponse) { + const req: HttpServerRequest = req2 as any; + const res: HttpServerResponse = res2 as any; + + req.path = req2.url; + + req.header = (field: string) => { + const value = req2.headers[field.toLowerCase()]; + if (Array.isArray(value)) return value.join(","); + return value; + }; + + res.send = (body?: any) => { + res2.end(body); + return res; + }; + + res.set = (field: string, value: string) => { + res2.setHeader(field, value); + }; + + res.status = (code: number) => { + res2.statusCode = code; + return res; + }; + + return { req, res }; + } +} + +module.exports = init(); diff --git a/integration-tests/rpc/src/common/SideChannels.ts b/integration-tests/rpc/src/common/SideChannels.ts new file mode 100644 index 0000000..208c9ff --- /dev/null +++ b/integration-tests/rpc/src/common/SideChannels.ts @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +export enum BackendTestCallbacks { + registerTestRpcImpl2Class = "registerTestRpcImpl2Class", + replaceTestRpcImpl2Instance = "replaceTestRpcImpl2Instance", + unregisterTestRpcImpl2Class = "unregisterTestRpcImpl2Class", + setIncompatibleInterfaceVersion = "setIncompatibleInterfaceVersion", + restoreIncompatibleInterfaceVersion = "restoreIncompatibleInterfaceVersion", + resetOp8Initializer = "resetOp8Initializer", + getEnvironment = "getEnvironment", + setChunkThreshold = "setChunkThreshold", // Only registered for electron! +} diff --git a/test-apps/testbed/common/TestRpcInterface.ts b/integration-tests/rpc/src/common/TestRpcInterface.ts similarity index 66% rename from test-apps/testbed/common/TestRpcInterface.ts rename to integration-tests/rpc/src/common/TestRpcInterface.ts index c87c56e..688f77a 100644 --- a/test-apps/testbed/common/TestRpcInterface.ts +++ b/integration-tests/rpc/src/common/TestRpcInterface.ts @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -import { RpcInterface, RpcManager, RpcOperationsProfile, IModelToken, RpcNotFoundResponse } from "@bentley/imodeljs-common"; +import { RpcInterface, RpcManager, RpcOperationsProfile, IModelToken, RpcNotFoundResponse, IModelReadRpcInterface, WipRpcInterface, RpcInterfaceDefinition } from "@bentley/imodeljs-common"; import { Id64String } from "@bentley/bentleyjs-core"; import { AccessToken } from "@bentley/imodeljs-clients"; @@ -107,14 +107,6 @@ export abstract class TestRpcInterface extends RpcInterface { return this.forward(arguments); } - /** exposed in test RPC interface so that this functionality can be tested from the frontend perspective */ - public async extractChangeSummaries(_accessToken: AccessToken, _iModelToken: IModelToken, _options: any): Promise { - return this.forward(arguments); - } - public async deleteChangeCache(_iModelToken: IModelToken): Promise { - return this.forward(arguments); - } - public async op9(_requestId: string): Promise { return this.forward(arguments); } @@ -178,38 +170,7 @@ export abstract class RpcTransportTest extends RpcInterface { public static version = "1.0.0"; public static types = () => []; - public abstract primitive(_value: string): Promise; - public abstract binary(_value: Uint8Array): Promise; - public abstract mixed(_value1: string, _value2: Uint8Array): Promise<{ 0: string, 1: Uint8Array }>; - public abstract nested(_value: { a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }): Promise<{ a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }>; -} - -export abstract class RpcWebTransportTest extends RpcTransportTest { - public static getClient(): RpcWebTransportTest { return RpcManager.getClientForInterface(RpcWebTransportTest); } - public async primitive(_value: string): Promise { return this.forward(arguments); } - public async binary(_value: Uint8Array): Promise { return this.forward(arguments); } - public async mixed(_value1: string, _value2: Uint8Array): Promise<{ 0: string, 1: Uint8Array }> { return this.forward(arguments); } - public async nested(_value: { a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }): Promise<{ a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }> { return this.forward(arguments); } -} - -export abstract class RpcElectronTransportTest extends RpcTransportTest { - public static getClient(): RpcElectronTransportTest { return RpcManager.getClientForInterface(RpcElectronTransportTest); } - public async primitive(_value: string): Promise { return this.forward(arguments); } - public async binary(_value: Uint8Array): Promise { return this.forward(arguments); } - public async mixed(_value1: string, _value2: Uint8Array): Promise<{ 0: string, 1: Uint8Array }> { return this.forward(arguments); } - public async nested(_value: { a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }): Promise<{ a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }> { return this.forward(arguments); } -} - -export abstract class RpcMobileTransportTest extends RpcTransportTest { - public static getClient(): RpcMobileTransportTest { return RpcManager.getClientForInterface(RpcMobileTransportTest); } - public async primitive(_value: string): Promise { return this.forward(arguments); } - public async binary(_value: Uint8Array): Promise { return this.forward(arguments); } - public async mixed(_value1: string, _value2: Uint8Array): Promise<{ 0: string, 1: Uint8Array }> { return this.forward(arguments); } - public async nested(_value: { a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }): Promise<{ a: { x: Uint8Array, y: number }, b: string, c: Uint8Array }> { return this.forward(arguments); } -} - -export abstract class RpcDirectTransportTest extends RpcTransportTest { - public static getClient(): RpcDirectTransportTest { return RpcManager.getClientForInterface(RpcDirectTransportTest); } + public static getClient(): RpcTransportTest { return RpcManager.getClientForInterface(RpcTransportTest); } public async primitive(_value: string): Promise { return this.forward(arguments); } public async binary(_value: Uint8Array): Promise { return this.forward(arguments); } public async mixed(_value1: string, _value2: Uint8Array): Promise<{ 0: string, 1: Uint8Array }> { return this.forward(arguments); } @@ -217,6 +178,10 @@ export abstract class RpcDirectTransportTest extends RpcTransportTest { } export class RpcTransportTestImpl extends RpcInterface implements RpcTransportTest { + public static register() { + RpcManager.registerImpl(RpcTransportTest, RpcTransportTestImpl); + } + public static mutateString(value: string): string { return value.toUpperCase(); } @@ -254,3 +219,13 @@ export class RpcTransportTestImpl extends RpcInterface implements RpcTransportTe }); } } + +export const rpcInterfaces: RpcInterfaceDefinition[] = [ + IModelReadRpcInterface, + TestRpcInterface, + TestRpcInterface2, + TestRpcInterface3, + RpcTransportTest, + WipRpcInterface, + ZeroMajorRpcInterface, +]; diff --git a/integration-tests/rpc/src/frontend/Rpc.ElectronProtocol.test.ts b/integration-tests/rpc/src/frontend/Rpc.ElectronProtocol.test.ts new file mode 100644 index 0000000..2682c90 --- /dev/null +++ b/integration-tests/rpc/src/frontend/Rpc.ElectronProtocol.test.ts @@ -0,0 +1,61 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { RpcProtocolEvent, RpcRequest, ElectronRpcConfiguration } from "@bentley/imodeljs-common"; +import { TestRpcInterface3 } from "../common/TestRpcInterface"; +import { assert } from "chai"; +import { executeBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BackendTestCallbacks } from "../common/SideChannels"; + +// N.B.: These tests only run in electron! +if (ElectronRpcConfiguration.isElectron) { + describe("Rpc.ElectronProtocol", () => { + it("should generate one response per request", async () => { + let received = 0; + let request: RpcRequest; + const client = TestRpcInterface3.getClient(); + + const removeListener = client.configuration.protocol.events.addListener((type, object) => { + if (type !== RpcProtocolEvent.ResponseLoaded) + return; + + if (!request) + request = object as RpcRequest; + else if (object !== request) + return; + + ++received; + }); + + const response = await client.op1(1); + assert.equal(response, 1); + + return new Promise((resolve, reject) => setTimeout(() => { + removeListener(); + (received === 1) ? resolve() : reject(new Error(`Received ${received} responses for 1 request`)); + }, 2000)); + }); + + it("should chunk data larger than 64mb", async () => { + const client = TestRpcInterface3.getClient(); + const threshold = client.configuration.protocol.transferChunkThreshold; + + let size = 2 * 1024 * 1024; + assert(await executeBackendCallback(BackendTestCallbacks.setChunkThreshold, size)); + let data = await client.op2(size * 2, true); + assert.equal(data.byteLength, size * 2); + + for (let i = 0; i !== (size * 2); ++i) { + assert.equal(data[i], i % 2); + } + + size = 48 * 1024 * 1024; + assert(await executeBackendCallback(BackendTestCallbacks.setChunkThreshold, size)); + data = await client.op2(size * 2, false); + assert.equal(data.byteLength, size * 2); + + assert(await executeBackendCallback(BackendTestCallbacks.setChunkThreshold, threshold)); + }); + }); +} diff --git a/test-apps/testbed/frontend/Rpc.HttpProtocol.test.ts b/integration-tests/rpc/src/frontend/Rpc.HttpProtocol.test.ts similarity index 86% rename from test-apps/testbed/frontend/Rpc.HttpProtocol.test.ts rename to integration-tests/rpc/src/frontend/Rpc.HttpProtocol.test.ts index daf9fce..4111800 100644 --- a/test-apps/testbed/frontend/Rpc.HttpProtocol.test.ts +++ b/integration-tests/rpc/src/frontend/Rpc.HttpProtocol.test.ts @@ -5,10 +5,8 @@ import { RpcRequestEvent, RpcRequest, RpcOperation, ServerError, ServerTimeoutError } from "@bentley/imodeljs-common"; import { TestRpcInterface, TestOp1Params } from "../common/TestRpcInterface"; import { assert } from "chai"; -import { TestbedConfig } from "../common/TestbedConfig"; -import { CONSTANTS } from "../common/Testbed"; -if (TestbedConfig.cloudRpc) { +if (false) { describe("Rpc.HttpProtocol", () => { it("should send pending request updates.", async () => { const COUNT = Symbol("Pending Count"); @@ -33,12 +31,12 @@ if (TestbedConfig.cloudRpc) { op1.policy.retryInterval = () => 1; - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.PENDING_RESPONSE_QUOTA_MESSAGE, value: expectedPendings })); + // assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.PENDING_RESPONSE_QUOTA_MESSAGE, value: expectedPendings })); const params = new TestOp1Params(1, 1); const remoteSum = await TestRpcInterface.getClient().op1(params); - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.PENDING_RESPONSE_QUOTA_MESSAGE, value: 0 })); + // assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.PENDING_RESPONSE_QUOTA_MESSAGE, value: 0 })); removeListener(); assert.equal(pendingsReceived, expectedPendings); diff --git a/test-apps/testbed/frontend/RpcInterface.test.ts b/integration-tests/rpc/src/frontend/RpcInterface.test.ts similarity index 80% rename from test-apps/testbed/frontend/RpcInterface.test.ts rename to integration-tests/rpc/src/frontend/RpcInterface.test.ts index 3be8ab3..02dbc81 100644 --- a/test-apps/testbed/frontend/RpcInterface.test.ts +++ b/integration-tests/rpc/src/frontend/RpcInterface.test.ts @@ -13,8 +13,8 @@ import { IModelReadRpcInterface, IModelToken, RpcResponseCacheControl, + WipRpcInterface, } from "@bentley/imodeljs-common"; -import { WipRpcInterface } from "@bentley/imodeljs-common/lib/rpc/WipRpcInterface"; // not part of the "barrel" import { BentleyError, Id64, OpenMode } from "@bentley/bentleyjs-core"; import { TestRpcInterface, @@ -22,19 +22,15 @@ import { TestRpcInterface2, TestNotFoundResponse, TestNotFoundResponseCode, - RpcDirectTransportTest, RpcTransportTestImpl, RpcTransportTest, - RpcWebTransportTest, - RpcElectronTransportTest, - RpcMobileTransportTest, ZeroMajorRpcInterface, } from "../common/TestRpcInterface"; import { assert } from "chai"; -import { TestbedConfig } from "../common/TestbedConfig"; -import { CONSTANTS } from "../common/Testbed"; +import { BackendTestCallbacks } from "../common/SideChannels"; import * as semver from "semver"; +import { executeBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; const timeout = async (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -140,7 +136,7 @@ describe("RpcInterface", () => { assert.strictEqual(data1.y, data2.y); }); - it("should report aggregate operation load profile information", async () => { + it("should report aggregate operation load profile information #FIXME-direct", async () => { const load = RpcRequest.aggregateLoad; const frontendInitialReq = load.lastRequest; const frontendInitialResp = load.lastResponse; @@ -158,7 +154,7 @@ describe("RpcInterface", () => { assert.isAbove(backendAggregate2.lastResponse, backendAggregate1.lastResponse); }); - it("should support pending operations", async () => { + it("should support pending operations #FIXME-direct", async () => { const op8 = RpcOperation.lookup(TestRpcInterface, "op8"); let receivedPending = false; @@ -185,7 +181,8 @@ describe("RpcInterface", () => { assert.isTrue(receivedPending); removeListener(); - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.RESET_OP8_INITIALIZER, value: undefined })); + + assert(await executeBackendCallback(BackendTestCallbacks.resetOp8Initializer)); }); it("should support supplied RPC implementation instances", async () => { @@ -196,17 +193,17 @@ describe("RpcInterface", () => { assert(true); } - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.REGISTER_TEST_RPCIMPL2_CLASS_MESSAGE, value: undefined })); + assert(await executeBackendCallback(BackendTestCallbacks.registerTestRpcImpl2Class)); const response1 = await TestRpcInterface2.getClient().op1(1); assert.equal(response1, 1); - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.REPLACE_TEST_RPCIMPL2_INSTANCE_MESSAGE, value: undefined })); + assert(await executeBackendCallback(BackendTestCallbacks.replaceTestRpcImpl2Instance)); const response2 = await TestRpcInterface2.getClient().op1(2); assert.equal(response2, 2); - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.UNREGISTER_TEST_RPCIMPL2_CLASS_MESSAGE, value: undefined })); + assert(await executeBackendCallback(BackendTestCallbacks.unregisterTestRpcImpl2Class)); }); it("should allow access to request and invocation objects and allow a custom request id", async () => { @@ -232,7 +229,7 @@ describe("RpcInterface", () => { }, (reason) => assert(false, reason)); }); - it("should marshal errors over the wire", async () => { + it("should marshal errors over the wire #FIXME-direct", async () => { try { await TestRpcInterface.getClient().op10(); assert(false); @@ -258,7 +255,7 @@ describe("RpcInterface", () => { terminateLocalInterface(); }); - it("should allow resolving a 'not found' state for a request", async () => { + it("should allow resolving a 'not found' state for a request #FIXME-direct", async () => { const removeResolver = RpcRequest.notFoundHandlers.addListener((request, response, resubmit, reject) => { if (!(response instanceof TestNotFoundResponse)) return; @@ -288,7 +285,7 @@ describe("RpcInterface", () => { removeResolver(); }); - it("should describe available RPC endpoints from the frontend", async () => { + it("should describe available RPC endpoints from the frontend #FIXME-direct", async () => { const controlChannel = IModelReadRpcInterface.getClient().configuration.controlChannel; const controlInterface = (controlChannel as any)._channelInterface as RpcInterfaceDefinition; const originalName = controlInterface.name; @@ -310,14 +307,14 @@ describe("RpcInterface", () => { assert.isTrue(endpoints[0].compatible); controlPolicy.sentCallback = () => Object.defineProperty(controlInterface, "name", { value: simulateIncompatible() }); - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.SET_INCOMPATIBLE_INTERFACE_VERSION, value: undefined })); + assert(await executeBackendCallback(BackendTestCallbacks.setIncompatibleInterfaceVersion)); const endpointsMismatch = await RpcManager.describeAvailableEndpoints(); assert.isFalse(endpointsMismatch[0].compatible); controlPolicy.sentCallback = () => { }; Object.defineProperty(controlInterface, "name", { value: originalName }); - assert(TestbedConfig.sendToMainSync({ name: CONSTANTS.RESTORE_COMPATIBLE_INTERFACE_VERSION, value: undefined })); + assert(await executeBackendCallback(BackendTestCallbacks.restoreIncompatibleInterfaceVersion)); const endpointsRestored = await RpcManager.describeAvailableEndpoints(); assert.isTrue(endpointsRestored[0].compatible); @@ -346,7 +343,7 @@ describe("RpcInterface", () => { await TestRpcInterface.getClient().op13(data); }); - it("should reject a mismatched RPC interface request", async () => { + it("should reject a mismatched RPC interface request #FIXME-direct", async () => { const realVersion = TestRpcInterface.version; const realVersionZ = ZeroMajorRpcInterface.version; @@ -455,7 +452,7 @@ describe("RpcInterface", () => { await (test(decPatchZ.format(), true, clientZ)); }); - it("should validate all transport methods", async () => { + it("should validate transport method #FIXME-http2", async () => { function compareBytes(x: Uint8Array, y: Uint8Array) { if (x.byteLength !== y.byteLength) { return false; @@ -475,57 +472,33 @@ describe("RpcInterface", () => { const oneZero = new Uint8Array([1, 0, 1, 0]); const zeroOne = new Uint8Array([0, 1, 0, 1]); - async function exercise(client: RpcTransportTest) { - return new Promise(async (resolve, reject) => { - try { - assert.equal(await client.primitive(abc), RpcTransportTestImpl.mutateString(abc)); - assert(compareBytes(await client.binary(oneZero), RpcTransportTestImpl.mutateBits(oneZero))); - const mixed = await client.mixed(abc, zeroOne); - assert.equal(mixed[0], RpcTransportTestImpl.mutateString(abc)); - assert(compareBytes(mixed[1], RpcTransportTestImpl.mutateBits(zeroOne))); - const nested = await client.nested({ a: { x: oneZero, y: one }, b: abc, c: zeroOne }); - assert(compareBytes(nested.a.x, RpcTransportTestImpl.mutateBits(oneZero))); - assert.equal(nested.a.y, RpcTransportTestImpl.mutateNumber(one)); - assert.equal(nested.b, RpcTransportTestImpl.mutateString(abc)); - assert(compareBytes(nested.c, RpcTransportTestImpl.mutateBits(zeroOne))); - resolve(); - } catch (err) { - reject(err); - } - }); - } - - await exercise(RpcDirectTransportTest.getClient()); - await exercise(RpcWebTransportTest.getClient()); - await exercise(RpcElectronTransportTest.getClient()); - await exercise(RpcMobileTransportTest.getClient()); - - async function stress(client: RpcTransportTest) { - return new Promise((resolve, reject) => { - let c = 0; - for (let i = 0; i !== 100; ++i) { - client.nested({ a: { x: oneZero, y: one }, b: abc, c: zeroOne }).then((nested) => { - ++c; - - assert(compareBytes(nested.a.x, RpcTransportTestImpl.mutateBits(oneZero))); - assert.equal(nested.a.y, RpcTransportTestImpl.mutateNumber(one)); - assert.equal(nested.b, RpcTransportTestImpl.mutateString(abc)); - assert(compareBytes(nested.c, RpcTransportTestImpl.mutateBits(zeroOne))); - - if (c === 99) { - resolve(); - } - }).catch((reason) => { - reject(reason); - }); - } - }); + const client = RpcTransportTest.getClient(); + + // exercise + assert.equal(await client.primitive(abc), RpcTransportTestImpl.mutateString(abc)); + assert(compareBytes(await client.binary(oneZero), RpcTransportTestImpl.mutateBits(oneZero))); + const mixed = await client.mixed(abc, zeroOne); + assert.equal(mixed[0], RpcTransportTestImpl.mutateString(abc)); + assert(compareBytes(mixed[1], RpcTransportTestImpl.mutateBits(zeroOne))); + const nested = await client.nested({ a: { x: oneZero, y: one }, b: abc, c: zeroOne }); + assert(compareBytes(nested.a.x, RpcTransportTestImpl.mutateBits(oneZero))); + assert.equal(nested.a.y, RpcTransportTestImpl.mutateNumber(one)); + assert.equal(nested.b, RpcTransportTestImpl.mutateString(abc)); + assert(compareBytes(nested.c, RpcTransportTestImpl.mutateBits(zeroOne))); + + // stress + const singleStressTest = async () => { + const nested2 = await client.nested({ a: { x: oneZero, y: one }, b: abc, c: zeroOne }); + assert(compareBytes(nested2.a.x, RpcTransportTestImpl.mutateBits(oneZero))); + assert.equal(nested2.a.y, RpcTransportTestImpl.mutateNumber(one)); + assert.equal(nested2.b, RpcTransportTestImpl.mutateString(abc)); + assert(compareBytes(nested2.c, RpcTransportTestImpl.mutateBits(zeroOne))); + }; + const promises = new Array>(); + for (let i = 0; i !== 100; ++i) { + promises.push(singleStressTest()); } - - await stress(RpcDirectTransportTest.getClient()); - await stress(RpcWebTransportTest.getClient()); - await stress(RpcElectronTransportTest.getClient()); - await stress(RpcMobileTransportTest.getClient()); + await Promise.all(promises); }); it("should support cachable responses", async () => { @@ -538,7 +511,7 @@ describe("RpcInterface", () => { assert.equal(s, "placeholder"); }); - it("should send app version to backend", async () => { + it("should send app version to backend #FIXME-direct", async () => { RpcConfiguration.applicationVersionValue = "testbed1"; try { await TestRpcInterface.getClient().op15(); diff --git a/integration-tests/rpc/src/frontend/_Setup.test.ts b/integration-tests/rpc/src/frontend/_Setup.test.ts new file mode 100644 index 0000000..889d734 --- /dev/null +++ b/integration-tests/rpc/src/frontend/_Setup.test.ts @@ -0,0 +1,30 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { OpenMode } from "@bentley/bentleyjs-core"; +import { executeBackendCallback } from "@bentley/certa/lib/utils/CallbackUtils"; +import { BentleyCloudRpcManager, ElectronRpcManager, IModelToken, RpcOperation, RpcManager } from "@bentley/imodeljs-common"; +import { BackendTestCallbacks } from "../common/SideChannels"; +import { rpcInterfaces } from "../common/TestRpcInterface"; + +function initializeCloud(protocol: string) { + const config = BentleyCloudRpcManager.initializeClient({ info: { title: "rpc-integration-test", version: "v1.0" } }, rpcInterfaces); + config.protocol.pathPrefix = `${protocol}://${window.location.hostname}:${Number(window.location.port) + 2000}`; + + for (const definition of rpcInterfaces) { + RpcOperation.forEach(definition, (operation) => operation.policy.token = (_request) => new IModelToken("test", "test", "test", "test", OpenMode.Readonly)); + } +} + +before(async () => { + const currentEnvironment: string = await executeBackendCallback(BackendTestCallbacks.getEnvironment); + switch (currentEnvironment) { + case "http": return initializeCloud("http"); + case "http2": return initializeCloud("https"); + case "electron": return ElectronRpcManager.initializeClient({}, rpcInterfaces); + case "direct": return rpcInterfaces.forEach((interfaceDef) => RpcManager.initializeInterface(interfaceDef)); + } + + throw new Error(`Invalid test environment: "${currentEnvironment}"`); +}); diff --git a/integration-tests/rpc/tsconfig.json b/integration-tests/rpc/tsconfig.json new file mode 100644 index 0000000..0ca1e81 --- /dev/null +++ b/integration-tests/rpc/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "./node_modules/@bentley/build-tools/tsconfig-base.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/integration-tests/rpc/tslint.json b/integration-tests/rpc/tslint.json new file mode 100644 index 0000000..1b50696 --- /dev/null +++ b/integration-tests/rpc/tslint.json @@ -0,0 +1,7 @@ +{ + "extends": "@bentley/build-tools/tslint.json", + "rules": { + "no-conditional-assignment": true, + "callable-types": false + } +} \ No newline at end of file diff --git a/test-apps/testbed/webpack.config.js b/integration-tests/rpc/webpack.config.js similarity index 86% rename from test-apps/testbed/webpack.config.js rename to integration-tests/rpc/webpack.config.js index af5ce1c..c20c272 100644 --- a/test-apps/testbed/webpack.config.js +++ b/integration-tests/rpc/webpack.config.js @@ -9,10 +9,10 @@ const webpack = require("webpack"); const raw = require("@bentley/config-loader/lib/IModelJsConfig").IModelJsConfig.init(true /*suppress error*/, true); module.exports = { mode: "development", - entry: glob.sync(path.resolve(__dirname, "lib/frontend**/*.test.js")), + entry: glob.sync(path.resolve(__dirname, "lib/**/*.test.js")), output: { path: path.resolve(__dirname, "lib/dist"), - filename: "testbed.js", + filename: "bundled-tests.js", devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]" }, devtool: "nosources-source-map", @@ -33,6 +33,10 @@ module.exports = { { test: /azure-storage|AzureFileHandler|UrlFileHandler/, use: "null-loader" + }, + { + test: /imodeljs-backend/, + use: "null-loader" } ] }, @@ -51,7 +55,9 @@ module.exports = { .reduce((env, key) => { env[key] = JSON.stringify(raw[key]); return env; - }, {}), + }, { + IMODELJS_CORE_DIRNAME: JSON.stringify(path.join(__dirname, "../..")), + }), }) ] }; diff --git a/package.json b/package.json index 2d47fe1..ee04dde 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,7 @@ "test:clients-integration": "cd core/clients && npm run test-integration", "test:clients-backend-integration": "cd core/clients-backend && npm run test-integration", "test:backendwebpackformobile": "cd core/backend && npm run webpackformobile", - "test:frontend": "cd test-apps/testbed && npm test -s", - "test:frontend-integration": "cd test-apps/testbed && npm run test-integration", - "test:frontend:performance": "cd test-apps/testbed && npm run test:performance", + "test:frontend": "cd core/frontend && npm test -s", "test:ecschema-metadata": "cd core/ecschema-metadata && npm test -s", "test:example-code-snippets": "cd example-code/snippets && npm test -s", "test:example-code-app": "cd example-code/app && npm test -s", @@ -43,14 +41,12 @@ "test:ui-core": "cd ui/core && npm test -s", "test:ui-framework": "cd ui/framework && npm test -s", "test:ui-ninezone": "cd ui/ninezone && npm test -s", - "testbed": "cd test-apps/testbed && npm run test:debug", "cover:geometry": "cd core/geometry && npm run cover", "cover:backend": "cd core/backend && npm run cover", + "cover:backend-integration": "cd core/backend && npm run cover:integration", "cover:bentley": "cd core/bentley && npm run cover", - "cover:backend:integration": "cd core/backend && npm run cover:integration", "cover:clients": "cd core/clients && npm run cover", "cover:common": "cd core/common && npm run cover", - "cover:testbed": "cd test-apps/testbed && npm run cover", "cover:ecschema-metadata": "cd core/ecschema-metadata && npm run cover", "module:backend": "cd core/backend && node ../../node_modules/@bentley/build-tools/scripts/mastermodule --includes=../common --recursively=true", "module:frontend": "cd core/frontend && node ../../node_modules/@bentley/build-tools/scripts/mastermodule --includes=../common --recursively=true" diff --git a/plugins/markup/package.json b/plugins/markup/package.json index d3c74c6..79ce920 100644 --- a/plugins/markup/package.json +++ b/plugins/markup/package.json @@ -35,28 +35,19 @@ "name": "Bentley Systems, Inc.", "url": "http://www.bentley.com" }, - "//dependencies": [ - "NOTE: these dependencies are specific to imodeljs-common", - "NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API" - ], "dependencies": { - "@bentley/imodeljs-frontend": "0.189.0", - "svg.js": "~2.7.1" + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@svgdotjs/svg.js": "~3.0.12" }, - "//peerDependencies": [ - "NOTE: peerDependencies are a standard way for npm to perform a module compatibility check" - ], "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0" }, - "//devDependencies": [ - "NOTE: Must include modules mentioned in peerDependencies since those are not auto-installed", - "NOTE: Must include modules used by the scripts section of package.json" - ], "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/node": "10.12.18", "chai": "^4.1.2", "mocha": "^5.2.0", @@ -66,9 +57,6 @@ "typescript": "~3.2.2", "typedoc": "^0.11.1" }, - "//optionalDependencies": [ - "NOTE: Rush (as of 4.2.5) does not support optionalDependencies!" - ], "nyc": { "nycrc-path": "./node_modules/@bentley/build-tools/.nycrc", "all": true diff --git a/plugins/markup/public/Markup/rotate.png b/plugins/markup/public/Markup/rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..c73420feec32752cb2eb40213ed34dd616129829 GIT binary patch literal 694 zcmV;n0!jUeP)S})=@6XP1}#GnbT>SCip?>j}$afp=P8+rEMmIG%RY818=q! z?T>m+ZaAUbZXzO@A0&bqQAU|&;Rhm&EZk~(Z{WFkiGtGe!2e^|alX;JzGq{4t@ADB zhK6z%aVsNMe|K`VQ!KN@QNCoN`_FbO;jxO}y4=Qp`PA>Gbg@9hN;h3;`D$I$+WN+pwv*LHL`2-x zV=;ZYb`KM=+KxS=Coq^WVFodz>Ek^jA~xzcGMx3Uh_9L0GBBThuRf9b`56%r-_`|W z{1P88KJMOQ`T6wgDfV=$Q>`#&t~gs)ld<&8osKo-+?iylD0}YZWi|1}ZS5V$Qx}r| ze5nbp%MCnSQ`_G8%2Kig$sr>c%qu7=8#(>OLo>MUK4L@}LYR9HBFx<~*1hD1iN_!5 z4si$Rn9b=nN0H&MQ@x+L|H_HemkwS{_@0ZM>pfH=THOP%I< ze|n!RAI+%~F>#fQKz{02k%$;H?wUFR^t1e%iv{9?o;^&T^wBq$z@dHPShC&kd8Ubi_65KcOTtqGo01kMZ;(r#Qix zuCVp5WXJf)+$tJfUK=Q4F!wVk@6qR9SpLq3@pYfBsaw3Hw44yPRY;To5F|{52oWOW c5a2fc1+5ZhcKDT9O#lD@07*qoM6N<$g2Q7{tpET3 literal 0 HcmV?d00001 diff --git a/plugins/markup/public/locales/en/MarkupTools.json b/plugins/markup/public/locales/en/MarkupTools.json new file mode 100644 index 0000000..a25269d --- /dev/null +++ b/plugins/markup/public/locales/en/MarkupTools.json @@ -0,0 +1,102 @@ +{ + "tools": { + "Select": { + "keyin": "Markup Select", + "description": "Markup selection tool", + "flyover": "Markup Select", + "Prompts": { + "IdentifyMarkup": "Identify markup element." + } + }, + "Line": { + "keyin": "Markup Line", + "description": "Draw line", + "flyover": "Markup Line", + "Prompts": { + "FirstPoint": "Identify start of line.", + "NextPoint": "Identify end of line." + } + }, + "Rectangle": { + "keyin": "Markup Rectangle", + "description": "Draw rectangle", + "flyover": "Markup Rectangle", + "Prompts": { + "FirstPoint": "Identify corner.", + "NextPoint": "Identify opposite corner." + } + }, + "Polygon": { + "keyin": "Markup Polygon", + "description": "Draw polygon", + "flyover": "Markup Polygon", + "Prompts": { + "FirstPoint": "Identify center.", + "NextPoint": "Identify point on edge." + } + }, + "Circle": { + "keyin": "Markup Circle", + "description": "Draw circle", + "flyover": "Markup Circle", + "Prompts": { + "FirstPoint": "Identify center.", + "NextPoint": "Define radius." + } + }, + "Ellipse": { + "keyin": "Markup Ellipse", + "description": "Draw ellipse", + "flyover": "Markup Ellipse", + "Prompts": { + "FirstPoint": "Identify corner", + "NextPoint": "Identify opposite corner" + } + }, + "Arrow": { + "keyin": "Markup Arrow", + "description": "Draw arrow", + "flyover": "Markup Arrow", + "Prompts": { + "FirstPoint": "Identify start of arrow", + "NextPoint": "Identify end of arrow" + } + }, + "Cloud": { + "keyin": "Markup Cloud", + "description": "Draw cloud", + "flyover": "Markup Cloud", + "Prompts": { + "FirstPoint": "Identify corner.", + "NextPoint": "Identify opposite corner" + } + }, + "Sketch": { + "keyin": "Markup Sketch", + "description": "Draw freehand sketch", + "flyover": "Markup Sketch", + "Prompts": { + "FirstPoint": "Identify start of sketch", + "NextPoint": "Identify end of sketch" + } + }, + "Text": { + "Place": { + "keyin": "Place Markup Text", + "description": "Add text box", + "flyover": "Markup Text", + "Prompts": { + "FirstPoint": "Identify text location." + } + }, + "Edit": { + "keyin": "Edit Markup Text", + "description": "Edit text", + "flyover": "Edit Text", + "Prompts": { + "FirstPoint": "Identify text to edit" + } + } + } + } +} \ No newline at end of file diff --git a/plugins/markup/src/Markup.ts b/plugins/markup/src/Markup.ts index ee2b59c..e287a1c 100644 --- a/plugins/markup/src/Markup.ts +++ b/plugins/markup/src/Markup.ts @@ -3,108 +3,191 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { IModelApp, Plugin, PluginAdmin, ScreenViewport } from "@bentley/imodeljs-frontend"; -import * as SVG from "svg.js"; -import { MarkupTool } from "./MarkupTool"; -import { SelectTool } from "./SelectTool"; +import { I18NNamespace } from "@bentley/imodeljs-i18n"; +import { Svg, SVG, adopt, create } from "@svgdotjs/svg.js"; +import * as redlineTool from "./RedlineTool"; +import * as textTool from "./TextEdit"; +import { SelectionSet, SelectTool } from "./SelectTool"; +import { svgInit } from "./SvgJsExt"; import { UndoManager } from "./Undo"; -/** An SVG.Element with additional properties added for the Markup system. */ -export type MarkupElement = SVG.Element & { - _inSelection?: boolean; - _oldColor?: { fill: any; stroke: any; }; -}; - // temporary, for testing. -function getSvgFile(uri: string) { - const xhr = new XMLHttpRequest(); - xhr.open("GET", uri, false); - xhr.send(); - return xhr.responseText; -} +// function getSvgFile(uri: string) { +// const xhr = new XMLHttpRequest(); +// xhr.open("GET", uri, false); +// xhr.send(); +// return xhr.responseText; +// } -class MarkupApp extends Plugin { +export class MarkupApp extends Plugin { public markup?: Markup; + public markupNamespace: I18NNamespace; + public props = { + handles: { + size: 10, + stretch: { "fill-opacity": .85, "stroke": "black", "fill": "white" }, + rotateLine: { "stroke": "grey", "fill-opacity": .85 }, + rotate: { "cursor": "url(Markup/rotate.png) 12 12, auto", "fill-opacity": .85, "stroke": "black", "fill": "lightBlue" }, + moveOutline: { "cursor": "move", "stroke-dasharray": "6,6", "fill": "none", "stroke-opacity": .85, "stroke": "white" }, + move: { "cursor": "move", "opacity": 0, "stroke-width": 6, "stroke": "white" }, + vertex: { "cursor": "url(cursors/crosshair.cur), crosshair", "fill-opacity": .85, "stroke": "black", "fill": "white" }, + }, + hilite: { + color: "magenta", + flash: "cyan", + }, + dropShadow: { + enable: true, + attr: { + "stdDeviation": 2, + "dx": 0.8, + "dy": 1, + "flood-color": "#1B3838", + }, + }, + active: { + text: { + "font-family": "sans-serif", + "font-size": "30px", + "stroke": "red", + "fill": "red", + }, + element: { + "stroke": "red", + "stroke-opacity": 0.8, + "stroke-width": 3, + "fill-opacity": 0.2, + "fill": "blue", + }, + }, + text: { + startValue: "Note: ", + edit: { + box: { "fill": "lightGrey", "fill-opacity": .1, "stroke-opacity": .85, "stroke": "lightBlue" }, + }, + }, + }; + private _saveDefaultToolId = ""; + private _saveDefaultToolArgs?: any[]; + /** called when the plugin is executed by its host */ public async onExecute(_args: string[]) { if (this.markup) { + if (IModelApp.toolAdmin.defaultToolId === "Markup.Select" && (undefined === IModelApp.toolAdmin.activeTool || "Markup.Select" !== IModelApp.toolAdmin.activeTool.toolId)) { + IModelApp.toolAdmin.startDefaultTool(); + return; + } + IModelApp.toolAdmin.markupView = undefined; this.markup.destroy(); this.markup = undefined; + + IModelApp.toolAdmin.defaultToolId = this._saveDefaultToolId; + IModelApp.toolAdmin.defaultToolArgs = this._saveDefaultToolArgs; + this._saveDefaultToolId = ""; + this._saveDefaultToolArgs = undefined; + IModelApp.toolAdmin.startDefaultTool(); return; } + await this.markupNamespace.readFinished; // make sure our localized messages are ready. const view = IModelApp.toolAdmin.markupView = IModelApp.viewManager.selectedView; - if (view) - this.markup = new Markup(view, getSvgFile("DemoMarkup.svg")); - } -} + if (view) { + this.markup = new Markup(view); -/** - * The set of currently selected SVG elements. When elements are added to the set, they are hilited. - */ -export class SelectionSet { - public readonly elements = new Set(); - public get size() { return this.elements.size; } - public get isActive() { return this.size !== 0; } - public has(el: MarkupElement) { return this.elements.has(el); } - public emptyAll(): void { - this.elements.forEach((el) => Markup.unHilite(el)); - this.elements.clear(); - } - public add(el: MarkupElement) { - this.elements.add(el); - Markup.hilite(el); + this._saveDefaultToolId = IModelApp.toolAdmin.defaultToolId; + this._saveDefaultToolArgs = IModelApp.toolAdmin.defaultToolArgs; + IModelApp.toolAdmin.defaultToolId = "Markup.Select"; + IModelApp.toolAdmin.defaultToolArgs = undefined; + IModelApp.toolAdmin.startDefaultTool(); + } } - public drop(el: MarkupElement): boolean { - if (!this.elements.delete(el)) - return false; - Markup.unHilite(el); - return true; + + public constructor(name: string, versions: string) { + super(name, versions); + this.markupNamespace = IModelApp.i18n.registerNamespace("MarkupTools"); + IModelApp.tools.register(SelectTool, this.markupNamespace); + IModelApp.tools.registerModule(redlineTool, this.markupNamespace); + IModelApp.tools.registerModule(textTool, this.markupNamespace); } - public deleteAll(undo: UndoManager) { - undo.doGroup(() => this.elements.forEach((el) => { undo.onDelete(el); el.remove(); })); - this.emptyAll(); + + private _withDecorationsRemoved(fn: () => void) { + const markup = this.markup!; + markup.svgDecorations!.remove(); + markup.svgDynamics!.remove(); + IModelApp.toolAdmin.startDefaultTool(); + fn(); + markup.svgContainer!.add(markup.svgDecorations!); + markup.svgContainer!.add(markup.svgDynamics!); + } - public reposition(undo: UndoManager, fn: (el: MarkupElement) => void) { - undo.doGroup(() => this.elements.forEach((el) => { - const oldParent = el.parent() as MarkupElement; - const oldPos = el.position(); - fn(el); - undo.onRepositioned(el, oldPos, oldParent); - })); + public readMarkupSvg(): string | undefined { + let svgData: string | undefined; + const markup = this.markup; + if (markup && markup.svgContainer) + this._withDecorationsRemoved(() => svgData = markup.svgContainer!.svg()); + return svgData; } } +const dropShadowId = "markup-dropShadow"; /** * The current markup being created/edited. Holds the SVG elements, plus the active MarkupTool. - * When starting a Markup, a new Div is added as a child of the ScreenViewport's parentDiv. + * When starting a Markup, a new Div is added aa child of the ScreenViewport's parentDiv. */ export class Markup { - public static hiliteColor = "magenta"; - public static flashColor = "cyan"; public readonly markupDiv: HTMLDivElement; public readonly undo = new UndoManager(); - public readonly selected = new SelectionSet(); - public tool!: MarkupTool; - public readonly svgMarkup?: SVG.Nested; - public readonly svgDecorations?: SVG.Nested; + public readonly selected: SelectionSet; + public readonly svgContainer?: Svg; + public readonly svgMarkup?: Svg; + public readonly svgDynamics?: Svg; + public readonly svgDecorations?: Svg; + + private createDropShadow(svg: Svg) { + let filter = SVG("#" + dropShadowId); + if (filter) + filter.remove(); + filter = adopt(create("filter")).id(dropShadowId); + const effect = adopt(create("feDropShadow")); + effect.attr(markupApp.props.dropShadow.attr); + filter.add(effect); + svg.defs().add(filter); + return filter; + } + private removeSvgNamespace(svg: Svg) { svg.node.removeAttribute("xmlns:svgjs"); return svg; } + private addSvg(className: string) { + const svg = SVG().addTo(this.markupDiv).addClass(className); + this.removeSvgNamespace(svg); + const style = svg.node.style; + style.position = "absolute"; + style.top = style.left = "0"; + style.height = style.width = "100%"; + return svg; + } + private addNested(className: string): Svg { return this.removeSvgNamespace(this.svgContainer!.nested().addClass(className)); } + public constructor(public vp: ScreenViewport, svgData?: string) { + this.markupDiv = vp.addNewDiv("overlay-markup", true, 20); // this div goes on top of the canvas, but behind UI layers + this.svgContainer = this.addSvg("markup-container"); // SVG container to hold both Markup SVG and svg-based Markup decorators + this.svgMarkup = this.addNested("markup-svg"); + this.createDropShadow(this.svgContainer); + if (markupApp.props.dropShadow.enable) + this.svgMarkup.attr("filter", "url(#" + dropShadowId + ")"); + + if (svgData) { + this.svgMarkup.svg(svgData); // if supplied, add the SVG + this.svgMarkup.each(() => { }, true); // create an SVG.Element for each entry in the SVG file. + } + this.svgDynamics = this.addNested("markup-dynamics"); // only for tool dynamics of SVG graphics. + this.svgDecorations = this.addNested("markup-decorations"); // only for temporary decorations of SVG graphics. + this.selected = new SelectionSet(this.svgDecorations); + } /** Called when the Markup is destroyed */ public destroy() { this.markupDiv.parentNode!.removeChild(this.markupDiv); } public enablePick() { this.markupDiv.style.pointerEvents = "auto"; } public disablePick() { this.markupDiv.style.pointerEvents = "none"; } - - private static overrideColor(el: MarkupElement, color: string) { - if (undefined === el._oldColor) - el._oldColor = { fill: el.style("fill"), stroke: el.style("stroke") }; - const toColor = (val: string) => (val === "none") ? "none" : color; - el.style({ fill: toColor(el._oldColor.fill), stroke: toColor(el._oldColor.stroke) }); - } - public static resetColor(el: MarkupElement) { if (undefined !== el._oldColor) { el.style(el._oldColor); el._oldColor = undefined; } } - public static hilite(el: MarkupElement) { if (undefined === el._inSelection) { this.overrideColor(el, Markup.hiliteColor); el._inSelection = true; } } - public static unHilite(el: MarkupElement) { if (undefined !== el._inSelection) { this.resetColor(el); el._inSelection = undefined; } } - public static flash(el: MarkupElement) { if (undefined === el._inSelection) this.overrideColor(el, Markup.flashColor); } - public static unFlash(el: MarkupElement) { if (undefined === el._inSelection) this.resetColor(el); } + public setCursor(cursor: string) { this.markupDiv.style.cursor = cursor; } /** Delete all the entries in the selection set, then empty it. */ public deleteSelected() { this.selected.deleteAll(this.undo); } @@ -112,25 +195,14 @@ export class Markup { public bringToFront() { this.selected.reposition(this.undo, (el) => el.front()); } /** Send all the entries in the selection set to the back. */ public sendToBack() { this.selected.reposition(this.undo, (el) => el.back()); } - - public makePickable(el: MarkupElement) { - if (el instanceof SVG.Shape) { - el.attr("cursor", "move"); - el.on("mouseenter", (ev: MouseEvent) => this.tool.onMouseEnter(ev, el)); - el.on("mouseleave", (ev: MouseEvent) => this.tool.onMouseLeave(ev, el)); - } - } - - public constructor(vp: ScreenViewport, svgData: string) { - this.markupDiv = vp.addNewDiv("overlay-markup", true, 20); // this div goes on top of the canvas, but behind UI layers - const svgContainer = SVG(this.markupDiv).attr("id", "markup-container"); // SVG container to hold both Markup SVG and svg-based Markup decorators - this.svgMarkup = svgContainer.nested().svg(svgData).attr("id", "markup-svg").each((i, children) => this.makePickable(children[i]), true); // The actual SVG for the markup - this.svgDecorations = svgContainer.nested().attr("id", "markup-decorations"); // only for temporary decorations of SVG graphics. - - new SelectTool(this).run(); - } + /** Group all the entries in the selection set, then select the group. */ + public groupSelected() { if (undefined !== this.svgMarkup) this.selected.groupAll(this.undo); } + /** Ungroup all the group entries in the selection set. */ + public ungroupSelected() { if (undefined !== this.svgMarkup) this.selected.ungroupAll(this.undo); } } +svgInit(); // to ensure we load the SvgJsExt extensions + declare var IMODELJS_VERSIONS_REQUIRED: string; declare var PLUGIN_NAME: string; export const markupApp = new MarkupApp(PLUGIN_NAME, IMODELJS_VERSIONS_REQUIRED); diff --git a/plugins/markup/src/MarkupTool.ts b/plugins/markup/src/MarkupTool.ts index 6d848e4..d3fdc77 100644 --- a/plugins/markup/src/MarkupTool.ts +++ b/plugins/markup/src/MarkupTool.ts @@ -2,16 +2,63 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -import { MarkupElement, Markup } from "./Markup"; -import { PrimitiveTool } from "@bentley/imodeljs-frontend"; +import { XAndY } from "@bentley/geometry-core"; +import { CoordinateLockOverrides, IModelApp, PrimitiveTool, Viewport, BeTouchEvent, EventHandled, BeButton } from "@bentley/imodeljs-frontend"; +import { Element as MarkupElement, LinkedHTMLElement } from "@svgdotjs/svg.js"; +import { markupApp, Markup } from "./Markup"; export abstract class MarkupTool extends PrimitiveTool { - constructor(public markup: Markup) { super(); } - public onPostInstall(): void { this.markup.tool = this; } - public exitTool(): void { } + public markup!: Markup; + public static toolKey = "MarkupTools:tools."; public requireWriteableTarget(): boolean { return false; } - public onMouseEnter(_ev: MouseEvent, _el: MarkupElement) { } - public onMouseLeave(_ev: MouseEvent, _el: MarkupElement) { } - public async undoPreviousStep(): Promise { this.markup.undo.doUndo(); return true; } - public async redoPreviousStep(): Promise { this.markup.undo.doRedo(); return true; } + public isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp === IModelApp.toolAdmin.markupView); } + public onInstall(): boolean { if (undefined === markupApp.markup) return false; this.markup = markupApp.markup; return super.onInstall(); } + public onPostInstall() { super.onPostInstall(); this.setupAndPromptForNextAction(); } + public onUnsuspend(): void { this.showPrompt(); } + public onRestartTool(): void { this.exitTool(); } + + protected showPrompt(): void { } + protected setupAndPromptForNextAction(): void { + IModelApp.toolAdmin.toolState.coordLockOvr = CoordinateLockOverrides.All; // Don't adjust point to ACS or grid... + this.showPrompt(); + } + protected outputMarkupPrompt(msg: string) { IModelApp.notifications.outputPromptByKey(MarkupTool.toolKey + msg); } + + public async onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise { + if (startEv.isSingleTouch) + await IModelApp.toolAdmin.convertTouchMoveStartToButtonDownAndMotion(startEv, ev); + return EventHandled.Yes; // View tools are not allowed during redlining; use touch events to create markup and don't pass event to IdleTool... + } + + public async onTouchMove(ev: BeTouchEvent): Promise { return IModelApp.toolAdmin.convertTouchMoveToMotion(ev); } + public async onTouchComplete(ev: BeTouchEvent): Promise { return IModelApp.toolAdmin.convertTouchEndToButtonUp(ev); } + public async onTouchCancel(ev: BeTouchEvent): Promise { return IModelApp.toolAdmin.convertTouchEndToButtonUp(ev, BeButton.Reset); } + + public async undoPreviousStep(): Promise { + if (await this.onUndoPreviousStep()) + return true; + this.markup.undo.doUndo(); + return true; + } + + public async redoPreviousStep(): Promise { + if (await this.onRedoPreviousStep()) + return true; + this.markup.undo.doRedo(); + return true; + } + + /** Find the topmost MarkupElement at the specified point in the markup view. + * @param pt the point in view coordinates + * @returns The topmost element, or undefined if no elements under pt. + */ + public pickElement(pt: XAndY): MarkupElement | undefined { + const markup = this.markup; + const rect = markup.vp.getClientRect(); + const node = document.elementFromPoint(pt.x + rect.left, pt.y + rect.top) as LinkedHTMLElement | null; + if (!node || !node.instance) + return undefined; + const el = node.instance; + return el.getChildOrGroupOf(markup.svgMarkup!); + } } diff --git a/plugins/markup/src/RedlineTool.ts b/plugins/markup/src/RedlineTool.ts new file mode 100644 index 0000000..1cd8b9c --- /dev/null +++ b/plugins/markup/src/RedlineTool.ts @@ -0,0 +1,323 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { Point3d, Vector3d } from "@bentley/geometry-core"; +import { BeButtonEvent, EventHandled, IModelApp } from "@bentley/imodeljs-frontend"; +import { Element as MarkupElement, Marker, SVG, Svg } from "@svgdotjs/svg.js"; +import { MarkupTool } from "./MarkupTool"; +import { markupApp } from "./Markup"; + +export abstract class RedlineTool extends MarkupTool { + protected _minPoints = 1; + protected _nRequiredPoints = 2; + protected readonly _points: Point3d[] = []; + + protected onAdded(el: MarkupElement) { + const markup = this.markup; + const undo = markup.undo; + undo.doGroup(() => undo.onAdded(el)); + markup.selected.restart(el); + } + protected isComplete(_ev: BeButtonEvent) { return this._points.length >= this._nRequiredPoints; } + protected setupAndPromptForNextAction(): void { + super.setupAndPromptForNextAction(); + this.markup.disablePick(); + IModelApp.toolAdmin.setCursor(0 === this._points.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor); + } + + protected createMarkup(_svgMarkup: Svg, _ev: BeButtonEvent, _isDynamics: boolean): void { } + + protected clearDynamicsMarkup(_isDynamics: boolean): void { + this.markup.svgDynamics!.clear(); + } + + protected setCurrentStyle(element: MarkupElement, canBeFilled: boolean): void { + const active = markupApp.props.active; + element.css(active.element); + if (!canBeFilled) + element.css({ fill: "none" }); + } + + protected setCurrentTextStyle(element: MarkupElement): void { + const active = markupApp.props.active; + element.css(active.text); + } + + public onRestartTool(): void { this.exitTool(); } // Default to single shot and return control to select tool... + public onCleanup() { this.clearDynamicsMarkup(false); } + + public onReinitialize(): void { + this.clearDynamicsMarkup(false); // ### TODO Should this be automatically cleared when installing a new tool? + super.onReinitialize(); + } + + public async onUndoPreviousStep(): Promise { + return (0 === this._points.length) ? false : (this.onReinitialize(), true); + } + + public async onMouseMotion(ev: BeButtonEvent): Promise { + if (undefined === ev.viewport || this._points.length < this._minPoints) + return; + this.clearDynamicsMarkup(true); + this.createMarkup(this.markup.svgDynamics!, ev, true); + } + + public async onDataButtonDown(ev: BeButtonEvent): Promise { + if (undefined === ev.viewport) + return EventHandled.No; + + this._points.push(ev.viewPoint.clone()); + if (!this.isComplete(ev)) { + this.setupAndPromptForNextAction(); + return EventHandled.No; + } + + this.createMarkup(this.markup.svgMarkup!, ev, false); + this.onReinitialize(); + return EventHandled.No; + } + + public async onResetButtonUp(_ev: BeButtonEvent): Promise { + this.onReinitialize(); + return EventHandled.No; + } +} + +export class LineTool extends RedlineTool { + public static toolId = "Markup.Line"; + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Line.Prompts.FirstPoint" : "Line.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const start = this._points[0]; + const end = isDynamics ? ev.viewPoint : this._points[1]; + const element = svgMarkup.line(start.x, start.y, end.x, end.y); + this.setCurrentStyle(element, false); + element.attr("stroke-linecap", "round"); + if (!isDynamics) + this.onAdded(element); + } +} + +export class RectangleTool extends RedlineTool { + public static toolId = "Markup.Rectangle"; + + constructor(protected _roundCorners?: boolean) { super(); } + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Rectangle.Prompts.FirstPoint" : "Rectangle.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const start = this._points[0]; + const end = isDynamics ? ev.viewPoint : this._points[1]; + const vec = start.vectorTo(end); + const width = Math.abs(vec.x); + const height = Math.abs(vec.y); + if (width < 1 || height < 1) + return; + const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points... + const element = svgMarkup.rect(width, height).move(offset.x, offset.y); + this.setCurrentStyle(element, true); + if (this._roundCorners) + element.radius(10.0); + if (!isDynamics) + this.onAdded(element); + } +} + +export class PolygonTool extends RedlineTool { + public static toolId = "Markup.Polygon"; + + constructor(protected _numSides?: number) { super(); } // Specify number of polygon sides. Default if undefined is 5. + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Polygon.Prompts.FirstPoint" : "Polygon.Prompts.NextPoint"); } + + protected getPoints(points: number[], center: Point3d, edge: Point3d, numSides: number, inscribe: boolean): boolean { + if (numSides < 3 || numSides > 100) + return false; + let radius = center.distanceXY(edge); + if (radius < 1) + return false; + const delta = (Math.PI * 2.0) / numSides; + const vec = center.vectorTo(edge); + let angle = Vector3d.unitX().planarRadiansTo(vec, Vector3d.unitZ()); + if (!inscribe) { const theta = delta * 0.5; angle -= theta; radius /= Math.cos(theta); } + const rtmp = Point3d.create(); + const stmp = Point3d.create(); + for (let i = 0; i < numSides; i++ , angle += delta) { + rtmp.x = radius * Math.cos(angle); + rtmp.y = radius * Math.sin(angle); + rtmp.z = 0.0; + center.plus(rtmp, stmp); + points.push(stmp.x); + points.push(stmp.y); + } + return true; + } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const center = this._points[0]; + const edge = isDynamics ? ev.viewPoint : this._points[1]; + const pts: number[] = []; + if (!this.getPoints(pts, center, edge, undefined !== this._numSides ? this._numSides : 5, true)) + return; + const element = svgMarkup.polygon(pts); + this.setCurrentStyle(element, true); + if (!isDynamics) + this.onAdded(element); + } +} + +export class CloudTool extends RedlineTool { + public static toolId = "Markup.Cloud"; + protected _cloud?: MarkupElement; + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Cloud.Prompts.FirstPoint" : "Cloud.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const start = this._points[0]; + const end = isDynamics ? ev.viewPoint : this._points[1]; + const vec = start.vectorTo(end); + const width = Math.abs(vec.x); + const height = Math.abs(vec.y); + if (width < 10 || height < 10) + return; + if (undefined === this._cloud) { + this._cloud = svgMarkup.path("M3.0,2.5 C3.9,.78 5.6,-.4 8.1,1.0 C9.1,0 11.3,-.2 12.5,.5 C14.2,-.5 17,.16 17.9,2.5 C21,3 20.2,7.3 17.6,7.5 C16.5,9.2 14.4,9.8 12.7,8.9 C11.6,10 9.5,10.3 8.1,9.4 C5.7,10.8 3.3,9.4 2.6,7.5 C-.9,7.7 .6,1.7 3.0,2.5z"); + this._cloud.attr("stroke-linejoin", "round"); + } else if (!isDynamics) { + svgMarkup.add(this._cloud); + } + const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points... + this._cloud.move(offset.x, offset.y); + this._cloud.width(width); + this._cloud.height(height); + this.setCurrentStyle(this._cloud, true); + if (!isDynamics) + this.onAdded(this._cloud); + } + + protected clearDynamicsMarkup(isDynamics: boolean): void { + if (!isDynamics) + super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new cloud each frame, we just set the width/height... + } +} + +export class CircleTool extends RedlineTool { + public static toolId = "Markup.Circle"; + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Circle.Prompts.FirstPoint" : "Circle.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const start = this._points[0]; + const end = isDynamics ? ev.viewPoint : this._points[1]; + const radius = start.distanceXY(end); + if (radius < 1) + return; + const element = svgMarkup.circle(radius * 2.0).center(start.x, start.y); + this.setCurrentStyle(element, true); + if (!isDynamics) + this.onAdded(element); + } +} + +export class EllipseTool extends RedlineTool { + public static toolId = "Markup.Ellipse"; + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Ellipse.Prompts.FirstPoint" : "Ellipse.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const start = this._points[0]; + const end = isDynamics ? ev.viewPoint : this._points[1]; + const vec = start.vectorTo(end); + const width = Math.abs(vec.x); + const height = Math.abs(vec.y); + if (width < 1 || height < 1) + return; + const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points... + const element = svgMarkup.ellipse(width, height).move(offset.x, offset.y); + this.setCurrentStyle(element, true); + if (!isDynamics) + this.onAdded(element); + } +} + +export class ArrowTool extends RedlineTool { + public static toolId = "Markup.Arrow"; + + constructor(protected _arrowPos?: string) { super(); } // Specify "start", "end", or "both". Default if undefined is "start". + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Arrow.Prompts.FirstPoint" : "Arrow.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const arrowLength = 7; + const arrowWidth = 6; + const start = this._points[0]; + const end = isDynamics ? ev.viewPoint : this._points[1]; + const vec = start.vectorTo(end); + if (!vec.normalizeInPlace()) + return; + const element = svgMarkup.line(start.x, start.y, end.x, end.y); + this.setCurrentStyle(element, false); + element.attr("stroke-linecap", "round"); + const color = element.css("stroke"); // ###TODO - Flashing doesn't currently affect markers, need support for "context-stroke" and "context-fill". For now encode color in name... + const arrowMarkerId = "ArrowMarker" + arrowLength + "x" + arrowWidth + "-" + color; + let marker = SVG("#" + arrowMarkerId) as Marker; + if (null === marker) { + marker = this.markup.svgContainer!.marker(arrowLength, arrowWidth).id(arrowMarkerId); + marker.polygon([0, 0, arrowLength, arrowWidth * 0.5, 0, arrowWidth]); + marker.attr("orient", "auto-start-reverse"); + marker.attr("overflow", "visible"); // Don't clip the stroke that is being applied to allow the specified start/end to be used directly while hiding the arrow tail fully under the arrow head... + marker.attr("refX", arrowLength); + marker.css({ stroke: color, fill: color }); + } + if (undefined === this._arrowPos || "start" === this._arrowPos || "both" === this._arrowPos) + element.marker("start", marker); + if ("end" === this._arrowPos || "both" === this._arrowPos) + element.marker("end", marker); + if (!isDynamics) + this.onAdded(element); + } +} + +export class SketchTool extends RedlineTool { + public static toolId = "Markup.Sketch"; + protected _minDistSquared = 100; + + protected showPrompt(): void { this.outputMarkupPrompt(0 === this._points.length ? "Sketch.Prompts.FirstPoint" : "Sketch.Prompts.NextPoint"); } + + protected createMarkup(svgMarkup: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints)) + return; + const pts: number[] = []; + this._points.forEach((pt) => { pts.push(pt.x); pts.push(pt.y); }); + if (isDynamics && !ev.viewPoint.isAlmostEqualXY(this._points[this._points.length - 1])) { pts.push(ev.viewPoint.x); pts.push(ev.viewPoint.y); } + const isClosed = (this._points.length > 2 && (this._points[0].distanceSquaredXY(isDynamics ? ev.viewPoint : this._points[this._points.length - 1]) < this._minDistSquared * 2)); + const element = isClosed ? svgMarkup.polygon(pts) : svgMarkup.polyline(pts); + this.setCurrentStyle(element, isClosed); + element.attr("stroke-linecap", "round"); + element.attr("stroke-linejoin", "round"); + if (!isDynamics) + this.onAdded(element); + } + + public async onMouseMotion(ev: BeButtonEvent): Promise { + if (undefined !== ev.viewport && this._points.length > 0 && ev.viewPoint.distanceSquaredXY(this._points[this._points.length - 1]) > this._minDistSquared) + this._points.push(ev.viewPoint.clone()); + super.onMouseMotion(ev); // tslint:disable-line:no-floating-promises + } +} diff --git a/plugins/markup/src/SelectTool.ts b/plugins/markup/src/SelectTool.ts index 22f2e84..6ae48e2 100644 --- a/plugins/markup/src/SelectTool.ts +++ b/plugins/markup/src/SelectTool.ts @@ -2,31 +2,484 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -import { BeButtonEvent, EventHandled } from "@bentley/imodeljs-frontend"; -import { Markup, MarkupElement } from "./Markup"; +import { Point2d, Point3d, Transform, XAndY } from "@bentley/geometry-core"; +import { BeButtonEvent, BeModifierKeys, EventHandled, IModelApp, InputSource } from "@bentley/imodeljs-frontend"; +import { ArrayXY, Box, Circle, Element as MarkupElement, G, Line, Matrix, Point, Polygon, Svg, Text as MarkupText } from "@svgdotjs/svg.js"; +import { markupApp } from "./Markup"; import { MarkupTool } from "./MarkupTool"; +import { EditTextTool } from "./TextEdit"; +import { UndoManager } from "./Undo"; +/** A "modify handle" is a visible position on the screen that provides UI to modify a MarkupElement. */ +abstract class ModifyHandle { + public vpToStartTrn!: Transform; + + constructor(public handles: Handles) { } + /** perform the modification given a current mouse position. */ + public abstract modify(ev: BeButtonEvent): void; + public onClick(_ev: BeButtonEvent) { } + + /** set the position for this handle on the screen given the current state of the element */ + public abstract setPosition(): void; + /** the mouse just went down on this handle, begin modification. */ + public startDrag(_ev: BeButtonEvent, makeCopy = false): void { + this.vpToStartTrn = this.handles.vpToBoxTrn.clone(); // save the starting vp -> element box transform + this.startModify(makeCopy); + } + public startModify(makeCopy: boolean) { + const handles = this.handles; + const el = handles.el; + const cloned = handles.el = el.cloneMarkup(); // make a clone of this element + if (makeCopy) { + el.after(cloned); + } else { + cloned.originalEl = el; // save original for undo + el.replace(cloned); // put it into the DOM in place of the original + } + } + public setMouseHandler(target: MarkupElement) { + const node = target.node; + node.onmousedown = (ev: MouseEvent) => { + if (ev.button === 0 && undefined === this.handles.active) + this.handles.active = this; + }; + node.ontouchstart = (_ev: TouchEvent) => { + if (undefined === this.handles.active) + this.handles.active = this; + }; + } +} + +/** A ModifyHandle that changes the size of the element */ +class StretchHandle extends ModifyHandle { + private readonly _circle: Circle; + public posNpc: Point2d; + public startPos!: Point2d; + public opposite!: Point2d; + public startBox!: Box; + public startCtm!: Matrix; + constructor(handles: Handles, xy: ArrayXY, cursor: string) { + super(handles); + this.posNpc = new Point2d(xy[0], xy[1]); + const props = markupApp.props.handles; + this._circle = handles.group!.circle(props.size).addClass("markup-stretchHandle") // the visible "circle" for this handle + .attr(props.stretch).attr("cursor", cursor + "-resize"); + this.setMouseHandler(this._circle); + } + public setPosition() { + const pt = this.handles.npcToVp(this.posNpc); // convert to vp coords + this._circle.center(pt.x, pt.y); + } + + public startDrag(_ev: BeButtonEvent) { + const handles = this.handles; + this.startCtm = handles.el.ctm(); + this.startBox = handles.el.bbox(); // save starting size so we can preserve aspect ratio + this.startPos = handles.npcToBox(this.posNpc); + this.opposite = handles.npcToBox({ x: 1 - this.posNpc.x, y: 1 - this.posNpc.y }); + super.startDrag(_ev); + } + + public modify(ev: BeButtonEvent): void { + const diff = this.startPos.vectorTo(this.vpToStartTrn.multiplyPoint2d(ev.viewPoint)); // movement of cursor from start, in view coords + const diag = this.startPos.vectorTo(this.opposite).normalize()!; // vector from opposite corner to this handle + const diagVec = diag.scaleToLength(diff.dotProduct(diag)); // projected distance along diagonal + + // if the shift key is down, don't preserve aspect ratio + const adjusted = ev.isShiftKey ? { x: diff.x, y: diff.y } : { x: diagVec.x, y: diagVec.y }; + let { x, y, h, w } = this.startBox; + if (this.posNpc.x === 0) { + x += adjusted.x; + w -= adjusted.x; + } else if (this.posNpc.x === 1) { + w += adjusted.x; + } + if (this.posNpc.y === 0) { + y += adjusted.y; + h -= adjusted.y; + } else if (this.posNpc.y === 1) { + h += adjusted.y; + } + const mtx = this.startCtm.inverse().scaleO(this.startBox.w / w, this.startBox.h / h, this.opposite.x, this.opposite.y).inverseO(); + const minSize = 10; // don't let element get too small + if (w > minSize && h > minSize) + this.handles.el.markupStretch(w, h, x, y, mtx); + } +} + +/** A ModifyHandle to rotate an element */ +class RotateHandle extends ModifyHandle { + private readonly _line: Line; + private readonly _circle: Circle; + public location!: Point2d; + + constructor(public handles: Handles) { + super(handles); + const props = markupApp.props.handles; + + this._line = handles.group!.line(0, 0, 1, 1).attr(props.rotateLine).addClass("markup-rotateLine"); + this._circle = handles.group!.circle(props.size * 1.25).attr(props.rotate).addClass("markup-rotateHandle"); + this.setMouseHandler(this._circle); + } + public get centerVp() { return this.handles.npcToVp({ x: .5, y: .5 }); } + public get anchorVp() { return this.handles.npcToVp({ x: .5, y: 0 }); } + public setPosition(): void { + const anchor = this.anchorVp; + const dir = this.centerVp.vectorTo(anchor).normalize()!; + const loc = this.location = anchor.plusScaled(dir, markupApp.props.handles.size * 3); + this._line.plot(anchor.x, anchor.y, loc.x, loc.y); + this._circle.center(loc.x, loc.y); + } + public modify(ev: BeButtonEvent): void { + const centerVp = this.centerVp; + const currDir = centerVp.vectorTo(ev.viewPoint); + const dir = centerVp.vectorTo(this.location); + this.handles.el.rotate(dir.angleTo(currDir).degrees); + } +} + +/** A VertexHandle to move a point */ +class VertexHandle extends ModifyHandle { + private readonly _circle: Circle; + private readonly _x: string; + private readonly _y: string; + + constructor(public handles: Handles, index: number) { + super(handles); + const props = markupApp.props.handles; + this._circle = handles.group!.circle(props.size).attr(props.vertex).addClass("markup-vertexHandle"); + this._x = "x" + (index + 1); + this._y = "y" + (index + 1); + this.setMouseHandler(this._circle); + } + public setPosition(): void { + let point = new Point(this.handles.el.attr(this._x), this.handles.el.attr(this._y)); + const matrix = this.handles.el.ctm(); + point = point.transform(matrix); + this._circle.center(point.x, point.y); + } + public startDrag(ev: BeButtonEvent) { + super.startDrag(ev); + } + public modify(ev: BeButtonEvent): void { + let point = new Point(ev.viewPoint.x, ev.viewPoint.y); + const matrix = this.handles.el.ctm().inverse(); + point = point.transform(matrix); + this.handles.el.attr(this._x, point.x); + this.handles.el.attr(this._y, point.y); + } +} + +/** A handle that moves an element. */ +class MoveHandle extends ModifyHandle { + private readonly _shape: MarkupElement; + private readonly _outline?: Polygon; + private _lastPos?: Point3d; + constructor(public handles: Handles, showBBox: boolean) { + super(handles); + const props = markupApp.props.handles; + const clone = this.handles.el.cloneMarkup(); + clone.css(props.move); + clone.forElementsOfGroup((child) => child.css(props.move)); + + if (showBBox) { + this._outline = handles.group.polygon().attr(props.moveOutline); + const rect = clone.getOutline().attr(props.move).attr({ fill: "none" }); + + const group = handles.group.group(); + group.add(this._outline); + group.add(rect); + group.add(clone); + this._shape = group; + } else { + clone.addTo(handles.group); + this._shape = clone; + } + + this._shape.addClass("markup-moveHandle"); + this.setMouseHandler(this._shape); + } + public onClick(_ev: BeButtonEvent) { + const el = this.handles.el; + if (el instanceof MarkupText) + new EditTextTool(el).run(); + } + public setPosition() { + if (undefined !== this._outline) { + const pts = [new Point2d(0, 0), new Point2d(0, 1), new Point2d(1, 1), new Point2d(1, 0)]; + this._outline.plot(this.handles.npcToVpArray(pts).map((pt) => [pt.x, pt.y] as ArrayXY)); // draws the outline of the element's bbox + } + } + public startDrag(ev: BeButtonEvent) { + super.startDrag(ev, ev.isShiftKey); + this._lastPos = ev.viewPoint; + } + public modify(ev: BeButtonEvent): void { + const handles = this.handles; + const dist = ev.viewPoint.minus(this._lastPos!); + this._lastPos = ev.viewPoint; + handles.el.translate(dist.x, dist.y); + } +} + +/** The set of ModifyHandles active. Only applies if there is a single element selected. */ +class Handles { + public readonly handles: ModifyHandle[] = []; + public active?: ModifyHandle; + public dragging = false; + public group: G; + public npcToVpTrn!: Transform; + public vpToBoxTrn!: Transform; + + constructor(public ss: SelectionSet, public el: MarkupElement) { + this.group = ss.svg.group(); + + if (el instanceof Line) { + this.handles.push(new MoveHandle(this, false)); + this.handles.push(new VertexHandle(this, 0)); + this.handles.push(new VertexHandle(this, 1)); + this.draw(); // show starting state + return; + } + + // move box is in the back + this.handles.push(new MoveHandle(this, true)); + // then rotate handle + this.handles.push(new RotateHandle(this)); + + // then add all the stretch handles + const pts = [[0, 0], [0, .5], [0, 1], [.5, 1], [1, 1], [1, .5], [1, 0], [.5, 0]]; + const cursors = ["nw", "w", "sw", "s", "se", "e", "ne", "n"]; + const angle = el.ctm().decompose().rotate || 0; + const start = Math.round(-angle / 45); // so that we rotate the cursors for rotated elements + pts.forEach((h, i) => this.handles.push(new StretchHandle(this, h as ArrayXY, cursors[(i + start + 8) % 8]))); + this.draw(); // show starting state + } + + public npcToBox(p: XAndY) { const pt = this.npcToVp(p); return this.vpToBox(pt, pt); } + public npcToVp(p: XAndY, result?: Point2d): Point2d { return this.npcToVpTrn.multiplyPoint2d(p, result); } + public vpToBox(p: XAndY, result?: Point2d): Point2d { return this.vpToBoxTrn.multiplyPoint2d(p, result); } + public npcToVpArray(pts: Point2d[]): Point2d[] { pts.forEach((pt) => this.npcToVp(pt, pt)); return pts; } + + public draw() { + const el = this.el; + const bb = el.bbox(); + const ctm = el.ctm(); + this.vpToBoxTrn = ctm.inverse().toIModelTransform(); + this.npcToVpTrn = new Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(ctm).toIModelTransform(); + this.handles.forEach((h) => h.setPosition()); + } + + public remove() { + if (this.dragging) + this.cancelDrag(); + this.group.remove(); + } + + public startDrag(ev: BeButtonEvent) { + if (this.active) { + this.active.startDrag(ev); + this.dragging = true; + markupApp.markup!.disablePick(); + IModelApp.toolAdmin.setCursor(IModelApp.viewManager.dynamicsCursor); + } + } + public drag(ev: BeButtonEvent) { + if (this.dragging) { + this.active!.modify(ev); + this.draw(); + } + } + /** complete the modification for the active handle. */ + public endDrag(undo: UndoManager) { + undo.doGroup(() => { + const el = this.el; + const original = el.originalEl!; // save original element + if (original === undefined) { + this.ss.emptyAll(); + this.ss.add(el); + undo.onAdded(el); + } else { + el.originalEl = undefined; // clear original element + undo.onModified(el, original); + } + }); + this.draw(); + this.dragging = false; + this.active = undefined; + markupApp.markup!.enablePick(); + } + + /** called when the reset button is pressed. */ + public cancelDrag() { + if (!this.dragging) + return; + const el = this.el; + const original = el.originalEl!; + if (original) { + el.replace(original); + this.el = original; + } + this.draw(); + this.active = undefined; + markupApp.markup!.enablePick(); + } +} + +/** The set of currently selected SVG elements. When elements are added to the set, they are hilited. */ +export class SelectionSet { + public readonly elements = new Set(); + public handles?: Handles; + + public get size() { return this.elements.size; } + public get isEmpty() { return this.size === 0; } + public has(el: MarkupElement) { return this.elements.has(el); } + public emptyAll(): void { + this.clearEditors(); + this.elements.forEach((el) => el.unHilite()); + this.elements.clear(); + } + public restart(el?: MarkupElement) { + this.emptyAll(); + if (el) this.add(el); + } + public constructor(public svg: Svg) { } + public clearEditors() { + if (this.handles) { + this.handles.remove(); + this.handles = undefined; + } + } + public sizeChanged() { + this.clearEditors(); + if (this.elements.size === 1) + this.handles = new Handles(this, this.elements.values().next().value); + } + /** Add a new element to the SS */ + public add(el: MarkupElement) { + this.elements.add(el); + el.hilite(); + this.sizeChanged(); + } + /** Remove an element from the selection set and unhilite it. + * @returns true if the element was in the SS and was removed. + */ + public drop(el: MarkupElement): boolean { el.unHilite(); return this.elements.delete(el) ? (this.sizeChanged(), true) : false; } + /** Replace an entry in the selection set with a different element. */ + public replace(oldEl: MarkupElement, newEl: MarkupElement) { if (this.drop(oldEl)) this.add(newEl); } + + public deleteAll(undo: UndoManager) { + undo.doGroup(() => this.elements.forEach((el) => { undo.onDelete(el); el.remove(); })); + this.emptyAll(); + } + + public groupAll(undo: UndoManager) { + if (this.size < 2) + return; + const first = this.elements.values().next().value; + const parent = first.parent("svg") as Svg; + const group = parent.group(); + undo.doGroup(() => { + this.elements.forEach((el) => { + const oldParent = el.parent() as MarkupElement; + const oldPos = el.position(); + el.unHilite(); undo.onRepositioned(el.addTo(group), oldPos, oldParent); + }), undo.onAdded(group); + }); + this.restart(group); + } + + public ungroupAll(undo: UndoManager) { + const groups = new Set(); + this.elements.forEach((el) => { if (el instanceof G) groups.add(el); }); + if (0 === groups.size) + return; + undo.doGroup(() => { + groups.forEach((g) => { + g.unHilite(); this.elements.delete(g); undo.onDelete(g); + g.each((index, children) => { const child = children[index]; const oldPos = child.position(); child.toParent(g.parent()); undo.onRepositioned(child, oldPos, g); }, false); + g.untransform(); // Don't want undo of ungroup to push the current group transform... + g.remove(); + }); + }); + this.sizeChanged(); + } + + /** Move all of the entries to a new position in the DOM via a callback. */ + public reposition(undo: UndoManager, fn: (el: MarkupElement) => void) { + undo.doGroup(() => this.elements.forEach((el) => { + const oldParent = el.parent() as MarkupElement; + const oldPos = el.position(); + fn(el); + undo.onRepositioned(el, oldPos, oldParent); + })); + this.sizeChanged(); + } +} + +/** Provides UI for selection, delete, move, copy, bring-to-front, send-to-back, etc. for Markup SVG elements */ export class SelectTool extends MarkupTool { public static toolId = "Markup.Select"; private _flashedElement?: MarkupElement; + private readonly _dragging: MarkupElement[] = []; + private readonly _anchor = new Point3d(); + public get flashedElement(): MarkupElement | undefined { return this._flashedElement; } public set flashedElement(el: MarkupElement | undefined) { - if (undefined !== this._flashedElement) Markup.unFlash(this._flashedElement); - if (undefined !== el) Markup.flash(el); + if (el === this._flashedElement) return; + if (undefined !== this._flashedElement) this._flashedElement.unFlash(); + if (undefined !== el) el.flash(); this._flashedElement = el; } + private initSelect() { + this.markup.setCursor("default"); + this.markup.enablePick(); + this.flashedElement = undefined; + } + private clearSelect() { + this.cancelDrag(); + this.markup.selected.emptyAll(); + } + public onCleanup(): void { this.clearSelect(); } + + protected showPrompt(): void { this.outputMarkupPrompt("Select.Prompts.IdentifyMarkup"); } + public onPostInstall() { this.initSelect(); super.onPostInstall(); } + public onRestartTool(): void { this.initSelect(); } + + private cancelDrag() { + this._dragging.forEach((el) => el.remove()); // remove temporary elements from DOM + this._dragging.length = 0; + + } + public async onResetButtonUp(_ev: BeButtonEvent): Promise { + const selected = this.markup.selected; + const handles = selected.handles; + if (handles && handles.dragging) + handles.cancelDrag(); - constructor(markup: Markup) { - super(markup); - markup.enablePick(); + this.cancelDrag(); + selected.sizeChanged(); + return EventHandled.Yes; } - public onMouseEnter(_ev: MouseEvent, el: MarkupElement) { this.flashedElement = el; } - public onMouseLeave(_ev: MouseEvent, _el: MarkupElement) { this.flashedElement = undefined; } - public onRestartTool(): void { this.markup.selected.emptyAll(); } + /** Called when there is a mouse "click" (down+up without any motion) */ public async onDataButtonUp(ev: BeButtonEvent): Promise { - const el = this.flashedElement; - const selected = this.markup.selected; + const markup = this.markup; + const selected = markup.selected; + const handles = selected.handles; + if (handles) { + if (handles.dragging) { + handles.endDrag(markup.undo); + return EventHandled.Yes; + } + if (handles.active) { // clicked on a handle + handles.active.onClick(ev); + handles.active = undefined; + return EventHandled.Yes; + } + } + + const el = this.flashedElement = this.pickElement(ev.viewPoint); if (ev.isControlKey) { if (el && selected.drop(el)) return EventHandled.Yes; @@ -39,20 +492,177 @@ export class SelectTool extends MarkupTool { return EventHandled.Yes; } + /** called when the mouse moves while the data button is down. */ + public async onMouseStartDrag(ev: BeButtonEvent): Promise { + // console.log("start drag"); + const markup = this.markup; + const selected = markup.selected; + const handles = selected.handles; + if (handles && handles.active) { + this.flashedElement = undefined; + handles.startDrag(ev); + return EventHandled.Yes; + } + + const flashed = this.flashedElement = this.pickElement(ev.viewPoint); + if (undefined === flashed) { + selected.emptyAll(); + // TODO: drag select? + return EventHandled.Yes; + } + + if (!selected.has(flashed)) + selected.restart(flashed); // we clicked on an element not in the selection set, replace current selection with just this element + + selected.clearEditors(); + this._anchor.setFrom(ev.viewPoint); // save the starting point. This is the point where the "down" occurred. + this.cancelDrag(); + + selected.elements.forEach((el) => { // add all selected elements to the "dragging" set + const cloned = el.cloneMarkup(); // make a clone of this element + el.after(cloned); // put it into the DOM after its original + cloned.originalEl = el; // save original element so we can remove it if this is a "move" command + this._dragging.push(cloned); // add to dragging set + }); + return EventHandled.Yes; + } + + /** Called whenever the mouse moves while this tool is active. */ + public async onMouseMotion(ev: BeButtonEvent): Promise { + // console.log("motion"); + const markup = this.markup; + const handles = markup.selected.handles; + if (handles && handles.dragging) { + this.receivedDownEvent = true; + handles.drag(ev); + return; + } + + if (this._dragging.length === 0) { + if (InputSource.Touch === ev.inputSource) + return; + this.flashedElement = this.pickElement(ev.viewPoint); // if we're not dragging, try to find an element under the cursor + return; + } + + // we have a set of elements being dragged + const delta = ev.viewPoint.minus(this._anchor); + this._anchor.setFrom(ev.viewPoint); // translate moves from last mouse location + this._dragging.forEach((el) => { + el.translate(delta.x, delta.y); + }); + } + + /** Called when the mouse goes up after dragging. */ + public async onMouseEndDrag(ev: BeButtonEvent): Promise { + // console.log("end drag"); + const markup = this.markup; + const selected = markup.selected; + const handles = selected.handles; + if (handles && handles.dragging) { + handles.endDrag(markup.undo); + return EventHandled.Yes; + } + + if (this._dragging.length === 0) // we had nothing selected + return EventHandled.Yes; + + const delta = ev.viewPoint.minus(this._anchor); + const undo = markup.undo; + if (ev.isShiftKey) + selected.emptyAll(); + + // move or copy all of the elements in dragged set + undo.doGroup(() => this._dragging.forEach((el) => { + el.translate(delta.x, delta.y); // move to final location + const original = el.originalEl!; // save original element + el.originalEl = undefined; // clear original element + if (ev.isShiftKey) { + selected.add(el); + undo.onAdded(el); // shift key means copy element + } else { + original.replace(el); + undo.onModified(el, original); + } + })); + + this._dragging.length = 0; + selected.sizeChanged(); + return EventHandled.Yes; + } + + public async onModifierKeyTransition(_wentDown: boolean, modifier: BeModifierKeys, _event: KeyboardEvent): Promise { + if (modifier !== BeModifierKeys.Shift) + return EventHandled.No; + const selected = this.markup.selected; + const handles = selected.handles; + if (undefined === handles || !handles.dragging) + return EventHandled.No; + const ev = new BeButtonEvent(); + IModelApp.toolAdmin.fillEventFromCursorLocation(ev); + if (undefined === ev.viewport) + return EventHandled.No; + handles.drag(ev); + return EventHandled.Yes; + } + + /** called whenever a key is pressed while this tool is active. */ public async onKeyTransition(wentDown: boolean, key: KeyboardEvent): Promise { if (!wentDown) return EventHandled.No; - switch (key.key) { - case "Delete": - case "Backspace": - this.markup.deleteSelected(); + const tools = IModelApp.tools; + const markup = this.markup; + switch (key.key.toLowerCase()) { + case "delete": + case "backspace": + markup.deleteSelected(); + return EventHandled.Yes; + case "escape": + this.exitTool(); return EventHandled.Yes; case "f": - this.markup.bringToFront(); + markup.bringToFront(); return EventHandled.Yes; case "b": - this.markup.sendToBack(); + markup.sendToBack(); + return EventHandled.Yes; + case "a": + tools.run("Markup.Arrow"); // ###TODO - Testing, Need stage w/tool icons... + return EventHandled.Yes; + case "c": + tools.run("Markup.Circle"); + return EventHandled.Yes; + case "g": + if (!key.ctrlKey) + return EventHandled.No; + markup.groupSelected(); + return EventHandled.Yes; + case "u": + if (!key.ctrlKey) + return EventHandled.No; + markup.ungroupSelected(); + return EventHandled.Yes; + case "d": + tools.run("Markup.Cloud"); + return EventHandled.Yes; + case "e": + tools.run("Markup.Ellipse"); + return EventHandled.Yes; + case "l": + tools.run("Markup.Line"); + return EventHandled.Yes; + case "p": + tools.run("Markup.Polygon"); + return EventHandled.Yes; + case "r": + tools.run("Markup.Rectangle"); + return EventHandled.Yes; + case "s": + tools.run("Markup.Sketch"); + return EventHandled.Yes; + case "t": + tools.run("Markup.Text.Place"); return EventHandled.Yes; } return EventHandled.No; diff --git a/plugins/markup/src/SvgJsExt.ts b/plugins/markup/src/SvgJsExt.ts new file mode 100644 index 0000000..ba55a40 --- /dev/null +++ b/plugins/markup/src/SvgJsExt.ts @@ -0,0 +1,224 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { Transform } from "@bentley/geometry-core"; +import { Box, Element as MarkupElement, extend, G, Matrix, nodeOrNew, Rect, register, Svg, Text } from "@svgdotjs/svg.js"; +import { markupApp } from "./Markup"; + +export interface MarkupColor { + fill: any; + stroke: any; +} + +/** add methods and classes to svg.js library for Markup. */ +declare module "@svgdotjs/svg.js" { + function register(subclass: typeof MarkupElement, name?: string): void; + function nodeOrNew(name: string, node: any): any; + + interface Element { + inSelection?: boolean; + originalEl?: Element; + + /** make a copy of this Element, set its `isMarkup` flag, and reset its color if it was hilited. */ + cloneMarkup(): this; + /** if this element is currently hilited or flashed, reset to its original color */ + resetColor(): void; + /** override the color of this element to a new color, saving original */ + overrideColor(color: string): void; + /** turn on `inSelection` and set its color to hilite */ + hilite(): void; + /** turn off hilite, turn off `inSelection` flag */ + unHilite(): void; + /** set this element to the flash color */ + flash(): void; + /** turn off flash color */ + unFlash(): void; + /** reposition and resize this element */ + markupStretch(x: number, y: number, w: number, h: number, mtx: Matrix): void; + /** return true if this element is a child of the supplied Svg. */ + isChildOf(svg: Svg): boolean; + /** return selectable element or the outermost group containing this element if it's a child of the supplied Svg. */ + getChildOrGroupOf(svg: Svg): MarkupElement | undefined; + + forElementsOfGroup(fn: (child: MarkupElement) => void): void; + getNpcToVp(): Matrix; + getOutline(): Rect; + } + interface Text { + getMarkup(): string; + createMarkup(val: string, spacing: number): void; + } + + interface Matrix { + /** convert this SVG.Matrix into an iModel Transform */ + toIModelTransform(): Transform; + fromIModelTransform(t: Transform): this; + } + + interface Container { + foreignObject(width: number, height: number): ForeignObject; + } + + class ForeignObject extends Container { + } +} + +const OLDCOLOR = "Color"; + +/** this is the SVG.js way of adding methods to classes */ +extend(MarkupElement, { + forElementsOfGroup(fn: (child: MarkupElement) => void): void { + const me = this as MarkupElement; + if (me instanceof G) + me.each((i, children) => { const child = children[i]; if (child instanceof MarkupElement) fn(child); }, false); + }, + cloneMarkup(): MarkupElement { + const me = this as MarkupElement; + const cloned = me.clone(); + cloned.node.removeAttribute("id"); + cloned.resetColor(); + return cloned; + }, + overrideColor(color: string) { + const me = this as MarkupElement; + let oldColor = me.data(OLDCOLOR) as MarkupColor | undefined; + if (undefined === oldColor) { + const css = window.getComputedStyle(me.node); + const colorOrNone = (c: string | null) => (c && c !== "none") ? c : "none"; + oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) }; + me.data(OLDCOLOR, oldColor); + } + const toColor = (val: string | null) => (!val || val === "none") ? "none" : color; + me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) }); + me.forElementsOfGroup((child) => child.overrideColor(color)); + }, + resetColor() { + const me = this as MarkupElement; + const oldColor = me.data(OLDCOLOR) as MarkupColor; + if (undefined !== oldColor) + me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object + me.forElementsOfGroup((child) => child.resetColor()); + }, + hilite() { const me = this as MarkupElement; if (!me.inSelection) { me.overrideColor(markupApp.props.hilite.color); me.inSelection = true; } }, + unHilite() { const me = this as MarkupElement; if (me.inSelection) { me.resetColor(); me.inSelection = undefined; } }, + flash() { const me = this as MarkupElement; if (!me.inSelection) me.overrideColor(markupApp.props.hilite.flash); }, + unFlash() { const me = this as MarkupElement; if (!me.inSelection) me.resetColor(); }, + markupStretch(w: number, h: number, x: number, y: number, _mtx: Matrix) { const me = this as MarkupElement; me.size(w, h).move(x, y); }, + isChildOf(svg: Svg) { + const parent = (this as MarkupElement).parent(); + return (parent === svg) ? true : (parent instanceof MarkupElement) ? parent.isChildOf(svg) : false; + }, + getChildOrGroupOf(svg: Svg): MarkupElement | undefined { + const me = this as MarkupElement; + const parents = me.parents(svg.parent()); + if (0 === parents.length || parents[parents.length - 1].node !== svg.node) + return undefined; + if (parents.length > 1) { + for (let index = parents.length - 2; index >= 0; --index) + if (parents[index] instanceof G || parents[index] instanceof Text) + return parents[index]; + } + return me; + }, + getNpcToVp(): Matrix { + const me = this as MarkupElement; + const bb = me.bbox(); + return new Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.ctm()); + }, + getOutline(): Rect { + const me = this as MarkupElement; + const box = me.bbox(); + return new Rect().move(box.x, box.y).size(box.w, box.h).transform(new Matrix(me)); + }, +}); + +extend(G, { + markupStretch(_w: number, _h: number, _x: number, _y: number, mtx: Matrix) { (this as G).attr("transform", mtx); }, +}); +extend(Text, { + markupStretch(_w: number, _h: number, _x: number, _y: number, mtx: Matrix) { (this as Text).attr("transform", mtx); }, + getMarkup() { + const node = (this as Text).node; + let text = ""; + node.childNodes.forEach((child) => { + if (child.nodeName === "tspan" || child.nodeName === "#text") { + if (text.length !== 0) text += "\n"; + text += child.textContent; + } + }); + return text; + }, + createMarkup(val: string, spacing: number) { + spacing = spacing ? spacing : 1; + const me = this as Text; + me.clear(); + if (val === "") + return; + const lines = val.split("\n"); + me.plain(lines[0]); + const x = me.attr("x"); + me.build(true); + for (let i = 1; i < lines.length; ++i) { + const tspan = me.tspan(lines[i]); + tspan.dy(spacing); + tspan.x(x); + } + me.build(false); + me.dom = {}; + }, + // override for Text so that empty text will return a size + getOutline(): Rect { + const me = this as Text; + const node = me.node; + const content = node.textContent; + if (content !== null && content.length > 0) + return MarkupElement.prototype.getOutline.call(me); + node.textContent = "M"; + const outline = MarkupElement.prototype.getOutline.call(me); + node.textContent = content; + return outline; + }, + writeDataToDom() { + const me = this as Text; + const dom = me.dom; // strip off useless "leading" data + me.dom = {}; + MarkupElement.prototype.writeDataToDom.call(me); + me.dom = dom; + return me; + }, +}); + +extend(Matrix, { + toIModelTransform() { + const m = this as Matrix; + return Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0); + }, + fromIModelTransform(t: Transform) { + const m = this as Matrix; + const o = t.origin; + const mtx = t.matrix; + m.a = mtx.coffs[0]; + m.b = mtx.coffs[3]; + m.c = mtx.coffs[1]; + m.d = mtx.coffs[4]; + m.e = o.x; + m.f = o.y; + return this; + }, +}); + +/** Dummy class so a inside a <g> will work. */ +export class Title extends MarkupElement { + constructor(node: any) { super(nodeOrNew("title", node)); } + public scale() { return this; } + public size() { return this; } + public move() { return this; } + public dmove() { return this; } + public bbox() { return new Box(); } + public screenCTM() { return new Matrix(); } + +} +register(Title, "Title"); + +export function svgInit() { } diff --git a/plugins/markup/src/TextEdit.ts b/plugins/markup/src/TextEdit.ts new file mode 100644 index 0000000..1378e39 --- /dev/null +++ b/plugins/markup/src/TextEdit.ts @@ -0,0 +1,161 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { BeButtonEvent, EventHandled, InputSource } from "@bentley/imodeljs-frontend"; +import { Svg, Text as MarkupText } from "@svgdotjs/svg.js"; +import { MarkupTool } from "./MarkupTool"; +import { RedlineTool } from "./RedlineTool"; +import { markupApp } from "./Markup"; + +/** Tool to place new text notes on a Markup. */ +export class PlaceTextTool extends RedlineTool { + public static toolId = "Markup.Text.Place"; + protected _nRequiredPoints = 1; + protected _minPoints = 0; + protected _value!: string; + + public onPostInstall(): void { + this._value = markupApp.props.text.startValue; + super.onPostInstall(); + } + + protected showPrompt(): void { this.outputMarkupPrompt("Text.Place.Prompts.FirstPoint"); } + + protected createMarkup(svg: Svg, ev: BeButtonEvent, isDynamics: boolean): void { + if (isDynamics && InputSource.Touch === ev.inputSource) + return; + const start = ev.viewPoint; + const text = new MarkupText().plain(this._value); + svg.put(text); + this.setCurrentTextStyle(text); + text.translate(start.x, start.y); + if (isDynamics) { + svg.add(text.getOutline().attr(markupApp.props.text.edit.box).addClass("markup-editBox")); + } else { + new EditTextTool(text, true).run(); + } + } + public onRestartTool(): void { } + public async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> { this.exitTool(); return EventHandled.Yes; } +} + +const lastSize = { width: "180px", height: "60px" }; +export class EditTextTool extends MarkupTool { + public static toolId = "Markup.Text.Edit"; + public editor?: HTMLTextAreaElement; + public editDiv?: HTMLDivElement; + constructor(public text?: MarkupText, private _fromPlaceTool = false) { super(); } + + public startEditor() { + const text = this.text; + if (text === undefined) + return; + + const markupDiv = this.markup.markupDiv!; + const editDiv = this.editDiv = document.createElement("div"); + let style = editDiv.style; + style.backgroundColor = "blanchedalmond"; + style.top = style.left = "0"; + style.right = style.bottom = "100%"; + + markupDiv.appendChild(editDiv); + + const divRect = markupDiv.getBoundingClientRect(); + + const outline = text.getOutline(); // use the outline rather than the text in case it's blank. + text.after(outline); // we have to add it to the DOM or the rbox call doesn't work. + const rbox = outline.rbox(); + const bbox = outline.bbox(); + outline.remove(); // take it out again. + const editor = this.editor = document.createElement("textarea"); + editDiv.appendChild(editor); + editor.className = "markup-textEditor"; + editor.contentEditable = "true"; + editor.spellcheck = true; + editor.wrap = "off"; + const mouselistener = (ev: Event) => { + ev.stopPropagation(); + return true; + }; + + (editor as any).onselectstart = mouselistener; + editor.oncontextmenu = editor.onmousedown = editor.onmouseup = mouselistener; + editor.onkeydown = (ev: KeyboardEvent) => { + switch (ev.key) { + case "Tab": + case "Escape": + this.exitTool(); + ev.stopPropagation(); + break; + } + if (ev.key === "Enter" && (ev.shiftKey || ev.ctrlKey)) { + this.exitTool(); + ev.stopPropagation(); + } + + }; + const textElStyle = window.getComputedStyle(text.node); + + style = editor.style; + style.pointerEvents = "auto"; + style.position = "absolute"; + style.top = ((rbox.cy - (bbox.h / 2)) - divRect.top) + "px"; + style.left = ((rbox.cx - (bbox.w / 2)) - divRect.left) + "px"; + style.height = lastSize.height; + style.width = lastSize.width; + style.resize = "both"; + style.fontFamily = textElStyle.fontFamily; + style.fontSize = "14pt"; + style.textAnchor = textElStyle.textAnchor; + + const parentZ = parseInt(window.getComputedStyle(markupDiv).zIndex || "0", 10); + style.zIndex = (parentZ + 200).toString(); + + editor.innerHTML = text.getMarkup(); + this.editor.focus(); + this.editor.setSelectionRange(this._fromPlaceTool ? 0 : editor.value.length, editor.value.length); + } + + public onCleanup() { + if (this.editDiv) { + const text = this.text!; + const undo = this.markup.undo; + undo.doGroup(() => { + const newVal = this.editor!.value; + if (newVal.trim() === "") { + text.remove(); + if (!this._fromPlaceTool) + undo.onDelete(text); + return; + } + + const newText = text.clone(); + const fontSize = parseFloat(window.getComputedStyle(text.node).fontSize!); + newText.createMarkup(newVal, fontSize); + text.replace(newText); + if (this._fromPlaceTool) { + undo.onAdded(newText); + } else { + undo.onModified(newText, text); + } + }); + lastSize.height = this.editor!.style.height!; + lastSize.width = this.editor!.style.width!; + this.editDiv.remove(); + this.editDiv = undefined; + this.editor = undefined; + } + } + + public onInstall() { + if (!super.onInstall()) + return false; + this.startEditor(); + return true; + } + + public async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> { this.exitTool(); return EventHandled.Yes; } + public async onDataButtonUp(_ev: BeButtonEvent): Promise<EventHandled> { this.exitTool(); return EventHandled.Yes; } + public async onMouseStartDrag(_ev: BeButtonEvent): Promise<EventHandled> { this.exitTool(); return EventHandled.Yes; } +} diff --git a/plugins/markup/src/Undo.ts b/plugins/markup/src/Undo.ts index e83e026..371282e 100644 --- a/plugins/markup/src/Undo.ts +++ b/plugins/markup/src/Undo.ts @@ -2,7 +2,9 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -import { MarkupElement, markupApp } from "./Markup"; +import { assert } from "@bentley/bentleyjs-core"; +import { Element as MarkupElement } from "@svgdotjs/svg.js"; +import { markupApp } from "./Markup"; abstract class UndoAction { public cmdId: number = 0; @@ -10,16 +12,20 @@ abstract class UndoAction { public abstract reinstate(): void; } +let markupId = 100; // serialized id for all new Markup elements + class AddAction extends UndoAction { private _parent: MarkupElement; private _index: number; constructor(private _elem: MarkupElement) { super(); + _elem.id("markup" + (markupId++)); this._parent = _elem.parent() as MarkupElement; - this._index = this._elem.position(); + assert(this._parent !== undefined); + this._index = _elem.position(); } - public reinstate() { (this._parent as any).add(this._elem, this._index); } - public reverse() { this._elem.remove(); } + public reinstate() { this._parent.add(this._elem, this._index); } + public reverse() { markupApp.markup!.selected.drop(this._elem); this._elem.remove(); } } class DeleteAction extends UndoAction { @@ -28,9 +34,10 @@ class DeleteAction extends UndoAction { constructor(private _elem: MarkupElement) { super(); this._parent = _elem.parent() as MarkupElement; - this._index = this._elem.position(); + assert(this._parent !== undefined); + this._index = _elem.position(); } - public reverse() { (this._parent as any).add(this._elem, this._index); } + public reverse() { this._parent.add(this._elem, this._index); } public reinstate() { markupApp.markup!.selected.drop(this._elem); this._elem.remove(); } } @@ -40,17 +47,22 @@ class RepositionAction extends UndoAction { constructor(private _elem: MarkupElement, private _oldIndex: number, private _oldParent: MarkupElement) { super(); - this._newIndex = this._elem.position(); this._newParent = _elem.parent() as MarkupElement; + assert(this._newParent !== undefined); + this._newIndex = _elem.position(); } - public reinstate() { (this._newParent as any).add(this._elem, this._newIndex); } - public reverse() { (this._oldParent as any).add(this._elem, this._oldIndex); } + public reinstate() { this._newParent.add(this._elem, this._newIndex); } + public reverse() { this._oldParent.add(this._elem, this._oldIndex); if (this._elem.inSelection) markupApp.markup!.selected.drop(this._elem); } } class ModifyAction extends UndoAction { - constructor(private _newElem: MarkupElement, private _oldElement: MarkupElement) { super(); } - public reinstate() { this._oldElement.replace(this._newElem); } - public reverse() { this._newElem.replace(this._oldElement); } + constructor(private _newElem: MarkupElement, private _oldElement: MarkupElement) { + super(); + assert(_newElem !== undefined && _oldElement !== undefined); + markupApp.markup!.selected.replace(_oldElement, _newElem); + } + public reinstate() { this._oldElement.replace(this._newElem); markupApp.markup!.selected.replace(this._oldElement, this._newElem); } + public reverse() { this._newElem.replace(this._oldElement); markupApp.markup!.selected.replace(this._newElem, this._oldElement); } } export class UndoManager { @@ -67,9 +79,9 @@ export class UndoManager { } public get size() { return this._stack.length; } + private startCommand() { if (0 === this._grouped)++this._currentCmd; } public startGroup() { this.startCommand(); ++this._grouped; } public endGroup() { --this._grouped; } - public startCommand() { if (0 === this._grouped)++this._currentCmd; } public doGroup(fn: VoidFunction) { this.startGroup(); fn(); this.endGroup(); } public onAdded(elem: MarkupElement) { this.addAction(new AddAction(elem)); } public onDelete(elem: MarkupElement) { this.addAction(new DeleteAction(elem)); } diff --git a/presentation/backend/CHANGELOG.json b/presentation/backend/CHANGELOG.json index 252fa5c..f4b92a5 100644 --- a/presentation/backend/CHANGELOG.json +++ b/presentation/backend/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@bentley/presentation-backend", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/presentation-backend_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Fix test scripts for unix systems" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/presentation-backend_v0.189.0", diff --git a/presentation/backend/CHANGELOG.md b/presentation/backend/CHANGELOG.md index 3f67cd5..0c61f2e 100644 --- a/presentation/backend/CHANGELOG.md +++ b/presentation/backend/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @bentley/presentation-backend -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Fix test scripts for unix systems ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/presentation/backend/package.json b/presentation/backend/package.json index 6281790..51c6732 100644 --- a/presentation/backend/package.json +++ b/presentation/backend/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/presentation-backend", - "version": "0.189.0", + "version": "0.190.0", "description": "Backend of iModel.js Presentation library", "license": "MIT", "repository": { @@ -34,21 +34,21 @@ "lint": "echo Disabled until https://github.com/palantir/tslint/issues/4148 is fixed", "//lint": "tslint -p ./src 1>&2", "pseudolocalize": "node ./node_modules/@bentley/build-tools/scripts/pseudolocalize.js --englishDir ./assets/locales/en --out ./lib/assets/locales/en-pseudo", - "test": " mocha --opts ../mocha.opts lib/test/**/*.js", + "test": " mocha --opts ../mocha.opts \"./lib/test/**/*.js\"", "test:watch": "npm test -- --reporter min --watch-extensions ts --watch" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/presentation-common": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/presentation-common": "0.190.0" }, "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/presentation-common": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/presentation-common": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", diff --git a/presentation/common/CHANGELOG.json b/presentation/common/CHANGELOG.json index 9ec6ea8..26029ee 100644 --- a/presentation/common/CHANGELOG.json +++ b/presentation/common/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@bentley/presentation-common", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/presentation-common_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Documentation fixes" + }, + { + "comment": "Fix test scripts for unix systems" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/presentation-common_v0.189.0", diff --git a/presentation/common/CHANGELOG.md b/presentation/common/CHANGELOG.md index a53a9c5..ebd325b 100644 --- a/presentation/common/CHANGELOG.md +++ b/presentation/common/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @bentley/presentation-common -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Documentation fixes +- Fix test scripts for unix systems ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/presentation/common/Ruleset.schema.json b/presentation/common/Ruleset.schema.json index 3effc3f..6d3a9d0 100644 --- a/presentation/common/Ruleset.schema.json +++ b/presentation/common/Ruleset.schema.json @@ -6,10 +6,6 @@ "additionalProperties": false, "description": "Returns all available instance nodes filtered only by the\n`supportedSchemas` properties of the specification or the ruleset.", "properties": { - "alwaysReturnsChildren": { - "description": "This tells the rules engine that specification always returns nodes.\n\nNote: setting this flag to `true` improves performance.", - "type": "boolean" - }, "doNotSort": { "description": "Set this flag to `true` to suppress default sorting of ECInstances returned by this specification.\n\nNote: setting this flag to `true` improves performance.", "type": "boolean" @@ -22,6 +18,15 @@ "description": "Group instances by label. Defaults to `true`.", "type": "boolean" }, + "hasChildren": { + "description": "This tells the rules engine that nodes produced using this\nspecification always or never have children. Defaults to `Unknown`.\n\nNote: setting this flag to `Always` or `Never` improves performance.", + "enum": [ + "Always", + "Never", + "Unknown" + ], + "type": "string" + }, "hideIfNoChildren": { "description": "Hide nodes if they don't have children.", "type": "boolean" @@ -69,10 +74,6 @@ "additionalProperties": false, "description": "Returns all related instance nodes for parent ECInstance node.\n\nPrecondition: can be used only if parent node is ECInstance node. If there is\nno immediate parent instance node it will go up until it finds one.", "properties": { - "alwaysReturnsChildren": { - "description": "This tells the rules engine that specification always returns nodes.\n\nNote: setting this flag to `true` improves performance.", - "type": "boolean" - }, "doNotSort": { "description": "Set this flag to `true` to suppress default sorting of ECInstances returned by this specification.\n\nNote: setting this flag to `true` improves performance.", "type": "boolean" @@ -85,6 +86,15 @@ "description": "Group instances by label. Defaults to `true`.", "type": "boolean" }, + "hasChildren": { + "description": "This tells the rules engine that nodes produced using this\nspecification always or never have children. Defaults to `Unknown`.\n\nNote: setting this flag to `Always` or `Never` improves performance.", + "enum": [ + "Always", + "Never", + "Unknown" + ], + "type": "string" + }, "hideIfNoChildren": { "description": "Hide nodes if they don't have children.", "type": "boolean" @@ -174,11 +184,11 @@ "type": "string" }, "defaultValue": { - "description": "Default value to use for the check box state", + "description": "Default value to use for the check box state\n\nNote: Only makes sense when *not* bound to an ECProperty.", "type": "boolean" }, "isEnabled": { - "description": "Indicates whether check box is enabled or disabled.\n\nNote: Only makes sense when not bound to an ECProperty.", + "description": "Indicates whether check box is enabled or disabled.", "type": [ "string", "boolean" @@ -205,7 +215,7 @@ "type": "string" }, "useInversedPropertyValue": { - "description": "Should property value be inversed for the check box state.", + "description": "Should property value be inversed for the check box state.\n\nNote: Only makes sense when bound to an ECProperty.", "type": "boolean" } }, @@ -638,10 +648,6 @@ "additionalProperties": false, "description": "Returns a custom-defined node.", "properties": { - "alwaysReturnsChildren": { - "description": "This tells the rules engine that specification always returns nodes.\n\nNote: setting this flag to `true` improves performance.", - "type": "boolean" - }, "description": { "description": "Description of the node. May be localized.", "type": "string" @@ -650,6 +656,15 @@ "description": "Set this flag to `true` to suppress default sorting of ECInstances returned by this specification.\n\nNote: setting this flag to `true` improves performance.", "type": "boolean" }, + "hasChildren": { + "description": "This tells the rules engine that nodes produced using this\nspecification always or never have children. Defaults to `Unknown`.\n\nNote: setting this flag to `Always` or `Never` improves performance.", + "enum": [ + "Always", + "Never", + "Unknown" + ], + "type": "string" + }, "hideIfNoChildren": { "description": "Hide nodes if they don't have children.", "type": "boolean" @@ -707,10 +722,6 @@ "additionalProperties": false, "description": "Returns nodes for instances which are returned by an ECSQL query.\n\nNote: this specification is formerly known as `SearchResultInstanceNodesSpecification`.", "properties": { - "alwaysReturnsChildren": { - "description": "This tells the rules engine that specification always returns nodes.\n\nNote: setting this flag to `true` improves performance.", - "type": "boolean" - }, "doNotSort": { "description": "Set this flag to `true` to suppress default sorting of ECInstances returned by this specification.\n\nNote: setting this flag to `true` improves performance.", "type": "boolean" @@ -723,6 +734,15 @@ "description": "Group instances by label. Defaults to `true`.", "type": "boolean" }, + "hasChildren": { + "description": "This tells the rules engine that nodes produced using this\nspecification always or never have children. Defaults to `Unknown`.\n\nNote: setting this flag to `Always` or `Never` improves performance.", + "enum": [ + "Always", + "Never", + "Unknown" + ], + "type": "string" + }, "hideIfNoChildren": { "description": "Hide nodes if they don't have children.", "type": "boolean" @@ -853,7 +873,7 @@ "type": "string" }, "groups": { - "description": "Specifications of grouping which should be applied to maching ECInstances", + "description": "Specifications of grouping which should be applied to matching ECInstances", "items": { "anyOf": [ { @@ -969,10 +989,6 @@ "additionalProperties": false, "description": "Returns all instance nodes of specified ECClasses.", "properties": { - "alwaysReturnsChildren": { - "description": "This tells the rules engine that specification always returns nodes.\n\nNote: setting this flag to `true` improves performance.", - "type": "boolean" - }, "arePolymorphic": { "description": "Should all `classes` be handled polymorphically.", "type": "boolean" @@ -1003,6 +1019,15 @@ "description": "Group instances by label. Defaults to `true`.", "type": "boolean" }, + "hasChildren": { + "description": "This tells the rules engine that nodes produced using this\nspecification always or never have children. Defaults to `Unknown`.\n\nNote: setting this flag to `Always` or `Never` improves performance.", + "enum": [ + "Always", + "Never", + "Unknown" + ], + "type": "string" + }, "hideIfNoChildren": { "description": "Hide nodes if they don't have children.", "type": "boolean" @@ -1419,10 +1444,6 @@ "additionalProperties": false, "description": "Returns related instance nodes of specified related ECClasses.\n\nPrecondition: can be used only if parent node is ECInstance\nnode. If there is no immediate parent instance node it will go up until it finds one.", "properties": { - "alwaysReturnsChildren": { - "description": "This tells the rules engine that specification always returns nodes.\n\nNote: setting this flag to `true` improves performance.", - "type": "boolean" - }, "doNotSort": { "description": "Set this flag to `true` to suppress default sorting of ECInstances returned by this specification.\n\nNote: setting this flag to `true` improves performance.", "type": "boolean" @@ -1435,6 +1456,15 @@ "description": "Group instances by label. Defaults to `true`.", "type": "boolean" }, + "hasChildren": { + "description": "This tells the rules engine that nodes produced using this\nspecification always or never have children. Defaults to `Unknown`.\n\nNote: setting this flag to `Always` or `Never` improves performance.", + "enum": [ + "Always", + "Never", + "Unknown" + ], + "type": "string" + }, "hideIfNoChildren": { "description": "Hide nodes if they don't have children.", "type": "boolean" @@ -1787,8 +1817,10 @@ "properties": { "acceptableClassNames": { "description": "Filter selected nodes by specified class names. All classes are\naccepted if not specified.", - "pattern": "^[\\w\\d]+$", - "type": "string" + "items": { + "type": "string" + }, + "type": "array" }, "acceptablePolymorphically": { "description": "Should `acceptableClassNames` property be checked polymorphically. If true, all derived\nclasses are accepted as well.", @@ -1807,7 +1839,7 @@ "type": "array" }, "onlyIfNotHandled": { - "description": "Identifies whether we should ignore this specification if there is already existing specification\nwith higher `priority` that already provides content.", + "description": "Identifies whether we should ignore this specification if there is already an existing specification\nwith higher `priority` that already provides content.", "type": "boolean" }, "priority": { @@ -1912,8 +1944,7 @@ "description": "Rule to override default node style and dynamically define a foreground/background\ncolors and a font style for a particular nodes.", "properties": { "backColor": { - "description": "Background color that should be used for node. Supports on of the following formats:\n- color name (`Red`, `Blue`, etc.)\n- `rgb(255, 255, 255)`\n- `#0F0F0F`", - "pattern": "^(\\w+|rgb\\(\\d{1,3}, *\\d{1,3}, *\\d{1,3}\\)|#[0-9a-fA-F]{6})$", + "description": "Background color that should be used for node. The value should be an ECExpression\nwhose result would evaluate to one the following formats:\n- color name (`Red`, `Blue`, etc.)\n- `rgb(255, 255, 255)`\n- `#0F0F0F`", "type": "string" }, "condition": { @@ -1921,18 +1952,11 @@ "type": "string" }, "fontStyle": { - "description": "Font style that should be used for nodes that meet the condition.\nDefaults to `FontStyle.Regular`.", - "enum": [ - "Bold", - "Italic", - "Italic,Bold", - "Regular" - ], + "description": "Font style that should be used for node. The value should be an ECExpression\nwhose result would evaluate to one the following values:\n- `\"Bold\"`\n- `\"Italic\"`\n- `\"Italic,Bold\"`\n- `\"Regular\"`\n\nDefaults to `\"FontStyle.Regular\"`.", "type": "string" }, "foreColor": { - "description": "Foreground color that should be used for node. Supports on of the following formats:\n- color name (`Red`, `Blue`, etc.)\n- `rgb(255, 255, 255)`\n- `#0F0F0F`", - "pattern": "^(\\w+|rgb\\(\\d{1,3}, *\\d{1,3}, *\\d{1,3}\\)|#[0-9a-fA-F]{6})$", + "description": "Foreground color that should be used for node. The value should be an ECExpression\nwhose result would evaluate to one the following formats:\n- color name (`Red`, `Blue`, etc.)\n- `rgb(255, 255, 255)`\n- `#0F0F0F`", "type": "string" }, "onlyIfNotHandled": { diff --git a/presentation/common/package.json b/presentation/common/package.json index 9276f39..b97011f 100644 --- a/presentation/common/package.json +++ b/presentation/common/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/presentation-common", - "version": "0.189.0", + "version": "0.190.0", "description": "Common pieces for iModel.js presentation packages", "license": "MIT", "repository": { @@ -34,7 +34,7 @@ "ruleset-json-schema:post-process": "node ./scripts/post-process-json-schema.js --path ./Ruleset.schema.json", "lint": "echo Disabled until https://github.com/palantir/tslint/issues/4148 is fixed", "//lint": "tslint -p ./src/tsconfig.json 1>&2", - "test": "mocha --opts ../mocha.opts lib/test/**/*.js", + "test": "mocha --opts ../mocha.opts \"./lib/test/**/*.js\"", "test:watch": "npm test -- --reporter min --watch-extensions ts --watch" }, "iModelJs": { @@ -49,14 +49,14 @@ } }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-common": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-common": "0.190.0" }, "devDependencies": { - "@bentley/build-tools": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", diff --git a/presentation/common/src/rules/content/SelectedNodeInstancesSpecification.ts b/presentation/common/src/rules/content/SelectedNodeInstancesSpecification.ts index ad185db..4cdfa3b 100644 --- a/presentation/common/src/rules/content/SelectedNodeInstancesSpecification.ts +++ b/presentation/common/src/rules/content/SelectedNodeInstancesSpecification.ts @@ -27,10 +27,8 @@ export interface SelectedNodeInstancesSpecification extends ContentSpecification /** * Filter selected nodes by specified class names. All classes are * accepted if not specified. - * - * @pattern ^[\w\d]+$ */ - acceptableClassNames?: string; + acceptableClassNames?: string[]; /** * Should [[acceptableClassNames]] property be checked polymorphically. If true, all derived @@ -39,7 +37,7 @@ export interface SelectedNodeInstancesSpecification extends ContentSpecification acceptablePolymorphically?: boolean; /** - * Identifies whether we should ignore this specification if there is already existing specification + * Identifies whether we should ignore this specification if there is already an existing specification * with higher `priority` that already provides content. */ onlyIfNotHandled?: boolean; diff --git a/presentation/common/src/rules/customization/CheckBoxRule.ts b/presentation/common/src/rules/customization/CheckBoxRule.ts index 6db9ca2..d9697f3 100644 --- a/presentation/common/src/rules/customization/CheckBoxRule.ts +++ b/presentation/common/src/rules/customization/CheckBoxRule.ts @@ -33,18 +33,20 @@ export interface CheckBoxRule extends RuleBase, ConditionContainer { /** * Should property value be inversed for the check box state. + * + * **Note:** Only makes sense when bound to an ECProperty. */ useInversedPropertyValue?: boolean; /** * Default value to use for the check box state + * + * **Note:** Only makes sense when *not* bound to an ECProperty. */ defaultValue?: boolean; /** * Indicates whether check box is enabled or disabled. - * - * **Note:** Only makes sense when not bound to an ECProperty. */ isEnabled?: string | boolean; } diff --git a/presentation/common/src/rules/customization/GroupingRule.ts b/presentation/common/src/rules/customization/GroupingRule.ts index aab6be5..3239bef 100644 --- a/presentation/common/src/rules/customization/GroupingRule.ts +++ b/presentation/common/src/rules/customization/GroupingRule.ts @@ -40,7 +40,7 @@ export interface GroupingRule extends RuleBase, ConditionContainer { /** Specification of ECClass which should be grouped using this rule */ class: SingleSchemaClassSpecification; - /** Specifications of grouping which should be applied to maching ECInstances */ + /** Specifications of grouping which should be applied to matching ECInstances */ groups: GroupingSpecification[]; } diff --git a/presentation/common/src/rules/customization/StyleOverride.ts b/presentation/common/src/rules/customization/StyleOverride.ts index 750d91a..65167ba 100644 --- a/presentation/common/src/rules/customization/StyleOverride.ts +++ b/presentation/common/src/rules/customization/StyleOverride.ts @@ -6,14 +6,6 @@ import { RuleTypes, RuleBase, ConditionContainer } from "../Rule"; -/** Available font styles */ -export const enum FontStyle { - Bold = "Bold", - Italic = "Italic", - ItalicBold = "Italic,Bold", - Regular = "Regular", -} - /** * Rule to override default node style and dynamically define a foreground/background * colors and a font style for a particular nodes. @@ -30,28 +22,32 @@ export interface StyleOverride extends RuleBase, ConditionContainer { condition?: string; /** - * Foreground color that should be used for node. Supports on of the following formats: + * Foreground color that should be used for node. The value should be an [ECExpression]($docs/learning/ECExpressions.md) + * whose result would evaluate to one the following formats: * - color name (`Red`, `Blue`, etc.) * - `rgb(255, 255, 255)` * - `#0F0F0F` - * - * @pattern ^(\w+|rgb\(\d{1,3}, *\d{1,3}, *\d{1,3}\)|#[0-9a-fA-F]{6})$ */ foreColor?: string; /** - * Background color that should be used for node. Supports on of the following formats: + * Background color that should be used for node. The value should be an [ECExpression]($docs/learning/ECExpressions.md) + * whose result would evaluate to one the following formats: * - color name (`Red`, `Blue`, etc.) * - `rgb(255, 255, 255)` * - `#0F0F0F` - * - * @pattern ^(\w+|rgb\(\d{1,3}, *\d{1,3}, *\d{1,3}\)|#[0-9a-fA-F]{6})$ */ backColor?: string; /** - * Font style that should be used for nodes that meet the condition. - * Defaults to [[FontStyle.Regular]]. + * Font style that should be used for node. The value should be an [ECExpression]($docs/learning/ECExpressions.md) + * whose result would evaluate to one the following values: + * - `"Bold"` + * - `"Italic"` + * - `"Italic,Bold"` + * - `"Regular"` + * + * Defaults to `"FontStyle.Regular"`. */ - fontStyle?: FontStyle; + fontStyle?: string; } diff --git a/presentation/common/src/rules/hierarchy/ChildNodeSpecification.ts b/presentation/common/src/rules/hierarchy/ChildNodeSpecification.ts index f24f699..fd839f8 100644 --- a/presentation/common/src/rules/hierarchy/ChildNodeSpecification.ts +++ b/presentation/common/src/rules/hierarchy/ChildNodeSpecification.ts @@ -17,11 +17,12 @@ import { RelatedInstanceSpecification } from "../RelatedInstanceSpecification"; /** Base interface for all [[ChildNodeSpecification]] implementations */ export interface ChildNodeSpecificationBase extends RuleSpecification { /** - * This tells the rules engine that specification always returns nodes. + * This tells the rules engine that nodes produced using this + * specification always or never have children. Defaults to `Unknown`. * - * **Note:** setting this flag to `true` improves performance. + * **Note:** setting this flag to `Always` or `Never` improves performance. */ - alwaysReturnsChildren?: boolean; + hasChildren?: "Always" | "Never" | "Unknown"; /** * Hide nodes provided by this specification and directly show nodes of its children. diff --git a/presentation/common/src/test/_helpers/random/Hierarchy.ts b/presentation/common/src/test/_helpers/random/Hierarchy.ts index ce301c0..27c5b4b 100644 --- a/presentation/common/src/test/_helpers/random/Hierarchy.ts +++ b/presentation/common/src/test/_helpers/random/Hierarchy.ts @@ -78,6 +78,7 @@ export const createRandomECInstanceNode = (): Node => { key: createRandomECInstanceNodeKey(), label: faker.random.words(), description: nullable<string>(faker.lorem.sentence), + imageId: nullable<string>(faker.random.word), foreColor: nullable<string>(createRandomHexColor), backColor: nullable<string>(createRandomRgbColor), hasChildren: faker.random.boolean(), diff --git a/presentation/common/src/test/hierarchy/Node.test.snap b/presentation/common/src/test/hierarchy/Node.test.snap index 5945cc8..fa1f784 100644 --- a/presentation/common/src/test/hierarchy/Node.test.snap +++ b/presentation/common/src/test/hierarchy/Node.test.snap @@ -2,14 +2,11 @@ exports[`Node fromJSON creates valid Node from JSON 1`] = ` Object { - "backColor": "rgb( - 123, - 111, - 168 - )", + "backColor": undefined, "description": undefined, - "foreColor": "#5E480E", + "foreColor": "#80E076", "hasChildren": true, + "imageId": "customized", "isCheckboxEnabled": true, "isCheckboxVisible": false, "isChecked": true, @@ -33,22 +30,27 @@ Object { exports[`Node fromJSON creates valid Node from serialized JSON 1`] = ` Object { + "backColor": "rgb( + 62, + 40, + 232 + )", "description": "Rerum eius fugiat dolores repellat ut excepturi.", "hasChildren": false, - "isCheckboxEnabled": false, - "isCheckboxVisible": false, - "isChecked": true, + "isCheckboxEnabled": true, + "isCheckboxVisible": true, + "isChecked": false, "isEditable": false, "isExpanded": false, "isSelectionDisabled": false, "key": Object { "instanceKey": Object { - "className": "24/7", - "id": "0x13072000000c8dc", + "className": "website", + "id": "0x5e58000000b378", }, "pathFromRoot": Array [ - "41ce5242-abda-42a7-96dd-f8d9fe71dab8", - "e4358d78-e06d-4c62-8f5a-02b9ecb87afe", + "5242abda-2a79-46dd-b8d9-fe71dab8e435", + "8d78e06d-c620-4f5a-82b9-ecb87afe9470", ], "type": "ECInstanceNode", }, @@ -61,22 +63,23 @@ Array [ Object { "backColor": undefined, "description": undefined, - "foreColor": "#7645E6", + "foreColor": "#5E6F81", "hasChildren": true, + "imageId": "Lakes", "isCheckboxEnabled": false, "isCheckboxVisible": true, - "isChecked": true, + "isChecked": false, "isEditable": true, "isExpanded": true, - "isSelectionDisabled": false, + "isSelectionDisabled": true, "key": Object { "instanceKey": Object { - "className": "Pizza", - "id": "0x147a9000000496b", + "className": "transmitting", + "id": "0x8e74000000d40f", }, "pathFromRoot": Array [ - "ba3c99a6-80fd-447b-a427-6684f1292101", - "320e47fd-2d0a-494a-8e7c-668f8e80df18", + "c99a680f-d47b-4e42-b668-4f1292101320", + "e47fd2d0-a94a-4ce7-8668-f8e80df18df8", ], "type": "ECInstanceNode", }, @@ -91,6 +94,7 @@ Array [ "description": undefined, "foreColor": "#3761D6", "hasChildren": false, + "imageId": undefined, "isCheckboxEnabled": true, "isCheckboxVisible": false, "isChecked": false, @@ -108,7 +112,7 @@ Array [ ], "type": "ECInstanceNode", }, - "label": "Corporate Cheese Wyoming", + "label": "multi-byte", }, ] `; @@ -117,51 +121,54 @@ exports[`Node[] fromJSON creates valid Node[] from serialized JSON 1`] = ` Array [ Object { "backColor": "rgb( - 121, - 204, - 227 + 214, + 106, + 164 )", - "foreColor": "#0B734D", + "foreColor": "#D67CE8", "hasChildren": true, - "isCheckboxEnabled": true, - "isCheckboxVisible": true, + "imageId": "Handcrafted Granite Bike", + "isCheckboxEnabled": false, + "isCheckboxVisible": false, "isChecked": false, - "isEditable": true, + "isEditable": false, "isExpanded": true, - "isSelectionDisabled": false, + "isSelectionDisabled": true, "key": Object { "instanceKey": Object { - "className": "lavender", - "id": "0x16d52000000095e", + "className": "Lead", + "id": "0x39350000007c1b", }, "pathFromRoot": Array [ - "12c14d39-3c8e-4ac6-bf8b-c2a0ea5a67f5", - "74125f60-e3df-4722-8643-7c9a682a872f", + "d393c8ea-c63f-48bc-aa0e-a5a67f574125", + "f60e3df7-2246-4437-89a6-82a872f1a833", ], "type": "ECInstanceNode", }, "label": "exuding", }, Object { + "foreColor": "#CA2B2F", "hasChildren": true, - "isCheckboxEnabled": true, - "isCheckboxVisible": false, + "imageId": "Global", + "isCheckboxEnabled": false, + "isCheckboxVisible": true, "isChecked": true, - "isEditable": false, + "isEditable": true, "isExpanded": false, - "isSelectionDisabled": false, + "isSelectionDisabled": true, "key": Object { "instanceKey": Object { - "className": "frictionless", - "id": "0x1537000000027a3", + "className": "invoice", + "id": "0xb186000000601f", }, "pathFromRoot": Array [ - "0e84ca2b-2f9f-4d9d-ac4b-2663b915980e", - "5ebefd53-da59-48ea-aa61-7fd897152559", + "b2663b91-5980-4e5e-befd-53da598eaaa6", + "17fd8971-5255-495f-a055-1d8de08102d3", ], "type": "ECInstanceNode", }, - "label": "Place", + "label": "Savings Account fuchsia global", }, ] `; diff --git a/presentation/common/src/test/hierarchy/NodePathElement.test.snap b/presentation/common/src/test/hierarchy/NodePathElement.test.snap index e03cfac..e71077c 100644 --- a/presentation/common/src/test/hierarchy/NodePathElement.test.snap +++ b/presentation/common/src/test/hierarchy/NodePathElement.test.snap @@ -3,31 +3,36 @@ exports[`NodePathElement fromJSON creates valid NodePathElement from JSON 1`] = ` Object { "children": Array [], - "index": 333, + "index": 540, "isMarked": true, "node": Object { - "backColor": undefined, + "backColor": "rgb( + 160, + 109, + 224 + )", "description": undefined, - "foreColor": "#3AF79E", - "hasChildren": false, - "isCheckboxEnabled": true, + "foreColor": undefined, + "hasChildren": true, + "imageId": undefined, + "isCheckboxEnabled": false, "isCheckboxVisible": false, - "isChecked": true, - "isEditable": false, - "isExpanded": true, - "isSelectionDisabled": true, + "isChecked": false, + "isEditable": true, + "isExpanded": false, + "isSelectionDisabled": false, "key": Object { "instanceKey": Object { - "className": "Tajikistan", - "id": "0x7c4a000000278c", + "className": "Incredible", + "id": "0x90dd000000f738", }, "pathFromRoot": Array [ - "32224f6c-4c12-4d84-a248-7912933b9c0d", - "2ae720f0-5f5f-4380-8dcf-42b29bba3e81", + "4f6c4c12-d842-4248-b912-933b9c0d2ae7", + "20f05f5f-380c-4dcf-82b2-9bba3e810379", ], "type": "ECInstanceNode", }, - "label": "payment Tasty", + "label": "Central Profit-focused Administrator", }, } `; @@ -38,9 +43,14 @@ Object { "index": 364, "isMarked": false, "node": Object { + "backColor": "rgb( + 235, + 134, + 206 + )", "description": "Id repellendus praesentium alias rerum et omnis aut laborum eveniet.", - "foreColor": "#4A97E8", "hasChildren": false, + "imageId": "multi-tasking", "isCheckboxEnabled": true, "isCheckboxVisible": true, "isChecked": false, @@ -67,35 +77,36 @@ exports[`NodePathElement[] fromJSON creates valid NodePathElement[] from JSON 1` Array [ Object { "children": Array [], - "index": 449, - "isMarked": true, + "index": 921, + "isMarked": false, "node": Object { "backColor": "rgb( - 148, - 184, - 246 + 17, + 84, + 218 )", - "description": "Est et doloribus consequatur a totam maiores nostrum voluptatum.", + "description": "Totam maiores nostrum voluptatum ut et culpa quisquam sapiente consequatur.", "foreColor": undefined, "hasChildren": false, + "imageId": undefined, "isCheckboxEnabled": true, "isCheckboxVisible": false, - "isChecked": false, + "isChecked": true, "isEditable": true, "isExpanded": false, - "isSelectionDisabled": true, + "isSelectionDisabled": false, "key": Object { "instanceKey": Object { - "className": "reciprocal", - "id": "0x3dd0000000e5f4", + "className": "Toys", + "id": "0x14bd10000010c84", }, "pathFromRoot": Array [ - "76f871cc-f32b-44c5-a308-dfaa5ba3fb6a", - "1a828e76-0678-4765-8002-2fa9e36e1392", + "cf32b4c5-a308-4dfa-a5ba-3fb6a1a828e7", + "60678765-0002-42fa-9e36-e13924e054c9", ], "type": "ECInstanceNode", }, - "label": "Licensed wireless", + "label": "Jamaican Dollar multi-byte Personal Loan Account", }, }, Object { @@ -104,27 +115,28 @@ Array [ "isMarked": true, "node": Object { "backColor": "rgb( - 168, - 43, - 21 + 239, + 86, + 223 )", "description": undefined, - "foreColor": "#9861B9", + "foreColor": "#1B91A2", "hasChildren": true, + "imageId": "Home Loan Account", "isCheckboxEnabled": false, "isCheckboxVisible": true, - "isChecked": true, + "isChecked": false, "isEditable": true, "isExpanded": true, - "isSelectionDisabled": false, + "isSelectionDisabled": true, "key": Object { "instanceKey": Object { - "className": "ADP", - "id": "0x43600000008c46", + "className": "Computer", + "id": "0xccf300000044e9", }, "pathFromRoot": Array [ - "ad04dc4f-3625-42e7-b2a4-3fc7a77eaccb", - "a7f48a6e-6794-4f2c-b6cb-cfed6e58f270", + "4dc4f362-52e7-472a-83fc-7a77eaccba7f", + "48a6e679-4f2c-436c-bcfe-d6e58f2700ea", ], "type": "ECInstanceNode", }, @@ -142,27 +154,28 @@ Array [ "isMarked": false, "node": Object { "backColor": "rgb( - 120, - 9, - 138 + 251, + 217, + 236 )", "description": "Ad beatae sunt asperiores labore ipsa et provident voluptatem natus.", - "foreColor": "#02EE0D", + "foreColor": "#D7708F", "hasChildren": true, + "imageId": "Rustic Fresh Sausages", "isCheckboxEnabled": true, "isCheckboxVisible": true, - "isChecked": true, - "isEditable": true, - "isExpanded": true, - "isSelectionDisabled": false, + "isChecked": false, + "isEditable": false, + "isExpanded": false, + "isSelectionDisabled": true, "key": Object { "instanceKey": Object { - "className": "Bike", - "id": "0xb9f200000135bc", + "className": "transform", + "id": "0xecf000000d08c", }, "pathFromRoot": Array [ - "210fc227-a508-4cc2-9589-8a907d468035", - "733f4777-de2b-4507-a6eb-63211a04ad25", + "227a508c-c2d5-4898-a907-d468035733f4", + "777de2b5-07a6-4eb6-b211-a04ad25d5f62", ], "type": "ECInstanceNode", }, @@ -171,35 +184,35 @@ Array [ }, Object { "children": Array [], - "index": 570, - "isMarked": true, + "index": 231, + "isMarked": false, "node": Object { "backColor": "rgb( - 253, - 184, - 100 + 204, + 243, + 193 )", - "description": "Esse totam numquam sed cumque dolore quam tempore.", - "foreColor": "#3FFB7F", + "description": "Earum a eligendi quos.", + "foreColor": "#FB6C15", "hasChildren": true, "isCheckboxEnabled": true, "isCheckboxVisible": true, "isChecked": false, - "isEditable": false, - "isExpanded": true, - "isSelectionDisabled": false, + "isEditable": true, + "isExpanded": false, + "isSelectionDisabled": true, "key": Object { "instanceKey": Object { - "className": "Checking Account", - "id": "0x1388d000001536b", + "className": "Music", + "id": "0x15f780000013ae0", }, "pathFromRoot": Array [ - "def658cf-4949-4ac5-97af-65b2063aaec0", - "3833ad65-ca9f-4ade-993d-ce1c57ca7546", + "f4949ac5-97af-465b-a063-aaec03833ad6", + "5ca9fade-993d-4ce1-857c-a7546114a90d", ], "type": "ECInstanceNode", }, - "label": "Rubber", + "label": "bandwidth", }, }, ] diff --git a/presentation/components/CHANGELOG.json b/presentation/components/CHANGELOG.json index 742ed87..67fd38d 100644 --- a/presentation/components/CHANGELOG.json +++ b/presentation/components/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@bentley/presentation-components", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/presentation-components_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Fix test scripts for unix systems" + }, + { + "comment": "Set `TreeNodeItem.icon` when initializing it from presentation `Node` object" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/presentation-components_v0.189.0", diff --git a/presentation/components/CHANGELOG.md b/presentation/components/CHANGELOG.md index 6972bb3..6ba6e11 100644 --- a/presentation/components/CHANGELOG.md +++ b/presentation/components/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @bentley/presentation-components -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Fix test scripts for unix systems +- Set `TreeNodeItem.icon` when initializing it from presentation `Node` object ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/presentation/components/package.json b/presentation/components/package.json index 9f65659..8a39ddd 100644 --- a/presentation/components/package.json +++ b/presentation/components/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/presentation-components", - "version": "0.189.0", + "version": "0.190.0", "description": "React components based on iModel.js Presentation library", "license": "MIT", "repository": { @@ -33,7 +33,7 @@ "extract-api": "node ./node_modules/@bentley/build-tools/scripts/extract-api.js --entry=presentation-components --isPresentation=true", "lint": "echo Disabled until https://github.com/palantir/tslint/issues/4148 is fixed", "//lint": "tslint -p ./src 1>&2", - "test": "mocha --opts ../mocha.opts -r ignore-styles -r jsdom-global/register --file ./lib/test/index.test.js lib/test/**/*.js", + "test": "mocha --opts ../mocha.opts -r ignore-styles -r jsdom-global/register --file ./lib/test/index.test.js \"./lib/test/**/*.js\"", "test:watch": "npm test -- --reporter min --watch-extensions ts,tsx --watch" }, "iModelJs": { @@ -68,26 +68,26 @@ "react-dom": "^16.4.2" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0" }, "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", diff --git a/presentation/components/src/test/tree/DataProvider.test.snap b/presentation/components/src/test/tree/DataProvider.test.snap index 8841242..600e05e 100644 --- a/presentation/components/src/test/tree/DataProvider.test.snap +++ b/presentation/components/src/test/tree/DataProvider.test.snap @@ -4,23 +4,24 @@ exports[`TreeDataProvider getFilteredNodes returns presentation manager result 1 Array [ Object { "children": Array [], - "index": 841, + "index": 769, "isMarked": false, "node": Object { "backColor": "rgb( - 32, - 198, - 46 + 96, + 226, + 226 )", "description": undefined, - "foreColor": "#970E90", + "foreColor": "#E9002C", "hasChildren": false, + "imageId": "Missouri", "isCheckboxEnabled": false, - "isCheckboxVisible": true, + "isCheckboxVisible": false, "isChecked": false, "isEditable": true, - "isExpanded": false, - "isSelectionDisabled": true, + "isExpanded": true, + "isSelectionDisabled": false, "key": Object { "instanceKey": Object { "className": "Taka", @@ -37,35 +38,32 @@ Array [ }, Object { "children": Array [], - "index": 992, - "isMarked": true, + "index": 136, + "isMarked": false, "node": Object { - "backColor": "rgb( - 238, - 33, - 44 - )", - "description": "Et dolorem dolorum quasi quia hic sit libero deserunt non.", - "foreColor": "#36C0D2", - "hasChildren": true, - "isCheckboxEnabled": true, - "isCheckboxVisible": false, - "isChecked": true, - "isEditable": false, - "isExpanded": false, + "backColor": undefined, + "description": undefined, + "foreColor": undefined, + "hasChildren": false, + "imageId": "SAS", + "isCheckboxEnabled": false, + "isCheckboxVisible": true, + "isChecked": false, + "isEditable": true, + "isExpanded": true, "isSelectionDisabled": false, "key": Object { "instanceKey": Object { - "className": "Extended", - "id": "0x4081000000a62f", + "className": "Sausages", + "id": "0xd4fd000001090c", }, "pathFromRoot": Array [ - "7c2dc083-a9d7-4f77-8e8f-8a394442664d", - "12027c22-44b3-4f70-b5dc-2845797cdfdf", + "dc083a9d-7f77-44e8-b8a3-94442664d120", + "27c2244b-3f70-475d-8284-5797cdfdf346", ], "type": "ECInstanceNode", }, - "label": "Mauritius Rupee lime North Carolina", + "label": "hard drive", }, }, ] @@ -74,7 +72,6 @@ Array [ exports[`TreeDataProvider getNodes children returns presentation manager result 1`] = ` Array [ Object { - "checkBoxState": 1, "description": "Voluptatem repellendus sint rerum.", "extendedData": Object { "key": Object { @@ -89,40 +86,36 @@ Array [ "type": "ECInstanceNode", }, }, + "hasChildren": true, "id": "21ab590b-334a-4e25-bb59-28504ca89d67/5a887966-3af4-4c64-be5e-66399295a54e", - "isCheckboxDisabled": true, - "isCheckboxVisible": true, "label": "Tasty Wooden Mouse", "parentId": "cfa5b4da-3271-4b2d-a97b-279993a4436c", "style": Object { "colorOverrides": Object { - "backgroundColor": 1940403455, + "color": 2050433535, }, }, }, Object { - "checkBoxState": 1, "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "sky blue", - "id": "0x12ef20000006ff8", + "className": "Practical Plastic Fish", + "id": "0x17dfb0000004a94", }, "pathFromRoot": Array [ - "4a1d5363-4882-4980-9817-3db762e53773", - "76d7efbb-df5e-470a-8764-c60c82aebaa5", + "53634882-9809-4817-bdb7-62e5377376d7", + "efbbdf5e-70a4-4764-860c-82aebaa5384c", ], "type": "ECInstanceNode", }, }, - "hasChildren": true, - "id": "76d7efbb-df5e-470a-8764-c60c82aebaa5/4a1d5363-4882-4980-9817-3db762e53773", - "isCheckboxVisible": true, - "label": "action-items", + "id": "efbbdf5e-70a4-4764-860c-82aebaa5384c/53634882-9809-4817-bdb7-62e5377376d7", + "label": "Cambridgeshire reboot", "parentId": "cfa5b4da-3271-4b2d-a97b-279993a4436c", "style": Object { "colorOverrides": Object { - "color": -142622977, + "color": 1585037311, }, }, }, @@ -132,6 +125,7 @@ Array [ exports[`TreeDataProvider getNodes root returns presentation manager result 1`] = ` Array [ Object { + "checkBoxState": 1, "extendedData": Object { "key": Object { "instanceKey": Object { @@ -147,40 +141,36 @@ Array [ }, "hasChildren": true, "id": "14189a13-8287-4e88-b429-40a6f4fc635a/44689e68-48ae-45ef-90f6-e931fa4685cc", - "isCheckboxDisabled": true, "isCheckboxVisible": true, "label": "Fiji payment", "style": Object { "colorOverrides": Object { - "backgroundColor": -1872553985, + "backgroundColor": 81687551, + "color": -1776365569, }, }, }, Object { "checkBoxState": 1, - "description": "Quo fuga nihil corrupti nihil eum quidem reiciendis veniam sunt.", + "description": "Eum quidem reiciendis veniam sunt sunt.", "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "disintermediate", - "id": "0x74cc0000003e36", + "className": "national", + "id": "0x37190000000e92", }, "pathFromRoot": Array [ - "979d0b9c-0ad3-4c15-a225-8d91174cf691", - "c86639b7-62a6-4c71-b7b4-13aa82a1d6b7", + "c0ad3c15-e225-48d9-9174-cf691c86639b", + "762a6c71-77b4-413a-a82a-1d6b76624dbc", ], "type": "ECInstanceNode", }, }, - "hasChildren": true, - "id": "c86639b7-62a6-4c71-b7b4-13aa82a1d6b7/979d0b9c-0ad3-4c15-a225-8d91174cf691", + "icon": "orange", + "id": "762a6c71-77b4-413a-a82a-1d6b76624dbc/c0ad3c15-e225-48d9-9174-cf691c86639b", + "isCheckboxDisabled": true, "isCheckboxVisible": true, - "label": "application national Rustic Frozen Bike", - "style": Object { - "colorOverrides": Object { - "backgroundColor": 793823743, - }, - }, + "label": "Assimilated International Investment Account", }, ] `; diff --git a/presentation/components/src/test/tree/FilteredDataProvider.test.snap b/presentation/components/src/test/tree/FilteredDataProvider.test.snap index b36e8a4..59ecced 100644 --- a/presentation/components/src/test/tree/FilteredDataProvider.test.snap +++ b/presentation/components/src/test/tree/FilteredDataProvider.test.snap @@ -8,25 +8,26 @@ Array [ "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "Minnesota", - "id": "0xcfbe0000007bf8", + "className": "internet solution", + "id": "0x2ab5000001822d", }, "pathFromRoot": Array [ - "dcb68625-021e-40e1-839b-08a0214f5943", - "142b23f9-5f0d-4b34-b39f-de2c0a107d9c", + "b6862502-1e0e-41c3-9b08-a0214f594314", + "2b23f95f-0db3-4473-9fde-2c0a107d9c97", ], "type": "ECInstanceNode", }, }, "hasChildren": false, - "id": "142b23f9-5f0d-4b34-b39f-de2c0a107d9c/dcb68625-021e-40e1-839b-08a0214f5943", + "icon": "deposit", + "id": "2b23f95f-0db3-4473-9fde-2c0a107d9c97/b6862502-1e0e-41c3-9b08-a0214f594314", "isCheckboxVisible": true, "label": "A-2-1", - "parentId": "fb7680c8-0a28-4cf0-9ee8-272ec6682ae5/e14e4128-01ae-43e4-8790-9992f94b3186", + "parentId": "80c80a28-cf09-4ee8-a72e-c6682ae559ca/412801ae-3e44-4790-9992-f94b3186fb76", "style": Object { "colorOverrides": Object { - "backgroundColor": 1531058431, - "color": -1590574337, + "backgroundColor": -836488705, + "color": 471946495, }, }, }, @@ -35,20 +36,25 @@ Array [ "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "Incredible", - "id": "0x332b000000c483", + "className": "Fresh", + "id": "0xd0bd0000013c35", }, "pathFromRoot": Array [ - "9451bb8c-be2e-4a06-bb9c-f6fe83e0ae64", - "729087ec-e569-4f02-9212-b8007ffd5072", + "1bb8cbe2-ea06-43b9-8f6f-e83e0ae64729", + "087ece56-9f02-4521-ab80-07ffd5072158", ], "type": "ECInstanceNode", }, }, "hasChildren": true, - "id": "729087ec-e569-4f02-9212-b8007ffd5072/9451bb8c-be2e-4a06-bb9c-f6fe83e0ae64", + "id": "087ece56-9f02-4521-ab80-07ffd5072158/1bb8cbe2-ea06-43b9-8f6f-e83e0ae64729", "label": "A-2-2", - "parentId": "fb7680c8-0a28-4cf0-9ee8-272ec6682ae5/e14e4128-01ae-43e4-8790-9992f94b3186", + "parentId": "80c80a28-cf09-4ee8-a72e-c6682ae559ca/412801ae-3e44-4790-9992-f94b3186fb76", + "style": Object { + "colorOverrides": Object { + "color": -789612801, + }, + }, }, ] `; @@ -73,31 +79,38 @@ Array [ }, "hasChildren": true, "id": "e67862f3-ccbf-4c51-b8ed-ed1d0420ea19/6fbe024f-2316-4265-a6e8-d65a837e308a", + "isCheckboxDisabled": true, + "isCheckboxVisible": true, "label": "A-1", + "style": Object { + "colorOverrides": Object { + "backgroundColor": 1198705407, + }, + }, }, Object { "autoExpand": true, - "description": "Voluptas enim ex eveniet facere.", "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "front-end", - "id": "0xf9270000012549", + "className": "panel", + "id": "0x10d9c000001590a", }, "pathFromRoot": Array [ - "e14e4128-01ae-43e4-8790-9992f94b3186", - "fb7680c8-0a28-4cf0-9ee8-272ec6682ae5", + "412801ae-3e44-4790-9992-f94b3186fb76", + "80c80a28-cf09-4ee8-a72e-c6682ae559ca", ], "type": "ECInstanceNode", }, }, "hasChildren": true, - "id": "fb7680c8-0a28-4cf0-9ee8-272ec6682ae5/e14e4128-01ae-43e4-8790-9992f94b3186", + "icon": "customized", + "id": "80c80a28-cf09-4ee8-a72e-c6682ae559ca/412801ae-3e44-4790-9992-f94b3186fb76", + "isCheckboxVisible": true, "label": "A-2", "style": Object { "colorOverrides": Object { - "backgroundColor": 499774463, - "color": -284526081, + "backgroundColor": -503971073, }, }, }, diff --git a/presentation/components/src/test/tree/Utils.test.snap b/presentation/components/src/test/tree/Utils.test.snap index 4f3b4be..aebe2d3 100644 --- a/presentation/components/src/test/tree/Utils.test.snap +++ b/presentation/components/src/test/tree/Utils.test.snap @@ -19,7 +19,8 @@ Object { "label": "engage", "style": Object { "colorOverrides": Object { - "backgroundColor": -2027626753, + "backgroundColor": -1843179777, + "color": -2100005121, }, }, } @@ -41,13 +42,13 @@ Object { "type": "ECInstanceNode", }, }, - "hasChildren": true, + "icon": "Coordinator", "id": "f7dd0ef0-a772-4c3d-b03a-40a84a6a8c62/774cdc48-ca2b-4104-8800-7ce7a4f6d779", "label": "Avon Awesome Plastic Salad", "style": Object { "colorOverrides": Object { - "backgroundColor": -1829999873, - "color": -166204673, + "backgroundColor": -1139576833, + "color": 2124521215, }, "isBold": true, "isItalic": true, @@ -74,14 +75,13 @@ Object { "hasChildren": true, "id": "0b80175c-270d-4a1a-bba3-14ef8866c2a1/df9c559d-a389-4bc4-aef0-a5d0cb8b62e6", "label": "Indian Rupee Rufiyaa systems", - "parentId": "Dynamic", + "parentId": "deposit", } `; exports[`Utils createTreeNodeItems creates tree nodes 1`] = ` Array [ Object { - "checkBoxState": 1, "description": "Necessitatibus eum ab.", "extendedData": Object { "key": Object { @@ -96,12 +96,14 @@ Array [ "type": "ECInstanceNode", }, }, + "hasChildren": true, "id": "e845ce78-d049-4079-8e52-c1852841f2dd/4dcb61ac-32e0-49da-bf7d-e66ed5ccf6b5", + "isCheckboxDisabled": true, "isCheckboxVisible": true, "label": "intranet Executive", "style": Object { "colorOverrides": Object { - "backgroundColor": 99406079, + "color": 248743167, }, }, }, @@ -109,18 +111,19 @@ Array [ "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "payment", - "id": "0x5d070000002c52", + "className": "Networked", + "id": "0xdba500000106ba", }, "pathFromRoot": Array [ - "4ed5eba5-6260-4081-9375-0f3daeabb142", - "1892b75e-f471-4908-bcd9-caf25d633b21", + "eba56260-0815-4375-8f3d-aeabb1421892", + "b75ef471-908f-4cd9-8af2-5d633b21a813", ], "type": "ECInstanceNode", }, }, - "id": "1892b75e-f471-4908-bcd9-caf25d633b21/4ed5eba5-6260-4081-9375-0f3daeabb142", - "label": "Buckinghamshire", + "icon": "national", + "id": "b75ef471-908f-4cd9-8af2-5d633b21a813/eba56260-0815-4375-8f3d-aeabb1421892", + "label": "indexing XSS", }, ] `; @@ -145,40 +148,36 @@ Array [ }, "hasChildren": true, "id": "fde07d2e-c992-4c8d-9f77-66e2d57cff27/7563a72a-9ca8-4deb-b3f2-90e038b00330", - "isCheckboxDisabled": true, "isCheckboxVisible": true, "label": "Haiti", - "parentId": "Functionality", + "parentId": "Movies", "style": Object { "colorOverrides": Object { - "backgroundColor": 480516607, + "color": 437788159, }, }, }, Object { - "description": "Voluptas cupiditate rerum consequatur illum unde molestiae quam.", "extendedData": Object { "key": Object { "instanceKey": Object { - "className": "Future", - "id": "0x1797b0000009652", + "className": "Accountability", + "id": "0xabb40000005556", }, "pathFromRoot": Array [ - "d29db17a-7270-42f3-a398-05abe6ed9fcd", - "7bda1c50-0d4d-45d6-bc09-e4f2bdad7ba2", + "b17a7270-2f3a-4398-85ab-e6ed9fcd7bda", + "1c500d4d-5d63-4c09-a4f2-bdad7ba2e46f", ], "type": "ECInstanceNode", }, }, - "id": "7bda1c50-0d4d-45d6-bc09-e4f2bdad7ba2/d29db17a-7270-42f3-a398-05abe6ed9fcd", - "isCheckboxDisabled": true, - "isCheckboxVisible": true, - "label": "SSL methodologies Berkshire", - "parentId": "Functionality", + "icon": "connecting", + "id": "1c500d4d-5d63-4c09-a4f2-bdad7ba2e46f/b17a7270-2f3a-4398-85ab-e6ed9fcd7bda", + "label": "Berkshire Soft generate", + "parentId": "Movies", "style": Object { "colorOverrides": Object { - "backgroundColor": 1088423167, - "color": 944178687, + "backgroundColor": 1513652479, }, }, }, diff --git a/presentation/components/src/test/tree/WithFilteringSupport.test.snap b/presentation/components/src/test/tree/WithFilteringSupport.test.snap index 5cc16ce..01259f3 100644 --- a/presentation/components/src/test/tree/WithFilteringSupport.test.snap +++ b/presentation/components/src/test/tree/WithFilteringSupport.test.snap @@ -40,26 +40,6 @@ exports[`Tree withFilteringSupport render renders with overlay if imodel is diff </div> `; -exports[`Tree withFilteringSupport render renders with overlay if model is different 1`] = ` -<div - className="filteredTree" -> - <Tree - dataProvider={null} - nodeHighlightingProps={ - Object { - "activeMatch": undefined, - "searchText": "filter", - } - } - selectionMode={1} - /> - <div - className="filteredTreeOverlay" - /> -</div> -`; - exports[`Tree withFilteringSupport render renders with overlay if rulesetId is different 1`] = ` <div className="filteredTree" diff --git a/presentation/components/src/tree/Utils.ts b/presentation/components/src/tree/Utils.ts index 2405ee7..eeda78d 100644 --- a/presentation/components/src/tree/Utils.ts +++ b/presentation/components/src/tree/Utils.ts @@ -33,6 +33,8 @@ export const createTreeNodeItem = (node: Readonly<Node>, parentId?: string): Del item.description = node.description; if (node.hasChildren) item.hasChildren = true; + if (node.imageId) + item.icon = node.imageId; if (StyleHelper.isBold(node)) style.isBold = true; if (StyleHelper.isItalic(node)) diff --git a/presentation/frontend/CHANGELOG.json b/presentation/frontend/CHANGELOG.json index 8445ba5..2c424b5 100644 --- a/presentation/frontend/CHANGELOG.json +++ b/presentation/frontend/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@bentley/presentation-frontend", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/presentation-frontend_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Fix test scripts for unix systems" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/presentation-frontend_v0.189.0", diff --git a/presentation/frontend/CHANGELOG.md b/presentation/frontend/CHANGELOG.md index 6ae5670..adee1bf 100644 --- a/presentation/frontend/CHANGELOG.md +++ b/presentation/frontend/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @bentley/presentation-frontend -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Fix test scripts for unix systems ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/presentation/frontend/package.json b/presentation/frontend/package.json index 8808f24..51b7d51 100644 --- a/presentation/frontend/package.json +++ b/presentation/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/presentation-frontend", - "version": "0.189.0", + "version": "0.190.0", "description": "Frontend of iModel.js Presentation library", "license": "MIT", "repository": { @@ -32,7 +32,7 @@ "extract-api": "node ./node_modules/@bentley/build-tools/scripts/extract-api.js --entry=presentation-frontend --isPresentation=true", "lint": "echo Disabled until https://github.com/palantir/tslint/issues/4148 is fixed", "//lint": "tslint -p ./src 1>&2", - "test": "mocha -r jsdom-global/register --opts ../mocha.opts lib/test/**/*.js", + "test": "mocha -r jsdom-global/register --opts ../mocha.opts \"./lib/test/**/*.js\"", "test:watch": "npm test -- --reporter min --watch-extensions ts --watch" }, "iModelJs": { @@ -47,20 +47,20 @@ } }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/presentation-common": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/presentation-common": "0.190.0" }, "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", diff --git a/presentation/testing/CHANGELOG.json b/presentation/testing/CHANGELOG.json index 14b5983..43e91da 100644 --- a/presentation/testing/CHANGELOG.json +++ b/presentation/testing/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/presentation-testing", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/presentation-testing_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/presentation-testing_v0.189.0", diff --git a/presentation/testing/CHANGELOG.md b/presentation/testing/CHANGELOG.md index c29e009..3b665c1 100644 --- a/presentation/testing/CHANGELOG.md +++ b/presentation/testing/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/presentation-testing -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/presentation/testing/package.json b/presentation/testing/package.json index 12c9460..7fc5aaf 100644 --- a/presentation/testing/package.json +++ b/presentation/testing/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/presentation-testing", - "version": "0.189.0", + "version": "0.190.0", "description": "", "license": "MIT", "repository": { @@ -32,16 +32,16 @@ "ignore-styles": "^5.0.1" }, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/presentation-backend": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-components": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/ui-components": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/presentation-backend": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-components": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/ui-components": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", diff --git a/rush.json b/rush.json index 10fd345..4fd55cc 100644 --- a/rush.json +++ b/rush.json @@ -192,6 +192,13 @@ "shouldPublish": true, "versionPolicyName": "prerelease-monorepo-lockStep" }, + { + "packageName": "@bentley/certa", + "projectFolder": "tools/certa", + "reviewCategory": "tools", + "shouldPublish": true, + "versionPolicyName": "prerelease-monorepo-lockStep" + }, { "packageName": "example-code-snippets", "projectFolder": "example-code/snippets", @@ -216,6 +223,12 @@ "reviewCategory": "internal", "shouldPublish": false }, + { + "packageName": "export-obj", + "projectFolder": "test-apps/export-obj", + "reviewCategory": "internal", + "shouldPublish": false + }, { "packageName": "imodel-from-geojson", "projectFolder": "test-apps/imodel-from-geojson", @@ -240,12 +253,6 @@ "reviewCategory": "internal", "shouldPublish": false }, - { - "packageName": "testbed", - "projectFolder": "test-apps/testbed", - "reviewCategory": "internal", - "shouldPublish": false - }, { "packageName": "presentation-test-app", "projectFolder": "test-apps/presentation-test-app", @@ -281,6 +288,18 @@ "projectFolder": "test-apps/webworker-test-app", "reviewCategory": "internal", "shouldPublish": false + }, + { + "packageName": "core-integration-tests", + "projectFolder": "integration-tests/core", + "reviewCategory": "internal", + "shouldPublish": false + }, + { + "packageName": "rpc-integration-tests", + "projectFolder": "integration-tests/rpc", + "reviewCategory": "internal", + "shouldPublish": false } ] -} \ No newline at end of file +} diff --git a/test-apps/agent-test-app/package.json b/test-apps/agent-test-app/package.json index d639df0..84ff47b 100644 --- a/test-apps/agent-test-app/package.json +++ b/test-apps/agent-test-app/package.json @@ -21,12 +21,12 @@ "url": "http://www.bentley.com" }, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", "body-parser": "^1.18.2", "cookie-parser": "^1.4.3", "express": "^4.16.3", @@ -38,8 +38,8 @@ "react": "^16.4.2" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", "@types/body-parser": "^1.17.0", "@types/chai": "^4.1.4", "@types/express": "^4.16.1", diff --git a/test-apps/analysis-importer/package.json b/test-apps/analysis-importer/package.json index 01d577a..9be7ecc 100644 --- a/test-apps/analysis-importer/package.json +++ b/test-apps/analysis-importer/package.json @@ -15,23 +15,22 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", "body-parser": "^1.18.2" }, "devDependencies": { - "@bentley/webpack-tools": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/webpack-tools": "0.190.0", + "@bentley/build-tools": "0.190.0", "@types/body-parser": "^1.17.0", "@types/express": "^4.16.1", "@types/node": "10.12.18", "cpx": "^1.5.0", "child_process": "^1.0.2", "express": "^4.16.3", - "node-glob": "^1.2.0", "null-loader": "^0.1.1", "popper.js": "^1.14.4", "rimraf": "^2.6.2", diff --git a/test-apps/display-performance-test-app/package.json b/test-apps/display-performance-test-app/package.json index 9e96b85..3a69c09 100644 --- a/test-apps/display-performance-test-app/package.json +++ b/test-apps/display-performance-test-app/package.json @@ -49,25 +49,25 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/electron-manager": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/electron-manager": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "body-parser": "^1.18.2", "tooltip.js": "^1.2.0" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", - "@bentley/imodeljs-webserver": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", + "@bentley/imodeljs-webserver": "0.190.0", "@types/body-parser": "^1.17.0", "@types/express": "^4.16.1", "@types/node": "10.12.18", @@ -75,7 +75,6 @@ "chrome-launcher": "^0.10.5", "electron": "^4.0.1", "express": "^4.16.3", - "node-glob": "^1.2.0", "npm-run-all": "^4.1.5", "null-loader": "^0.1.1", "popper.js": "^1.14.4", diff --git a/test-apps/display-test-app/linkplugins.js b/test-apps/display-test-app/linkplugins.js index ac00e51..85486d0 100644 --- a/test-apps/display-test-app/linkplugins.js +++ b/test-apps/display-test-app/linkplugins.js @@ -12,14 +12,28 @@ function linkFile(srcpath, destpath, filename) { console.log(filename + " is already linked"); } } +function linkDir(srcpath, destpath, dirName) { + try { + fs.symlinkSync(path.join(srcpath, dirName), path.join(destpath, dirName), "dir"); + } catch (e) { + console.log(dirName + " is already linked"); + } +} // create a symbolic link to the Markup.js plugin, simulating how the plugin will be delivered in production const dest = path.resolve("lib", "webresources"); -let src = path.resolve("..", "..", "plugins", "markup", "lib", "webresources"); +let src = path.resolve("..", "..", "plugins", "markup", "lib", "webresources"); linkFile(src, dest, "MarkupPlugin.js"); linkFile(src, dest, "MarkupPlugin.js.map"); +src = path.resolve("..", "..", "plugins", "markup", "public"); +linkDir(src, dest, "Markup"); + +const enLocaleDest = path.resolve(dest, "locales", "en"); +const enLocaleSrc = path.resolve(src, "locales", "en"); +linkFile(enLocaleSrc, enLocaleDest, "MarkupTools.json"); + // create a symbolic link to the Markup.js plugin, simulating how the plugin will be delivered in production src = path.resolve("..", "webworker-test-app", "lib", "webresources"); linkFile(src, dest, "startWebWorkerPlugin.js"); diff --git a/test-apps/display-test-app/mobile.backend.webpack.config.js b/test-apps/display-test-app/mobile.backend.webpack.config.js deleted file mode 100644 index 1f5f926..0000000 --- a/test-apps/display-test-app/mobile.backend.webpack.config.js +++ /dev/null @@ -1,52 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -const path = require("path"); - -module.exports = { - mode: "development", - entry: "./lib/backend/MobileMain.js", - output: { - path: path.resolve(__dirname, "./lib/mobile"), - filename: "MobileMain.js", - pathinfo: true, - }, - target: "webworker", - devtool: "source-map", - module: { - rules: [ - { - test: /\.js$/, - use: "source-map-loader", - enforce: "pre" - }, - { - test: /growl\.js$/, - use: 'null-loader' - }, - { - test: /xunit\.js$/, - use: 'null-loader' - }, - { - test: /bunyan/, - use: 'null-loader' - } - ] - }, - externals: { - "@bentley/imodeljs-electronaddon": "throw new Error('should never happen')", - "@bentley/imodeljs-nodeaddon": "throw new Error('should never happen')", - "electron": "throw new Error('should never happen')", - "IModelJsFs": "{IModelJsFs: IModelJsFs}", - "./IModelJsFs": "{IModelJsFs: IModelJsFs}", - "../IModelJsFs": "{IModelJsFs: IModelJsFs}", - "fs": "IModelJsFs", - "fs-extra": "IModelJsFs" - }, - stats: { - warnings: false - } -} \ No newline at end of file diff --git a/test-apps/display-test-app/mobile.frontend.webpack.config.js b/test-apps/display-test-app/mobile.frontend.webpack.config.js deleted file mode 100644 index b4b4342..0000000 --- a/test-apps/display-test-app/mobile.frontend.webpack.config.js +++ /dev/null @@ -1,39 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -const path = require("path"); - -module.exports = { - mode: "development", - entry: "./lib/frontend/SimpleViewTest.js", - output: { - path: path.resolve(__dirname, "./lib/mobile/public"), - filename: '[name].bundle.js', - devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]" - }, - devtool: "cheap-module-source-map", - module: { - rules: [ - { - test: /\.js$/, - use: "source-map-loader", - enforce: "pre" - }, - { - test: /azure-storage|AzureFileHandler|UrlFileHandler/, - use: "null-loader" - } - ] - }, - stats: "errors-only", - externals: { - "electron": "throw new Error('should never happen')", - "IModelJsFs": "{IModelJsFs: IModelJsFs}", - "./IModelJsFs": "{IModelJsFs: IModelJsFs}", - "../IModelJsFs": "{IModelJsFs: IModelJsFs}", - "fs": "IModelJsFs", - "fs-extra": "IModelJsFs" - }, -}; diff --git a/test-apps/display-test-app/package.json b/test-apps/display-test-app/package.json index 4f12aec..8f56bbb 100644 --- a/test-apps/display-test-app/package.json +++ b/test-apps/display-test-app/package.json @@ -17,12 +17,12 @@ "docs": "", "linkplugins": "node linkplugins.js", "lint": "tslint --project . 1>&2", - "mobile": "tsc 1>&2 && webpack --config mobile.backend.webpack.config.js 1>&2 && webpack --config mobile.frontend.webpack.config.js 1>&2 && cpx \"public/**/*\" ./lib/mobile/public && cpx \"assets/**/*\" ./lib/mobile/assets ", "start": "npm run start:electron", "start:electron": "electron ./lib/backend/ElectronMain.js", "start:webserver": "node ./node_modules/@bentley/imodeljs-webserver/lib/WebServer.js --port=3000 --resources=./lib/webresources/", "start:backend": "node lib/backend/WebMain.js", "start:servers": "run-p \"start:webserver\" \"start:backend\"", + "build:mobile-backend": "tsc 1>&2 && webpack --config ./node_modules/@bentley/webpack-tools/mobile/backend.config.js --env.outdir=./lib/mobile --env.entry=./lib/backend/MobileMain.js --env.bundlename=main ", "test": "", "cover": "" }, @@ -54,24 +54,24 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/electron-manager": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/electron-manager": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", "body-parser": "^1.18.2", "tooltip.js": "^1.2.0" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/webpack-tools": "0.189.0", - "@bentley/imodeljs-webserver": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/webpack-tools": "0.190.0", + "@bentley/imodeljs-webserver": "0.190.0", "@types/body-parser": "^1.17.0", "@types/express": "^4.16.1", "@types/node": "10.12.18", @@ -80,13 +80,13 @@ "electron": "^4.0.1", "express": "^4.16.3", "fs-extra": "^6.0.1", - "node-glob": "^1.2.0", "npm-run-all": "^4.1.5", "null-loader": "^0.1.1", "popper.js": "^1.14.4", "rimraf": "^2.6.2", "tslint": "^5.11.0", - "typescript": "~3.2.2" + "typescript": "~3.2.2", + "webpack": "^4.20.2" }, "homepage": "http://localhost:3000/" } diff --git a/test-apps/display-test-app/public/DemoMarkup.svg b/test-apps/display-test-app/public/DemoMarkup.svg deleted file mode 100644 index b063a7f..0000000 --- a/test-apps/display-test-app/public/DemoMarkup.svg +++ /dev/null @@ -1,635 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="330.48221mm" - height="55.728813mm" - viewBox="0 0 1171 197.4643" - id="svg4147" - version="1.1" - inkscape:version="0.91 r13725" - sodipodi:docname="KTM Class 92.svg"> - <defs - id="defs4149" /> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="0.9899495" - inkscape:cx="881.10187" - inkscape:cy="39.796279" - inkscape:document-units="px" - inkscape:current-layer="g5398" - showgrid="false" - inkscape:window-width="1366" - inkscape:window-height="705" - inkscape:window-x="-8" - inkscape:window-y="-8" - inkscape:window-maximized="1" - showguides="true" - inkscape:guide-bbox="true" - inkscape:snap-global="false" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" /> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(0.5,-899.8622)"> - <g - id="g5398"> - <path - style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 365,1052.3622 0,13 80,0 0,-13 z" - id="path5394" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" /> - <path - sodipodi:nodetypes="ccccccccc" - inkscape:connector-curvature="0" - id="path5390" - d="m 294.83827,1052.3622 c 3.40927,14.5209 6.69226,16.7938 6.69226,16.7938 5.61233,3.1169 9.09447,0.5276 9.09447,0.5276 l 4.91071,-4e-4 4.82143,-2.767 24.64286,-4e-4 0,12.4464 20,0 0,-27 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path5367" - d="m 551.8393,1077.3265 0,-25 59,0 0,25 z" - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path5495" - d="m 955.8393,1081.3265 0,-29 203,0 0,29 z" - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <g - id="g5333" - transform="translate(787.8393,-2.03569)"> - <path - sodipodi:nodetypes="cccccc" - inkscape:connector-curvature="0" - id="path5335" - d="m 306,1052.3622 0,31 -2,3 -50,0 -2,-3 0,-31 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <circle - r="20" - cy="1079.1122" - cx="279.25" - id="circle5337" - style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 174,1052.3622 0,31 -2,3 -50,0 -2,-3 0,-31 z" - id="path5339" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - <circle - style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="circle5341" - cx="147.25" - cy="1079.1122" - r="20" /> - <path - style="fill:#333333;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 131.5,1074.8622 0,-8.5 -1,0 0,-10 -1.5,0 0,-2 9.5,0 0,2 -4,0 0,10 -1,0 0,8.5 z" - id="path5343" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccccccc" /> - <path - sodipodi:nodetypes="cccc" - inkscape:connector-curvature="0" - id="path5345" - d="m 141.5,1066.0622 0,5 13.5,0 0,-5 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 271.5,1066.0622 0,5 13.5,0 0,-5 z" - id="path5347" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" /> - <path - sodipodi:nodetypes="cccccccccccccccccc" - inkscape:connector-curvature="0" - id="path5349" - d="m 250,1066.8622 c 0,0 -3.79465,0.098 -5,2.5 l 0,18 -61.5,0 -2.5,-3 0,-15 -2.89748,-2.5 -38.60252,0 -1,-1.5 0,-11 44.5,0 c 2.81509,1.4723 5.83539,10.1218 5.83539,10.1218 2.76523,7.8485 8.16461,8.8782 8.16461,8.8782 l 33,0 c 4.86047,-2.0597 6.88077,-8.878 6.88077,-8.878 2.0203,-6.4399 6.11923,-10.122 6.11923,-10.122 l 44,0 0,12.5 z" - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="cccccccccccc" - inkscape:connector-curvature="0" - id="path5351" - d="m 294,1074.8622 0,-8.5 1,0 0,-10 1.5,0 0,-2 -9.5,0 0,2 4,0 0,10 1,0 0,8.5 z" - style="fill:#333333;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 181,1077.6622 -50.25,0 0,-2.4 c 5.9994,0.018 9.25,-4.2 9.25,-4.2 l 41,0 z" - id="path5353" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - <path - sodipodi:nodetypes="cccccc" - inkscape:connector-curvature="0" - id="path5355" - d="m 245,1077.6622 50,0 0,-2.4 c -5.9994,0.018 -9.25,-4.2 -9.25,-4.2 l -40.75,0 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path5357" - d="m 202.8,1054.7622 0,18.6 20.5,0 0,-18.6 z" - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="sccsccs" - inkscape:connector-curvature="0" - id="path5359" - d="m 193.25,1060.5622 c 0,-3.0652 2.48483,-5.8 5.55,-5.8 l 28.5,0 c 3.06517,0 5.55,2.7348 5.55,5.8 0,3.0652 -2.48482,5.8 -5.55,5.8 l -28.5,0 c -3.06518,0 -5.55,-2.7348 -5.55,-5.8 z" - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 198.8,1052.7622 0,2 28.5,0 0,-2 z" - id="path5361" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - </g> - <g - transform="translate(-14.1607,-2.03569)" - id="g5102-1"> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 306,1052.3622 0,31 -2,3 -50,0 -2,-3 0,-31 z" - id="path5104-2" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - <circle - style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="circle5106-9" - cx="279.25" - cy="1079.1122" - r="20" /> - <path - sodipodi:nodetypes="cccccc" - inkscape:connector-curvature="0" - id="path5108-5" - d="m 174,1052.3622 0,31 -2,3 -50,0 -2,-3 0,-31 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <circle - r="20" - cy="1079.1122" - cx="147.25" - id="circle5110-9" - style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - sodipodi:nodetypes="cccccccccccc" - inkscape:connector-curvature="0" - id="path5112-3" - d="m 131.5,1074.8622 0,-8.5 -1,0 0,-10 -1.5,0 0,-2 9.5,0 0,2 -4,0 0,10 -1,0 0,8.5 z" - style="fill:#333333;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 141.5,1066.0622 0,5 13.5,0 0,-5 z" - id="path5114-2" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" /> - <path - sodipodi:nodetypes="cccc" - inkscape:connector-curvature="0" - id="path5116-0" - d="m 271.5,1066.0622 0,5 13.5,0 0,-5 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 250,1066.8622 c 0,0 -3.79465,0.098 -5,2.5 l 0,18 -61.5,0 -2.5,-3 0,-15 -2.89748,-2.5 -38.60252,0 -1,-1.5 0,-11 44.5,0 c 2.81509,1.4723 5.83539,10.1218 5.83539,10.1218 2.76523,7.8485 8.16461,8.8782 8.16461,8.8782 l 33,0 c 4.86047,-2.0597 6.88077,-8.878 6.88077,-8.878 2.0203,-6.4399 6.11923,-10.122 6.11923,-10.122 l 44,0 0,12.5 z" - id="path5118-5" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccccccccccccc" /> - <path - style="fill:#333333;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 294,1074.8622 0,-8.5 1,0 0,-10 1.5,0 0,-2 -9.5,0 0,2 4,0 0,10 1,0 0,8.5 z" - id="path5120-3" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccccccc" /> - <path - sodipodi:nodetypes="cccccc" - inkscape:connector-curvature="0" - id="path5122-1" - d="m 181,1077.6622 -50.25,0 0,-2.4 c 5.9994,0.018 9.25,-4.2 9.25,-4.2 l 41,0 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 245,1077.6622 50,0 0,-2.4 c -5.9994,0.018 -9.25,-4.2 -9.25,-4.2 l -40.75,0 z" - id="path5124-0" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - <path - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 202.8,1054.7622 0,18.6 20.5,0 0,-18.6 z" - id="path5126-4" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 193.25,1060.5622 c 0,-3.0652 2.48483,-5.8 5.55,-5.8 l 28.5,0 c 3.06517,0 5.55,2.7348 5.55,5.8 0,3.0652 -2.48482,5.8 -5.55,5.8 l -28.5,0 c -3.06518,0 -5.55,-2.7348 -5.55,-5.8 z" - id="path5128-5" - inkscape:connector-curvature="0" - sodipodi:nodetypes="sccsccs" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path5130-9" - d="m 198.8,1052.7622 0,2 28.5,0 0,-2 z" - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - </g> - <path - sodipodi:nodetypes="ccccccccccccccccc" - inkscape:connector-curvature="0" - id="path8292" - d="m 130,910.3622 c -50.535717,0.53572 -55.178572,2.53572 -55.178572,2.53572 C 40.369833,921.80482 22.357,970.75506 22.357,970.75506 6.8212855,1012.8979 1.5,1031.3622 1.5,1031.3622 0.69447987,1033.2324 0,1040.998 0,1040.998 l 0,26.3642 c 4.3562828,-2.8782 18.119611,-5.6561 18.119611,-5.6561 C 72.099637,1054.3825 91,1054.3825 91,1054.3825 l 0,-2.0203 1073,0 0,-5 4,0 2,-38 0,-83 -9,0 c -0.2085,-14.41119 -13,-16 -13,-16 z" - style="fill:#f9f9f9;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - style="fill:#f9f9f9;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 18.119611,1061.7061 c 0,0 -13.7633282,2.7779 -18.119611,5.6561 l 0,-26.3642 c 0,0 0.69447987,-7.7656 1.5,-9.6358 0,0 5.3212855,-18.4643 20.857,-60.60714 0,0 18.012833,-48.95024 52.464428,-57.85714 0,0 4.642855,-2 55.178572,-2.53572 -2.40696,3.8717 -3.30357,8.25001 -3.30357,8.25001 l 0,5.08928 -3.19643,2.67857 0,5.80357 -3.5,4.17857 -32,0 0,103 -69.88,1 z" - id="path4137" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccccccccc" /> - <path - sodipodi:nodetypes="cccccccccccc" - inkscape:connector-curvature="0" - id="path5010" - d="m 123.5,926.38006 3.19643,-2.67857 0,-5.08928 c 0,0 0.89661,-4.37831 3.30357,-8.25001 -50.535717,0.53572 -55.178572,2.53572 -55.178572,2.53572 C 40.369833,921.80482 22.357,970.75506 22.357,970.75506 6.8212855,1012.8979 1.5,1031.3622 1.5,1031.3622 c 7.843911,1.0495 10.116755,0.039 10.116755,0.039 10.73287,-24.2437 15.657364,-38.13332 15.657364,-38.13332 11.99556,-36.74429 19.824243,-45.7094 19.824243,-45.7094 C 60.987959,927.8605 72.730983,926.3798 72.730983,926.3798 Z" - style="fill:#0044aa;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - sodipodi:nodetypes="cccccccc" - inkscape:connector-curvature="0" - id="path4994" - d="m 1170,1000.3622 -1050,0 c 0,0 -71.765216,-0.1491 -113.8973929,16.5 -3.2722857,9.8839 -4.6026071,14.5 -4.6026071,14.5 -0.80552013,1.8702 -1.5,9.6358 -1.5,9.6358 18.814091,-20.2031 64.397224,-27.4004 64.397224,-27.4004 C 93.312843,1007.7893 120,1007.3622 120,1007.3622 l 1050,0 z" - style="fill:#ff2a2a;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - sodipodi:nodetypes="csccccccc" - inkscape:connector-curvature="0" - id="path4139" - d="m 1.5,1031.3622 c 0,0 1.3303214,-4.6161 4.6026071,-14.5 3.2722857,-9.8839 8.4865359,-25.03572 16.2543929,-46.10714 0,0 18.012833,-48.95024 52.464428,-57.85714 0,0 4.642855,-2 55.178572,-2.53572 -1.20348,1.93585 -1.85062,3.65714 -2.55439,5.57689 L 77.276669,916.7392 C 32.020794,926.8609 17.317414,996.26359 5.6189736,1031.7804 Z" - style="fill:#ffff00;fill-rule:evenodd;stroke:#ffff00;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <rect - rx="5" - y="944.61218" - x="93.75" - height="95" - width="27" - id="rect4141" - style="opacity:1;fill:#f9f9f9;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4143" - width="19" - height="42" - x="97.75" - y="948.61218" - rx="5" /> - <path - style="display:inline;opacity:1;fill:#f9f9f9;fill-opacity:1;stroke:#000000;stroke-width:1.54177892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 240,934.3622 -80,0 0,105 80,0 z" - id="path4661" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4904" - d="m 232.58928,997.00506 c 0,0 -6.60714,-0.71428 -18.92857,-0.26785 0,0 -15.44643,-0.53572 -43.03571,5.89289 25.89286,-1.5179 39.91071,-3.39289 39.91071,-3.39289 15.625,-0.71429 22.05357,-2.23215 22.05357,-2.23215 z" - style="fill:#ffff00;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4906" - d="m 235.80357,1002.3622 c -8.57399,3.1368 -17.73385,2.5217 -27.23214,2.8571 0,0 -14.91072,1.0715 -25.53572,2.5 0,0 0,0.8036 7.14286,2.2322 0,0 -17.41071,0.9821 -25.625,4.9107 14.01786,0.9821 41.96429,-3.3929 41.96429,-3.3929 20.53571,-3.8392 29.28571,-9.1071 29.28571,-9.1071 z" - style="fill:#000055;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#000055;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 232.94643,1012.2729 c 0,0 -10.71429,1.875 -22.41072,2.8571 0,0 -20.44642,3.4822 -43.39285,9.8215 25,-1.5179 39.91071,-5.8036 39.91071,-5.8036 17.32143,-2.2322 25.89286,-6.875 25.89286,-6.875 z" - id="path4908" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - inkscape:connector-curvature="0" - id="path4910" - d="m 208.39286,1022.9872 c 0,0 -8.48215,-0.7143 -23.66072,3.3929 0,0 -16.25,4.1964 -20.17857,7.5 6.96429,-0.8036 19.10714,-3.2143 19.10714,-3.2143 18.30357,-4.0179 24.73215,-7.6786 24.73215,-7.6786 z" - style="fill:#ff2a2a;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - id="rect4657" - d="m 184.62087,948.11255 -11.24175,0 c -2.51127,0 -4.53297,2.0217 -4.53297,4.53297 l 0,33.24176 c 0,2.51126 2.0217,4.53297 4.53297,4.53297 l 11.24175,0 c 2.51127,0 4.53297,-2.02171 4.53297,-4.53297 l 0,-33.24176 c 0,-2.51127 -2.0217,-4.53297 -4.53297,-4.53297 z" - style="display:inline;opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#696969;stroke-width:1.69230771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccccccc" - inkscape:connector-curvature="0" - id="path4914" - d="m 170.71428,1035.3086 c 36.60715,-4.0178 59.01786,-6.25 59.01786,-6.25 2.76786,-0.3571 3.48214,-0.089 3.48214,-0.089 -4.19642,3.4819 -15.44642,7.4105 -15.44642,7.4105 -6.42858,1.5625 -14.19643,0.1785 -14.19643,0.1785 14.19643,-1.5179 24.73214,-5.5803 24.73214,-5.5803 -29.28572,4.0178 -57.58929,4.3303 -57.58929,4.3303 z" - style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - inkscape:connector-curvature="0" - id="path4912" - d="m 196.33928,1029.3265 c 28.48215,-10.2679 37.32143,-10.0893 37.32143,-10.0893 0,0 -9.19643,6.9643 -37.32143,10.0893 z" - style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path4659" - d="m 199.21505,933.92127 -0.27531,105.00043" - style="display:inline;fill:none;fill-rule:evenodd;stroke:#696969;stroke-width:3.08355784;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="sssssssss" - inkscape:connector-curvature="0" - id="rect4896" - d="m 226.62089,948.11255 -11.24176,0 c -2.51126,0 -4.53298,2.0217 -4.53298,4.53297 l 0,33.24176 c 0,2.51126 2.02172,4.53297 4.53298,4.53297 l 11.24176,0 c 2.51125,0 4.53296,-2.02171 4.53296,-4.53297 l 0,-33.24176 c 0,-2.51127 -2.02171,-4.53297 -4.53296,-4.53297 z" - style="display:inline;opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#696969;stroke-width:1.69230771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - y="1041.2505" - x="160.10918" - height="6" - width="80" - id="rect4898" - style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4902" - d="m 240,934.3622 -80,0 0,105 80,0 z" - style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.54177892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <g - transform="translate(395.77089,0)" - id="g4930"> - <path - style="display:inline;opacity:1;fill:#f9f9f9;fill-opacity:1;stroke:#000000;stroke-width:1.54177892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 240,934.3622 -80,0 0,105 80,0 z" - id="path4932" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4934" - d="m 232.58928,997.00506 c 0,0 -6.60714,-0.71428 -18.92857,-0.26785 0,0 -15.44643,-0.53572 -43.03571,5.89289 25.89286,-1.5179 39.91071,-3.39289 39.91071,-3.39289 15.625,-0.71429 22.05357,-2.23215 22.05357,-2.23215 z" - style="fill:#ffff00;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4936" - d="m 235.80357,1002.3622 c -8.57399,3.1368 -17.73385,2.5217 -27.23214,2.8571 0,0 -14.91072,1.0715 -25.53572,2.5 0,0 0,0.8036 7.14286,2.2322 0,0 -17.41071,0.9821 -25.625,4.9107 14.01786,0.9821 41.96429,-3.3929 41.96429,-3.3929 20.53571,-3.8392 29.28571,-9.1071 29.28571,-9.1071 z" - style="fill:#000055;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#000055;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 232.94643,1012.2729 c 0,0 -10.71429,1.875 -22.41072,2.8571 0,0 -20.44642,3.4822 -43.39285,9.8215 25,-1.5179 39.91071,-5.8036 39.91071,-5.8036 17.32143,-2.2322 25.89286,-6.875 25.89286,-6.875 z" - id="path4938" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - inkscape:connector-curvature="0" - id="path4940" - d="m 208.39286,1022.9872 c 0,0 -8.48215,-0.7143 -23.66072,3.3929 0,0 -16.25,4.1964 -20.17857,7.5 6.96429,-0.8036 19.10714,-3.2143 19.10714,-3.2143 18.30357,-4.0179 24.73215,-7.6786 24.73215,-7.6786 z" - style="fill:#ff2a2a;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - inkscape:connector-curvature="0" - id="path4942" - d="m -184.62087,948.11255 11.24175,0 c 2.51127,0 4.53297,2.0217 4.53297,4.53297 l 0,33.24176 c 0,2.51126 -2.0217,4.53297 -4.53297,4.53297 l -11.24175,0 c -2.51127,0 -4.53297,-2.02171 -4.53297,-4.53297 l 0,-33.24176 c 0,-2.51127 2.0217,-4.53297 4.53297,-4.53297 z" - style="display:inline;opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#696969;stroke-width:1.69230771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - transform="scale(-1,1)" /> - <path - sodipodi:nodetypes="ccccccc" - inkscape:connector-curvature="0" - id="path4944" - d="m 170.71428,1035.3086 c 36.60715,-4.0178 59.01786,-6.25 59.01786,-6.25 2.76786,-0.3571 3.48214,-0.089 3.48214,-0.089 -4.19642,3.4819 -15.44642,7.4105 -15.44642,7.4105 -6.42858,1.5625 -14.19643,0.1785 -14.19643,0.1785 14.19643,-1.5179 24.73214,-5.5803 24.73214,-5.5803 -29.28572,4.0178 -57.58929,4.3303 -57.58929,4.3303 z" - style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - inkscape:connector-curvature="0" - id="path4946" - d="m 196.33928,1029.3265 c 28.48215,-10.2679 37.32143,-10.0893 37.32143,-10.0893 0,0 -9.19643,6.9643 -37.32143,10.0893 z" - style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path4948" - d="m 199.21505,933.92127 -0.27531,105.00043" - style="display:inline;fill:none;fill-rule:evenodd;stroke:#696969;stroke-width:3.08355784;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - sodipodi:nodetypes="sssssssss" - inkscape:connector-curvature="0" - id="path4950" - d="m 226.62089,948.11255 -11.24176,0 c -2.51126,0 -4.53298,2.0217 -4.53298,4.53297 l 0,33.24176 c 0,2.51126 2.02172,4.53297 4.53298,4.53297 l 11.24176,0 c 2.51125,0 4.53296,-2.02171 4.53296,-4.53297 l 0,-33.24176 c 0,-2.51127 -2.02171,-4.53297 -4.53296,-4.53297 z" - style="display:inline;opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#696969;stroke-width:1.69230771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - y="1041.2505" - x="160.10918" - height="6" - width="80" - id="rect4952" - style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4954" - d="m 240,934.3622 -80,0 0,105 80,0 z" - style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.54177892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - </g> - <g - id="g4956" - transform="translate(794.77089,0)"> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4958" - d="m 240,934.3622 -80,0 0,105 80,0 z" - style="display:inline;opacity:1;fill:#f9f9f9;fill-opacity:1;stroke:#000000;stroke-width:1.54177892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - style="fill:#ffff00;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 232.58928,997.00506 c 0,0 -6.60714,-0.71428 -18.92857,-0.26785 0,0 -15.44643,-0.53572 -43.03571,5.89289 25.89286,-1.5179 39.91071,-3.39289 39.91071,-3.39289 15.625,-0.71429 22.05357,-2.23215 22.05357,-2.23215 z" - id="path4960" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - style="fill:#000055;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 235.80357,1002.3622 c -8.57399,3.1368 -17.73385,2.5217 -27.23214,2.8571 0,0 -14.91072,1.0715 -25.53572,2.5 0,0 0,0.8036 7.14286,2.2322 0,0 -17.41071,0.9821 -25.625,4.9107 14.01786,0.9821 41.96429,-3.3929 41.96429,-3.3929 20.53571,-3.8392 29.28571,-9.1071 29.28571,-9.1071 z" - id="path4962" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4964" - d="m 232.94643,1012.2729 c 0,0 -10.71429,1.875 -22.41072,2.8571 0,0 -20.44642,3.4822 -43.39285,9.8215 25,-1.5179 39.91071,-5.8036 39.91071,-5.8036 17.32143,-2.2322 25.89286,-6.875 25.89286,-6.875 z" - style="fill:#000055;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - style="fill:#ff2a2a;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 208.39286,1022.9872 c 0,0 -8.48215,-0.7143 -23.66072,3.3929 0,0 -16.25,4.1964 -20.17857,7.5 6.96429,-0.8036 19.10714,-3.2143 19.10714,-3.2143 18.30357,-4.0179 24.73215,-7.6786 24.73215,-7.6786 z" - id="path4966" - inkscape:connector-curvature="0" /> - <path - transform="scale(-1,1)" - style="display:inline;opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#696969;stroke-width:1.69230771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m -184.62087,948.11255 11.24175,0 c 2.51127,0 4.53297,2.0217 4.53297,4.53297 l 0,33.24176 c 0,2.51126 -2.0217,4.53297 -4.53297,4.53297 l -11.24175,0 c -2.51127,0 -4.53297,-2.02171 -4.53297,-4.53297 l 0,-33.24176 c 0,-2.51127 2.0217,-4.53297 4.53297,-4.53297 z" - id="path4968" - inkscape:connector-curvature="0" /> - <path - style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 170.71428,1035.3086 c 36.60715,-4.0178 59.01786,-6.25 59.01786,-6.25 2.76786,-0.3571 3.48214,-0.089 3.48214,-0.089 -4.19642,3.4819 -15.44642,7.4105 -15.44642,7.4105 -6.42858,1.5625 -14.19643,0.1785 -14.19643,0.1785 14.19643,-1.5179 24.73214,-5.5803 24.73214,-5.5803 -29.28572,4.0178 -57.58929,4.3303 -57.58929,4.3303 z" - id="path4970" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccc" /> - <path - style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 196.33928,1029.3265 c 28.48215,-10.2679 37.32143,-10.0893 37.32143,-10.0893 0,0 -9.19643,6.9643 -37.32143,10.0893 z" - id="path4972" - inkscape:connector-curvature="0" /> - <path - style="display:inline;fill:none;fill-rule:evenodd;stroke:#696969;stroke-width:3.08355784;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 199.21505,933.92127 -0.27531,105.00043" - id="path4974" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="display:inline;opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#696969;stroke-width:1.69230771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 226.62089,948.11255 -11.24176,0 c -2.51126,0 -4.53298,2.0217 -4.53298,4.53297 l 0,33.24176 c 0,2.51126 2.02172,4.53297 4.53298,4.53297 l 11.24176,0 c 2.51125,0 4.53296,-2.02171 4.53296,-4.53297 l 0,-33.24176 c 0,-2.51127 -2.02171,-4.53297 -4.53296,-4.53297 z" - id="path4976" - inkscape:connector-curvature="0" - sodipodi:nodetypes="sssssssss" /> - <rect - style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4978" - width="80" - height="6" - x="160.10918" - y="1041.2505" /> - <path - style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.54177892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 240,934.3622 -80,0 0,105 80,0 z" - id="path4980" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - </g> - <rect - rx="7" - y="953.61194" - x="283.75" - height="42" - width="87" - id="rect4982" - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4984" - width="87" - height="42" - x="420.75" - y="953.61194" - rx="7" /> - <rect - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4986" - width="87" - height="42" - x="685.75" - y="953.61194" - rx="7" /> - <rect - rx="7" - y="953.61194" - x="822.75" - height="42" - width="87" - id="rect4988" - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <rect - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="rect4992" - width="50" - height="42" - x="1062.75" - y="953.61194" - rx="7" /> - <path - sodipodi:nodetypes="cccc" - inkscape:connector-curvature="0" - id="path5008" - d="m 50,977.3622 25,0 0,-30 -10,10e-6 z" - style="fill:#1a1a1a;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <path - style="fill:#0044aa;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 1161,926.3622 c -0.2085,-14.41119 -13,-16 -13,-16 l -1018,0 c -2.40696,3.8717 -3.30357,8.25001 -3.30357,8.25001 l 0,5.08928 -3.19643,2.67857 z" - id="path5012" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - <rect - y="937.18365" - x="302.14285" - height="8" - width="52" - id="rect5016" - style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 420.00012,914.3622 0,-10 -5.00006,-4 -183.00006,0 -5,4 0,10 z" - id="path5020" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - <path - sodipodi:nodetypes="cccccccc" - inkscape:connector-curvature="0" - id="path5022" - d="m 275.25,907.3622 3e-5,7 12.06251,0 12.0625,0 24.12502,0 24.12501,0 12.06256,0 7e-5,-7 z" - style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - sodipodi:nodetypes="cccccc" - inkscape:connector-curvature="0" - id="path5026" - d="m 968.00012,914.3622 0,-10 -5.00006,-4 -183.00006,0 -5,4 0,10 z" - style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 823.25,907.3622 3e-5,7 12.06251,0 12.0625,0 24.12502,0 24.12501,0 12.06256,0 7e-5,-7 z" - id="path5028" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccc" /> - <path - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 109.76563,1052.3622 -18.76563,0 0,2.0203 c 0,0 -18.900363,0 -72.880389,7.3236 0,0 -13.7633282,2.7779 -18.119611,5.6561 4.8214285,10.8929 14.464286,10.8929 14.464286,10.8929 65.892856,3.2142 91.964284,1.9642 91.964284,1.9642 z" - id="path5030" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 130,910.3622 c -50.535717,0.53572 -55.178572,2.53572 -55.178572,2.53572 C 40.369833,921.80482 22.357,970.75506 22.357,970.75506 6.8212855,1012.8979 1.5,1031.3622 1.5,1031.3622 0.69447987,1033.2324 0,1040.998 0,1040.998 l 0,26.3642 c 4.3562828,-2.8782 18.119611,-5.6561 18.119611,-5.6561 C 72.099637,1054.3825 91,1054.3825 91,1054.3825 l 0,-2.0203 1073,0 0,-5 4,0 2,-38 0,-83 -9,0 c -0.2085,-14.41119 -13,-16 -13,-16 z" - id="path5032" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccccccccccc" /> - <rect - y="959.86224" - x="125" - height="75" - width="2.5" - id="rect5034" - style="opacity:1;fill:#999999;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 629.8393,1081.3265 0,-29 225,0 0,29 z" - id="path5392" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - sodipodi:nodetypes="ccccccccc" - inkscape:connector-curvature="0" - id="path5396" - d="m 403,1065.3622 0,7 -3,0 0,10 11,0 0,-10 -3,0 0,-7 z" - style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - </g> -</svg> diff --git a/test-apps/display-test-app/public/configuration.json b/test-apps/display-test-app/public/configuration.json index 7320a4a..cd37c13 100644 --- a/test-apps/display-test-app/public/configuration.json +++ b/test-apps/display-test-app/public/configuration.json @@ -1 +1 @@ -{"standalone":true,"iModelName":"d:\\bim\\bimium\\i3dmtest.bim ","enableDiagnostics":true} \ No newline at end of file +{"standalone":true,"iModelName":"d:\\temp\\testbim\\Office_Building_WhiteBG.ibim","enableDiagnostics":true} \ No newline at end of file diff --git a/test-apps/display-test-app/public/svgedit.svg b/test-apps/display-test-app/public/svgedit.svg new file mode 100644 index 0000000..a7efac2 --- /dev/null +++ b/test-apps/display-test-app/public/svgedit.svg @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <!-- Created with SVG-edit - https://github.com/SVG-Edit/svgedit--> + <defs> + <marker id="se_marker_start_svg_8" markerHeight="5" markerUnits="strokeWidth" markerWidth="5" orient="auto" refX="50" refY="50" viewBox="0 0 100 100"> + <path d="m100,50l-100,40l30,-40l-30,-40l100,40z" fill="#000000" id="svg_10" stroke="#000000" stroke-width="10"/> + </marker> + <marker id="se_marker_end_svg_8" markerHeight="5" markerUnits="strokeWidth" markerWidth="5" orient="auto" refX="50" refY="50" viewBox="0 0 100 100"> + <path d="m20,20l0,60l60,0l0,-60l-60,0z" fill="#000000" id="svg_11" stroke="#000000" stroke-width="10"/> + </marker> + <marker id="se_marker_start_svg_9" markerHeight="5" markerUnits="strokeWidth" markerWidth="5" orient="auto" refX="50" refY="50" viewBox="0 0 100 100"> + <path d="m100,50l-100,40l30,-40l-30,-40l100,40z" fill="#000000" id="svg_12" stroke="#000000" stroke-width="10"/> + </marker> + <marker id="se_marker_end_svg_9" markerHeight="5" markerUnits="strokeWidth" markerWidth="5" orient="auto" refX="50" refY="50" viewBox="0 0 100 100"> + <path d="m20,20l0,60l60,0l0,-60l-60,0z" fill="#000000" id="svg_13" stroke="#000000" stroke-width="10"/> + </marker> + </defs> + <g class="layer"> + <title>Layer 1 + + + + + + + + + + + \ No newline at end of file diff --git a/test-apps/display-test-app/src/backend/backend.ts b/test-apps/display-test-app/src/backend/backend.ts index 745e9fd..812f07a 100644 --- a/test-apps/display-test-app/src/backend/backend.ts +++ b/test-apps/display-test-app/src/backend/backend.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { IModelHost, IModelHostConfiguration } from "@bentley/imodeljs-backend"; import { Logger } from "@bentley/bentleyjs-core"; -import { IModelTileRpcInterface, StandaloneIModelRpcInterface, IModelReadRpcInterface } from "@bentley/imodeljs-common"; +import { IModelTileRpcInterface, StandaloneIModelRpcInterface, IModelReadRpcInterface, MobileRpcConfiguration } from "@bentley/imodeljs-common"; import * as fs from "fs"; import * as path from "path"; import { IModelJsConfig } from "@bentley/config-loader/lib/IModelJsConfig"; @@ -20,6 +20,9 @@ export function getRpcInterfaces() { } function setupStandaloneConfiguration() { + if (MobileRpcConfiguration.isMobileBackend) + return; + const filename = process.env.SVT_STANDALONE_FILENAME; if (filename !== undefined) { const configuration: any = {}; @@ -41,13 +44,15 @@ export function initializeBackend() { const hostConfig = new IModelHostConfiguration(); hostConfig.useTileContentThreadPool = true; - - // tslint:disable-next-line:no-var-requires - const configPathname = path.normalize(path.join(__dirname, "../webresources", "configuration.json")); - const svtConfig: SVTConfiguration = require(configPathname); - if (svtConfig.customOrchestratorUri) - hostConfig.imodelClient = new IModelBankClient(svtConfig.customOrchestratorUri, new UrlFileHandler()); - + if (MobileRpcConfiguration.isMobileBackend) { + // Does not seem SVTConfiguraiton is used anymore. + } else { + // tslint:disable-next-line:no-var-requires + const configPathname = path.normalize(path.join(__dirname, "../webresources", "configuration.json")); + const svtConfig: SVTConfiguration = require(configPathname); + if (svtConfig.customOrchestratorUri) + hostConfig.imodelClient = new IModelBankClient(svtConfig.customOrchestratorUri, new UrlFileHandler()); + } IModelHost.startup(hostConfig); Logger.initializeToConsole(); // configure logging for imodeljs-core diff --git a/test-apps/display-test-app/src/frontend/App.ts b/test-apps/display-test-app/src/frontend/App.ts index 4ba29e4..0726543 100644 --- a/test-apps/display-test-app/src/frontend/App.ts +++ b/test-apps/display-test-app/src/frontend/App.ts @@ -115,6 +115,8 @@ export class DisplayTestApp extends IModelApp { IModelApp.notifications = new Notifications(); IModelApp.tileAdmin = TileAdmin.create({ retryInterval: 50, + enableInstancing: false, // true, + elideEmptyChildContentRequests: true, }); const svtToolNamespace = IModelApp.i18n.registerNamespace("SVTTools"); diff --git a/test-apps/display-test-app/src/frontend/DebugPanel.ts b/test-apps/display-test-app/src/frontend/DebugPanel.ts index c306375..536ca6f 100644 --- a/test-apps/display-test-app/src/frontend/DebugPanel.ts +++ b/test-apps/display-test-app/src/frontend/DebugPanel.ts @@ -76,7 +76,9 @@ export class DebugPanel extends ToolBarDropDown { { name: "None", value: Tile.DebugBoundingBoxes.None }, { name: "Volume", value: Tile.DebugBoundingBoxes.Volume }, { name: "Content", value: Tile.DebugBoundingBoxes.Content }, - { name: "Both", value: Tile.DebugBoundingBoxes.Both }, + { name: "Volume and Content", value: Tile.DebugBoundingBoxes.Both }, + { name: "Children", value: Tile.DebugBoundingBoxes.ChildVolumes }, + { name: "Sphere", value: Tile.DebugBoundingBoxes.Sphere }, ], }); } diff --git a/test-apps/display-test-app/src/frontend/SimpleViewTest.ts b/test-apps/display-test-app/src/frontend/SimpleViewTest.ts index 48201b8..3bd2de7 100644 --- a/test-apps/display-test-app/src/frontend/SimpleViewTest.ts +++ b/test-apps/display-test-app/src/frontend/SimpleViewTest.ts @@ -28,7 +28,6 @@ import { showStatus } from "./Utils"; import { SVTConfiguration } from "../common/SVTConfiguration"; import { DisplayTestApp } from "./App"; import { Viewer } from "./Viewer"; -import { initializeCustomCloudEnv } from "./CustomCloudEnv"; const activeViewState: SimpleViewState = new SimpleViewState(); const configuration = {} as SVTConfiguration; @@ -36,19 +35,25 @@ const configuration = {} as SVTConfiguration; // Retrieves the configuration for starting SVT from configuration.json file located in the built public folder async function retrieveConfiguration(): Promise { return new Promise((resolve, _reject) => { - const request: XMLHttpRequest = new XMLHttpRequest(); - request.open("GET", "configuration.json", false); - request.setRequestHeader("Cache-Control", "no-cache"); - request.onreadystatechange = ((_event: Event) => { - if (request.readyState === XMLHttpRequest.DONE) { - if (request.status === 200) { - const newConfigurationInfo: any = JSON.parse(request.responseText); - Object.assign(configuration, newConfigurationInfo); - resolve(); + if (MobileRpcConfiguration.isMobileFrontend) { + const newConfigurationInfo = JSON.parse(window.localStorage.getItem("imodeljs:env")!); + Object.assign(configuration, newConfigurationInfo); + resolve(); + } else { + const request: XMLHttpRequest = new XMLHttpRequest(); + request.open("GET", "configuration.json", false); + request.setRequestHeader("Cache-Control", "no-cache"); + request.onreadystatechange = ((_event: Event) => { + if (request.readyState === XMLHttpRequest.DONE) { + if (request.status === 200) { + const newConfigurationInfo: any = JSON.parse(request.responseText); + Object.assign(configuration, newConfigurationInfo); + resolve(); + } } - } - }); - request.send(); + }); + request.send(); + } }); } @@ -91,15 +96,9 @@ async function initializeOidc(actx: ActivityLoggingContext) { async function main() { const actx = new ActivityLoggingContext(Guid.createValue()); actx.enter(); - - if (!MobileRpcConfiguration.isMobileFrontend) { - // retrieve, set, and output the global configuration variable - await retrieveConfiguration(); // (does a fetch) - console.log("Configuration", JSON.stringify(configuration)); // tslint:disable-line:no-console - if (configuration.customOrchestratorUri) - await initializeCustomCloudEnv(activeViewState, configuration.customOrchestratorUri); - } - + // retrieve, set, and output the global configuration variable + await retrieveConfiguration(); // (does a fetch) + console.log("Configuration", JSON.stringify(configuration)); // tslint:disable-line:no-console // Start the app. (This tries to fetch a number of localization json files from the origin.) DisplayTestApp.startup(); if (configuration.enableDiagnostics) @@ -110,7 +109,6 @@ async function main() { if (ElectronRpcConfiguration.isElectron) { rpcConfiguration = ElectronRpcManager.initializeClient({}, [IModelTileRpcInterface, StandaloneIModelRpcInterface, IModelReadRpcInterface]); } else if (MobileRpcConfiguration.isMobileFrontend) { - Object.assign(configuration, { standalone: true, iModelName: "sample_documents/04_Plant.i.ibim" }); rpcConfiguration = MobileRpcManager.initializeClient([IModelTileRpcInterface, StandaloneIModelRpcInterface, IModelReadRpcInterface]); } else { const uriPrefix = configuration.customOrchestratorUri || "http://localhost:3001"; @@ -137,15 +135,17 @@ async function main() { return; } - await initializeOidc(actx); - actx.enter(); + if (!MobileRpcConfiguration.isMobileFrontend) { + await initializeOidc(actx); + actx.enter(); - if (!activeViewState.accessToken) - OidcClientWrapper.oidcClient.signIn(actx); - else { - await openStandaloneIModel(activeViewState, configuration.iModelName!); - await uiReady; // Now, wait for the HTML UI to finish loading. - await initView(); + if (!activeViewState.accessToken) + OidcClientWrapper.oidcClient.signIn(actx); + else { + await openStandaloneIModel(activeViewState, configuration.iModelName!); + await uiReady; // Now, wait for the HTML UI to finish loading. + await initView(); + } } } catch (reason) { alert(reason); diff --git a/test-apps/display-test-app/src/frontend/StandardRotations.ts b/test-apps/display-test-app/src/frontend/StandardRotations.ts index 607f125..88b606b 100644 --- a/test-apps/display-test-app/src/frontend/StandardRotations.ts +++ b/test-apps/display-test-app/src/frontend/StandardRotations.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -import { IModelApp } from "@bentley/imodeljs-frontend"; +import { IModelApp, Viewport } from "@bentley/imodeljs-frontend"; import { ToolBarDropDown, createToolButton } from "./ToolBar"; // Indexed by StandardViewId enum @@ -12,10 +12,12 @@ const entries = ["top", "bottom", "left", "right", "front", "back", "isoleft", " export class StandardRotations extends ToolBarDropDown { private readonly _element: HTMLElement; private readonly _parent: HTMLElement; + private readonly _vp: Viewport; - public constructor(parent: HTMLElement) { + public constructor(parent: HTMLElement, vp: Viewport) { super(); this._parent = parent; + this._vp = vp; this._element = document.createElement("div"); this._element.className = "toolMenu"; @@ -46,7 +48,7 @@ export class StandardRotations extends ToolBarDropDown { protected _close() { this._element.style.display = "none"; } public get onViewChanged(): Promise { - this._parent.style.display = IModelApp.viewManager.selectedView!.view.allow3dManipulations() ? "block" : "none"; + this._parent.style.display = this._vp.view.allow3dManipulations() ? "block" : "none"; return Promise.resolve(); } } diff --git a/test-apps/display-test-app/src/frontend/TileStatisticsTracker.ts b/test-apps/display-test-app/src/frontend/TileStatisticsTracker.ts index ceef4d7..a39fe01 100644 --- a/test-apps/display-test-app/src/frontend/TileStatisticsTracker.ts +++ b/test-apps/display-test-app/src/frontend/TileStatisticsTracker.ts @@ -10,45 +10,36 @@ import { } from "@bentley/imodeljs-frontend"; import { createCheckBox } from "./CheckBox"; import { createNumericInput } from "./NumericInput"; +import { createButton } from "./Button"; -const enum StatIndex { - Active, - Pending, - Canceled, - Total, - Selected, - Ready, - Progress, - - COUNT, +type GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number; +interface StatEntry { + label: string; + getValue: GetStatValue; } -const statLabels = [ - "Active Requests", - "Pending Requests", - "Canceled", - "Total Requests", - "Selected Tiles", - "Ready Tiles", - "Progress", -]; - -type GetStat = (stats: TileAdmin.Statistics, vp: Viewport) => number; - -const getStat: GetStat[] = [ - (stats, _vp) => stats.numActiveRequests, - (stats, _vp) => stats.numPendingRequests, - (stats, _vp) => stats.numCanceled, - (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, - (_stats, vp) => vp.numSelectedTiles, - (_stats, vp) => vp.numReadyTiles, - (_stats, vp) => { +function computeProgress(vp: Viewport): number { const ready = vp.numReadyTiles; const requested = vp.numRequestedTiles; const total = ready + requested; const ratio = (total > 0) ? (ready / total) : 1.0; return Math.round(ratio * 100); - }, +} + +const statEntries: StatEntry[] = [ + { getValue: (stats, _vp) => stats.numActiveRequests, label: "Active" }, + { getValue: (stats, _vp) => stats.numPendingRequests, label: "Pending" }, + { getValue: (stats, _vp) => stats.numCanceled, label: "Canceled" }, + { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: "Total" }, + { getValue: (_stats, vp) => vp.numSelectedTiles, label: "Selected" }, + { getValue: (_stats, vp) => vp.numReadyTiles, label: "Ready" }, + { getValue: (_stats, vp) => computeProgress(vp), label: "Progress" }, + { getValue: (stats, _vp) => stats.totalCompletedRequests, label: "Completed" }, + { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: "Timed Out" }, + { getValue: (stats, _vp) => stats.totalFailedRequests, label: "Failed" }, + { getValue: (stats, _vp) => stats.totalEmptyTiles, label: "Empty" }, + { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: "Undisplayable" }, + { getValue: (stats, _vp) => stats.totalElidedTiles, label: "Elided" }, ]; export class StatsTracker { @@ -71,7 +62,7 @@ export class StatsTracker { this._div.style.display = "none"; this._div.style.textAlign = "right"; - for (let i = 0; i < StatIndex.COUNT; i++) { + for (let i = 0; i < statEntries.length; i++) { const div = document.createElement("div"); const elem = document.createElement("text"); this._statElements[i] = elem; @@ -79,6 +70,13 @@ export class StatsTracker { this._div.appendChild(div); } + createButton({ + parent: this._div, + value: "Reset", + tooltip: "Reset all cumulative statistics", + handler: () => this.reset(), + }); + parent.appendChild(this._div); } @@ -134,9 +132,15 @@ export class StatsTracker { private update(): void { const stats = IModelApp.tileAdmin.statistics; - for (let i = 0; i < StatIndex.COUNT; i++) { - const label = statLabels[i] + ": " + getStat[i](stats, this._vp); + for (let i = 0; i < statEntries.length; i++) { + const stat = statEntries[i]; + const label = stat.label + ": " + stat.getValue(stats, this._vp); this._statElements[i].innerText = label; } } + + private reset(): void { + IModelApp.tileAdmin.resetStatistics(); + this.update(); + } } diff --git a/test-apps/display-test-app/src/frontend/Viewer.ts b/test-apps/display-test-app/src/frontend/Viewer.ts index da86426..4daa66a 100644 --- a/test-apps/display-test-app/src/frontend/Viewer.ts +++ b/test-apps/display-test-app/src/frontend/Viewer.ts @@ -3,11 +3,10 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ import { Id64String, OpenMode } from "@bentley/bentleyjs-core"; -import { ElectronRpcConfiguration, MobileRpcConfiguration } from "@bentley/imodeljs-common"; +import { ElectronRpcConfiguration } from "@bentley/imodeljs-common"; import { imageBufferToPngDataUrl, IModelApp, IModelConnection, ScreenViewport, Viewport, ViewState, PluginAdmin } from "@bentley/imodeljs-frontend"; import { AnimationPanel } from "./AnimationPanel"; import { CategoryPicker } from "./CategoryPicker"; -import { createComboBox } from "./ComboBox"; import { DebugPanel } from "./DebugPanel"; import { IncidentMarkerDemo } from "./IncidentMarkerDemo"; import { ModelPicker } from "./ModelPicker"; @@ -153,37 +152,10 @@ export class Viewer { createDropDown: async (container: HTMLElement) => Promise.resolve(new DebugPanel(this.viewport, container)), }); - // iOS uses a combo box of predetermined iModels instead of a file picker. - if (MobileRpcConfiguration.isMobileFrontend) { - const cbx = createComboBox({ - id: "imodelList", - entries: [ - { name: "04_Plant.i.ibim'", value: "04_Plant" }, - { name: "almostopaque.ibim'", value: "almostopaque" }, - { name: "mesh_widget_piece.ibim'", value: "mesh_widget_piece" }, - { name: "PhotoRealisticRendering.ibim'", value: "PhotoRealisticRendering" }, - { name: "PSolidNewTransparent.ibim'", value: "PSolidNewTransparent" }, - { name: "rectangle.ibim'", value: "rectangle" }, - { name: "scattergories.ibim'", value: "scattergories" }, - { name: "SketchOnSurface.ibim'", value: "SketchOnSurface" }, - { name: "slabs.ibim'", value: "slabs" }, - { name: "small_building_2.ibim'", value: "small_building_2" }, - { name: "tr_blk.ibim'", value: "tr_blk" }, - ], - }); - - cbx.select.onchange = async (ev: any) => { - const iModelName = ev.target.selectedOptions["0"].value; - await this.resetIModel("sample_documents/" + iModelName); - }; - - this.toolBar.addItem(cbx.div); - } else { - this.toolBar.addItem(createToolButton({ - className: "bim-icon-briefcases", - click: () => { this.selectIModel(); }, // tslint:disable-line:no-floating-promises - })); - } + this.toolBar.addItem(createToolButton({ + className: "bim-icon-briefcases", + click: () => { this.selectIModel(); }, // tslint:disable-line:no-floating-promises + })); this._viewPicker = new ViewPicker(this.toolBar.element, this.views); this._viewPicker.onSelectedViewChanged.addListener(async (id) => this.changeView(id)); @@ -252,7 +224,7 @@ export class Viewer { this.toolBar.addDropDown({ className: "bim-icon-gyroscope", - createDropDown: async (container: HTMLElement) => Promise.resolve(new StandardRotations(container)), + createDropDown: async (container: HTMLElement) => Promise.resolve(new StandardRotations(container, this.viewport)), }); this.toolBar.addItem(createToolButton({ diff --git a/test-apps/display-test-app/src/frontend/index.html b/test-apps/display-test-app/src/frontend/index.html index fc604bc..575618d 100644 --- a/test-apps/display-test-app/src/frontend/index.html +++ b/test-apps/display-test-app/src/frontend/index.html @@ -23,7 +23,7 @@ - + @@ -52,4 +52,4 @@ - + \ No newline at end of file diff --git a/test-apps/export-obj/package.json b/test-apps/export-obj/package.json new file mode 100644 index 0000000..730b882 --- /dev/null +++ b/test-apps/export-obj/package.json @@ -0,0 +1,32 @@ +{ + "name": "export-obj", + "private": true, + "license": "MIT", + "description": "Example of exporting graphics from an iModel", + "scripts": { + "build": "npm run build-code && node ./node_modules/@bentley/build-tools/scripts/ignoreargs.js 1>&2", + "lint": "tslint -p . 1>&2", + "build-code": "tsc 1>&2", + "clean": "rimraf lib", + "test": "", + "docs": "", + "cover": "" + }, + "repository": {}, + "dependencies": { + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "yargs": "^12.0.0" + }, + "devDependencies": { + "@bentley/build-tools": "0.190.0", + "@types/node": "10.12.18", + "@types/yargs": "^12.0.5", + "rimraf": "^2.6.2", + "tslint": "^5.11.0", + "typescript": "~3.2.2" + } +} diff --git a/test-apps/export-obj/src/ExportObj.ts b/test-apps/export-obj/src/ExportObj.ts new file mode 100644 index 0000000..c1a2474 --- /dev/null +++ b/test-apps/export-obj/src/ExportObj.ts @@ -0,0 +1,102 @@ +/*--------------------------------------------------------------------------------------------- +| $Copyright: (c) 2019 Bentley Systems, Incorporated. All rights reserved. $ + *--------------------------------------------------------------------------------------------*/ +import { ExportGraphicsInfo, IModelHost, IModelDb, ECSqlStatement } from "@bentley/imodeljs-backend"; +import { OpenMode, DbResult, Id64Array } from "@bentley/bentleyjs-core"; +import { ColorDef } from "@bentley/imodeljs-common"; +import * as fs from "fs"; +import * as Yargs from "yargs"; +import * as path from "path"; + +function doExport(iModelName: string, objName: string, mtlName: string) { + IModelHost.startup(); + + const iModel: IModelDb = IModelDb.openStandalone(iModelName, OpenMode.Readonly); + process.stdout.write(`Opened ${iModelName} successfully.\n`); + + const objFile = fs.openSync(objName, "w"); + const mtlFile = fs.openSync(mtlName, "w"); + process.stdout.write(`Writing to ${objName} and ${mtlName}.\n`); + + const elementIdArray: Id64Array = []; + iModel.withPreparedStatement("SELECT ECInstanceId FROM bis.GeometricElement3d", (stmt: ECSqlStatement) => { + while (stmt.step() === DbResult.BE_SQLITE_ROW) { + elementIdArray.push(stmt.getValue(0).getId()); + } + }); + + process.stdout.write(`Processing ${elementIdArray.length} elements...\n`); + if (elementIdArray.length === 0) + return; + + const materialMap = new Map(); + let pointOffset = 1; + + const onGraphics = (info: ExportGraphicsInfo) => { + let materialName = materialMap.get(info.color); + if (materialName === undefined) { + materialName = `Material${materialMap.size}`; + materialMap.set(info.color, materialName); + } + fs.appendFileSync(objFile, `usemtl ${materialName}\n`); + + fs.appendFileSync(objFile, `g ${info.elementId}\n`); + + const p: Float64Array = info.mesh.points; + for (let i = 0; i < p.length; i += 3) + fs.appendFileSync(objFile, `v ${p[i].toFixed(3)} ${p[i + 1].toFixed(3)} ${p[i + 2].toFixed(3)}\n`); + + const n: Float32Array = info.mesh.normals; + for (let i = 0; i < n.length; i += 3) + fs.appendFileSync(objFile, `vn ${n[i].toFixed(3)} ${n[i + 1].toFixed(3)} ${n[i + 2].toFixed(3)}\n`); + + const uv: Float32Array = info.mesh.params; + for (let i = 0; i < uv.length; i += 2) + fs.appendFileSync(objFile, `vt ${uv[i].toFixed(3)} ${uv[i + 1].toFixed(3)}\n`); + + const indices = info.mesh.indices; + for (let i = 0; i < indices.length; i += 3) { + const p1 = pointOffset + indices[i]; + const p2 = pointOffset + indices[i + 1]; + const p3 = pointOffset + indices[i + 2]; + fs.appendFileSync(objFile, `f ${p1}/${p1}/${p1} ${p2}/${p2}/${p2} ${p3}/${p3}/${p3}\n`); + } + + pointOffset += info.mesh.points.length / 3; + + return true; + }; + + fs.appendFileSync(objFile, `mtllib ${mtlName}\n`); + iModel.exportGraphics(({ onGraphics, elementIdArray, chordTol: 0.01 })); + process.stdout.write(`Wrote ${pointOffset} vertices.\n`); + fs.closeSync(objFile); + + materialMap.forEach((materialName: string, color: number) => { + fs.appendFileSync(mtlFile, `newmtl ${materialName}\n`); + const rawColors = new ColorDef(color).colors; + fs.appendFileSync(mtlFile, `Kd ${(rawColors.r / 255).toFixed(2)} ${(rawColors.g / 255).toFixed(2)} ${(rawColors.b / 255).toFixed(2)}\n`); + if (rawColors.t !== 0) + fs.appendFileSync(mtlFile, `Tr ${(rawColors.t / 255).toFixed(2)}\n`); + }); + fs.closeSync(mtlFile); +} + +interface ExportObjArgs { + input: string; + output: string; +} + +try { + Yargs.usage("Export an OBJ from an existing IBIM file."); + Yargs.required("input", "The input IBIM"); + Yargs.required("output", "The output OBJ file"); + const args = Yargs.parse() as Yargs.Arguments; + + const parsedOutput = path.parse(args.output); + const mtlName = path.join(parsedOutput.dir, `${parsedOutput.name}.mtllib`); + + doExport(args.input, args.output, mtlName); +} catch (error) { + process.stdout.write(error.message + "\n" + error.stack); +} diff --git a/test-apps/export-obj/tsconfig.json b/test-apps/export-obj/tsconfig.json new file mode 100644 index 0000000..4f3153e --- /dev/null +++ b/test-apps/export-obj/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "./node_modules/@bentley/build-tools/tsconfig-base.json", + "compilerOptions": { + "skipLibCheck": true, + "outDir": "./lib", + "baseUrl": "./node_modules/", + "types": [] + }, + "include": [ + "./src/**/*.ts" + ], +} \ No newline at end of file diff --git a/test-apps/export-obj/tslint.json b/test-apps/export-obj/tslint.json new file mode 100644 index 0000000..06d0a42 --- /dev/null +++ b/test-apps/export-obj/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "@bentley/build-tools/tslint.json" +} \ No newline at end of file diff --git a/test-apps/imodel-from-geojson/package.json b/test-apps/imodel-from-geojson/package.json index b2721d5..e744803 100644 --- a/test-apps/imodel-from-geojson/package.json +++ b/test-apps/imodel-from-geojson/package.json @@ -13,16 +13,16 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", "fs-extra": "^6.0.1", "yargs": "^12.0.0" }, "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@types/fs-extra": "^4.0.7", "@types/lodash": "^4.14.0", "@types/node": "10.12.18", diff --git a/test-apps/imodel-from-reality-model/package.json b/test-apps/imodel-from-reality-model/package.json index fb5a03d..4881491 100644 --- a/test-apps/imodel-from-reality-model/package.json +++ b/test-apps/imodel-from-reality-model/package.json @@ -13,18 +13,18 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", "fs-extra": "^6.0.1", "request-promise-native": "^1.0.5", "request": "^2.88.0", "yargs": "^12.0.0" }, "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@types/fs-extra": "^4.0.7", "@types/lodash": "^4.14.0", "@types/node": "10.12.18", diff --git a/test-apps/presentation-integration-tests/package.json b/test-apps/presentation-integration-tests/package.json index b9ea5c5..eb8af08 100644 --- a/test-apps/presentation-integration-tests/package.json +++ b/test-apps/presentation-integration-tests/package.json @@ -19,21 +19,21 @@ "cover": "npm test" }, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-backend": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/presentation-components": "0.189.0", - "@bentley/presentation-testing": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0", - "@bentley/ui-framework": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-backend": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/presentation-components": "0.190.0", + "@bentley/presentation-testing": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0", + "@bentley/ui-framework": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", @@ -58,8 +58,8 @@ "xmlhttprequest": "^1.8.0" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", "cache-require-paths": "^0.3.0", "cross-env": "^5.1.4", "ignore-styles": "^5.0.1", diff --git a/test-apps/presentation-integration-tests/src/frontend/NodePaths.test.snap b/test-apps/presentation-integration-tests/src/frontend/NodePaths.test.snap deleted file mode 100644 index 2c979ff..0000000 --- a/test-apps/presentation-integration-tests/src/frontend/NodePaths.test.snap +++ /dev/null @@ -1,303 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NodesPaths gets filtered node paths 1`] = ` -Array [ - Object { - "children": Array [ - Object { - "children": Array [], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 1, - }, - "index": 0, - "isMarked": false, - "node": Object { - "description": "description", - "imageId": "imageId", - "key": Object { - "pathFromRoot": Array [ - "d849e52eb605991e839a5e6aa299a4b9", - "aa959b85dd4402b50d79c57d8a6f5215", - ], - "type": "nodeType", - }, - "label": "filter ch1", - }, - }, - Object { - "children": Array [ - Object { - "children": Array [], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 1, - }, - "index": 0, - "isMarked": false, - "node": Object { - "description": "description", - "imageId": "imageId", - "key": Object { - "pathFromRoot": Array [ - "d849e52eb605991e839a5e6aa299a4b9", - "79f473dd6d221d37d0928acdc2cb5b3c", - "d7abfd31da4a1dc5cc4d0307f8aa1a8e", - ], - "type": "nodeType", - }, - "label": "filter ch4", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 1, - "occurances": 0, - }, - "index": 1, - "isMarked": false, - "node": Object { - "description": "description", - "hasChildren": true, - "imageId": "imageId", - "key": Object { - "pathFromRoot": Array [ - "d849e52eb605991e839a5e6aa299a4b9", - "79f473dd6d221d37d0928acdc2cb5b3c", - ], - "type": "nodeType", - }, - "label": "other ch3", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 2, - "occurances": 1, - }, - "index": 0, - "isMarked": false, - "node": Object { - "description": "description", - "hasChildren": true, - "imageId": "imageId", - "key": Object { - "pathFromRoot": Array [ - "d849e52eb605991e839a5e6aa299a4b9", - ], - "type": "nodeType", - }, - "label": "filter r1", - }, - }, - Object { - "children": Array [ - Object { - "children": Array [], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 1, - }, - "index": 0, - "isMarked": false, - "node": Object { - "description": "description", - "imageId": "imageId", - "key": Object { - "pathFromRoot": Array [ - "6da3c696f564a4aa1c913cdfb7774b51", - "239b0de6eee1bbd89d6eb4c8affcc76f", - ], - "type": "nodeType", - }, - "label": "filter ch6", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 1, - "occurances": 0, - }, - "index": 1, - "isMarked": false, - "node": Object { - "description": "description", - "hasChildren": true, - "imageId": "imageId", - "key": Object { - "pathFromRoot": Array [ - "6da3c696f564a4aa1c913cdfb7774b51", - ], - "type": "nodeType", - }, - "label": "other r3", - }, - }, -] -`; - -exports[`NodesPaths gets node paths 1`] = ` -Array [ - Object { - "children": Array [ - Object { - "children": Array [ - Object { - "children": Array [ - Object { - "children": Array [], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 0, - }, - "index": 0, - "isMarked": false, - "node": Object { - "imageId": "ECInstanceImage://BisCore:DefinitionPartition", - "key": Object { - "instanceKey": Object { - "className": "BisCore:DefinitionPartition", - "id": "0x10", - }, - "pathFromRoot": Array [ - "4e074cc7a6fd65b2a738d22f8b912299", - "7f68095dd510724c73d10956820f7921", - "bd4972ffb7cd9bc2e1493436df5c921b", - "5ae7367cae801dda838b167a98c08320", - "f58b45a0b1dcc1005d366672a876535f", - ], - "type": "ECInstanceNode", - }, - "label": "Definition Partition-0-G", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 0, - }, - "index": 0, - "isMarked": false, - "node": Object { - "description": "A Definition Partition element indicates that there is a definition-related modeling perspective within the overall DgnDb information hierarchy. A Definition Partition is always parented to a Subject and broken down by a Definition Model.", - "hasChildren": true, - "imageId": "ECClassImage://BisCore:DefinitionPartition", - "key": Object { - "className": "BisCore:DefinitionPartition", - "groupedInstancesCount": 1, - "pathFromRoot": Array [ - "4e074cc7a6fd65b2a738d22f8b912299", - "7f68095dd510724c73d10956820f7921", - "bd4972ffb7cd9bc2e1493436df5c921b", - "5ae7367cae801dda838b167a98c08320", - ], - "type": "ECClassGroupingNode", - }, - "label": "Definition Partition", - }, - }, - Object { - "children": Array [ - Object { - "children": Array [], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 0, - }, - "index": 0, - "isMarked": true, - "node": Object { - "imageId": "ECInstanceImage://BisCore:LinkPartition", - "key": Object { - "instanceKey": Object { - "className": "BisCore:LinkPartition", - "id": "0xe", - }, - "pathFromRoot": Array [ - "4e074cc7a6fd65b2a738d22f8b912299", - "7f68095dd510724c73d10956820f7921", - "bd4972ffb7cd9bc2e1493436df5c921b", - "ab9d6344c1e60c3a68b8dea279224873", - "2befd7b22098b671c658a3d15b904677", - ], - "type": "ECInstanceNode", - }, - "label": "Link Partition-0-E", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 0, - }, - "index": 1, - "isMarked": false, - "node": Object { - "description": "A Link Partition element indicates that there is a link-related modeling perspective within the overall DgnDb information hierarchy. A Link Partition is always parented to a Subject and broken down by a Link Model.", - "hasChildren": true, - "imageId": "ECClassImage://BisCore:LinkPartition", - "key": Object { - "className": "BisCore:LinkPartition", - "groupedInstancesCount": 1, - "pathFromRoot": Array [ - "4e074cc7a6fd65b2a738d22f8b912299", - "7f68095dd510724c73d10956820f7921", - "bd4972ffb7cd9bc2e1493436df5c921b", - "ab9d6344c1e60c3a68b8dea279224873", - ], - "type": "ECClassGroupingNode", - }, - "label": "Link Partition", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 0, - }, - "index": 0, - "isMarked": false, - "node": Object { - "hasChildren": true, - "imageId": "ECInstanceImage://BisCore:Subject", - "key": Object { - "instanceKey": Object { - "className": "BisCore:Subject", - "id": "0x1", - }, - "pathFromRoot": Array [ - "4e074cc7a6fd65b2a738d22f8b912299", - "7f68095dd510724c73d10956820f7921", - "bd4972ffb7cd9bc2e1493436df5c921b", - ], - "type": "ECInstanceNode", - }, - "label": "Subject-0-1", - }, - }, - ], - "filteringData": Object { - "childrenOccurances": 0, - "occurances": 0, - }, - "index": 0, - "isMarked": false, - "node": Object { - "hasChildren": true, - "imageId": "ECInstanceImage://BisCore:RepositoryModel", - "key": Object { - "instanceKey": Object { - "className": "BisCore:RepositoryModel", - "id": "0x1", - }, - "pathFromRoot": Array [ - "4e074cc7a6fd65b2a738d22f8b912299", - "7f68095dd510724c73d10956820f7921", - ], - "type": "ECInstanceNode", - }, - "label": "Repository Model-0-1", - }, - }, -] -`; diff --git a/test-apps/presentation-integration-tests/src/frontend/RulesetTesting.test.snap b/test-apps/presentation-integration-tests/src/frontend/RulesetTesting.test.snap index 602985b..cd10ce7 100644 --- a/test-apps/presentation-integration-tests/src/frontend/RulesetTesting.test.snap +++ b/test-apps/presentation-integration-tests/src/frontend/RulesetTesting.test.snap @@ -15,211 +15,279 @@ Array [ Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Physical Object-0-38", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Physical Object-0-39", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "TestClass", }, ], "description": "The Spatial Category used to categorize the 3D Geometric Element", "hasChildren": true, + "icon": "ECPropertyImage://BisCore:GeometricElement3d--Category", "label": "Uncategorized", }, ], "hasChildren": true, + "icon": "ECLiteralImage://ELEMENT", "label": "Properties_60InstancesWithUrl2", }, ], "hasChildren": true, + "icon": "ECLiteralImage://ELEMENT", "label": "Properties_60InstancesWithUrl2", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Converted Drawings", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Converted Groups", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Converted Sheets", }, Object { @@ -227,37 +295,47 @@ Array [ Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 2", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 3", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 4", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Illustration", }, ], "hasChildren": true, + "icon": "ECClassImage://BisCore:DisplayStyle3d", "label": "3D Display Style", }, Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 1", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 2", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 3", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 4", }, ], "hasChildren": true, + "icon": "ECClassImage://BisCore:CategorySelector", "label": "Category Selector", }, Object { @@ -265,51 +343,64 @@ Array [ Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Uncategorized", }, ], "hasChildren": true, + "icon": "ECLiteralImage://CATEGORY", "label": "Uncategorized", }, ], "hasChildren": true, + "icon": "ECClassImage://BisCore:DrawingCategory", "label": "Drawing Category", }, Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 1", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 2", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 3", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 4", }, ], "hasChildren": true, + "icon": "ECClassImage://BisCore:ModelSelector", "label": "Model Selector", }, Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 1", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 2", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 3", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Default - View 4", }, ], "description": "A spatial coordinate system.", "hasChildren": true, + "icon": "ECClassImage://BisCore:AuxCoordSystemSpatial", "label": "Spatial Auxiliary Coordinate System", }, Object { @@ -317,41 +408,51 @@ Array [ Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "Uncategorized", }, ], "hasChildren": true, + "icon": "ECLiteralImage://CATEGORY", "label": "Uncategorized", }, ], "hasChildren": true, + "icon": "ECClassImage://BisCore:SpatialCategory", "label": "Spatial Category", }, Object { "children": Array [ Object { + "icon": "ECLiteralImage://VIEWDEF_3D", "label": "Default - View 1", }, Object { + "icon": "ECLiteralImage://VIEWDEF_3D", "label": "Default - View 2", }, Object { + "icon": "ECLiteralImage://VIEWDEF_3D", "label": "Default - View 3", }, Object { + "icon": "ECLiteralImage://VIEWDEF_3D", "label": "Default - View 4", }, ], "description": "A view of a spatially located volume.", "hasChildren": true, + "icon": "ECClassImage://BisCore:SpatialViewDefinition", "label": "Spatial View Definition", }, ], "hasChildren": true, + "icon": "ECLiteralImage://ELEMENT", "label": "Definition Model For DgnV8Bridge:D:\\\\Temp\\\\Properties_60InstancesWithUrl2.dgn, Default", }, ], "hasChildren": true, + "icon": "ECLiteralImage://ELEMENT", "label": "DgnV8Bridge:D:\\\\Temp\\\\Properties_60InstancesWithUrl2.dgn, Default", }, Object { @@ -359,44 +460,56 @@ Array [ Object { "children": Array [ Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc1", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc2", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc3", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc4", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc5", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc6", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "lc7", }, ], "hasChildren": true, + "icon": "ECClassImage://BisCore:LineStyle", "label": "Line Style", }, ], "hasChildren": true, + "icon": "ECLiteralImage://ELEMENT", "label": "BisCore.DictionaryModel", }, Object { + "icon": "ECLiteralImage://ELEMENT", "label": "BisCore.RealityDataSources", }, ], "hasChildren": true, + "icon": "ECLiteralImage://ELEMENT", "label": "DgnV8Bridge", }, ], "description": "test nested value", "hasChildren": true, + "icon": "subjects", "label": "test value", }, ] diff --git a/test-apps/presentation-integration-tests/src/frontend/providers/TreeDataProvider.test.snap b/test-apps/presentation-integration-tests/src/frontend/providers/TreeDataProvider.test.snap index 00525d4..9e19aec 100644 --- a/test-apps/presentation-integration-tests/src/frontend/providers/TreeDataProvider.test.snap +++ b/test-apps/presentation-integration-tests/src/frontend/providers/TreeDataProvider.test.snap @@ -13,6 +13,7 @@ Array [ "type": "child", }, }, + "icon": "child image id", "id": "8ca7a2f0af9eb677d127a4d2d299bc9b/64e31cdc690e6d628b36f761e4074754", "label": "child label", "parentId": "64e31cdc690e6d628b36f761e4074754", @@ -33,6 +34,7 @@ Array [ "type": "child", }, }, + "icon": "child image id", "id": "8ca7a2f0af9eb677d127a4d2d299bc9b/64e31cdc690e6d628b36f761e4074754", "label": "child label", "parentId": "64e31cdc690e6d628b36f761e4074754", @@ -54,6 +56,7 @@ Array [ }, }, "hasChildren": true, + "icon": "root image id", "id": "64e31cdc690e6d628b36f761e4074754", "isCheckboxDisabled": true, "isCheckboxVisible": true, @@ -84,6 +87,7 @@ Array [ }, }, "hasChildren": true, + "icon": "root image id", "id": "64e31cdc690e6d628b36f761e4074754", "isCheckboxDisabled": true, "isCheckboxVisible": true, diff --git a/test-apps/presentation-test-app/assets/presentation_rules/Models.PresentationRuleSet.json b/test-apps/presentation-test-app/assets/presentation_rules/Models.PresentationRuleSet.json new file mode 100644 index 0000000..f4bffc5 --- /dev/null +++ b/test-apps/presentation-test-app/assets/presentation_rules/Models.PresentationRuleSet.json @@ -0,0 +1,100 @@ +{ + "$schema": "../../node_modules/@bentley/presentation-common/Ruleset.schema.json", + "id": "Models", + "rules": [ + { + "ruleType": "RootNodes", + "specifications": [ + { + "specType": "InstanceNodesOfSpecificClasses", + "classes": [ + { + "schemaName": "BisCore", + "classNames": [ + "Subject" + ] + } + ], + "instanceFilter": "this.Parent = NULL", + "groupByClass": false, + "groupByLabel": false, + "hideNodesInHierarchy": true + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"Subject\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ElementOwnsChildElements" + ] + }, + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "Subject", + "InformationPartitionElement" + ] + }, + "requiredDirection": "Forward", + "groupByClass": false, + "groupByLabel": false, + "hideNodesInHierarchy": true + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"InformationPartitionElement\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ModelModelsElement" + ] + }, + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "Model" + ] + }, + "requiredDirection": "Backward", + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"Model\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ModelOwnsSubModel" + ] + }, + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "Model" + ] + }, + "requiredDirection": "Forward", + "groupByClass": false, + "groupByLabel": false + } + ] + } + ] +} diff --git a/test-apps/presentation-test-app/package.json b/test-apps/presentation-test-app/package.json index fcc5409..99ff37e 100644 --- a/test-apps/presentation-test-app/package.json +++ b/test-apps/presentation-test-app/package.json @@ -51,22 +51,22 @@ } }, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/electron-manager": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/electron-manager": "0.190.0", "@bentley/icons-generic-webfont": "^0.0.9", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-backend": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/presentation-components": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-backend": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/presentation-components": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0", "body-parser": "^1.18.2", "express": "^4.16.3", "react": "^16.4.2", @@ -75,10 +75,10 @@ "immutable": "^3.8.2" }, "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/imodeljs-webserver": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/imodeljs-webserver": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/body-parser": "^1.17.0", "@types/bunyan": "^1.8.4", "@types/express": "^4.16.1", diff --git a/test-apps/presentation-test-app/src/backend/SampleRpcImpl.ts b/test-apps/presentation-test-app/src/backend/SampleRpcImpl.ts index 6b17928..e569559 100644 --- a/test-apps/presentation-test-app/src/backend/SampleRpcImpl.ts +++ b/test-apps/presentation-test-app/src/backend/SampleRpcImpl.ts @@ -25,6 +25,15 @@ export default class SampleRpcImpl extends SampleRpcInterface { .map((name) => path.resolve(dir, name)); } + public async getAvailableRulesets(): Promise { + const extensions = [".PresentationRuleSet.xml", ".PresentationRuleSet.json"]; + const dir = path.join(this.getAssetsDir(), "presentation_rules"); + const files = fs.readdirSync(dir); + return files + .filter((fullPath) => extensions.some((ext) => fullPath.endsWith(ext))) + .map((fullPath) => extensions.reduce((name, ext) => path.basename(name, ext), fullPath)); + } + } /** Auto-register the impl when this file is included. */ diff --git a/test-apps/presentation-test-app/src/common/SampleRpcInterface.ts b/test-apps/presentation-test-app/src/common/SampleRpcInterface.ts index a858664..bcd9fbd 100644 --- a/test-apps/presentation-test-app/src/common/SampleRpcInterface.ts +++ b/test-apps/presentation-test-app/src/common/SampleRpcInterface.ts @@ -15,4 +15,5 @@ export default abstract class SampleRpcInterface extends RpcInterface { public static getClient(): SampleRpcInterface { return RpcManager.getClientForInterface(SampleRpcInterface); } public async getSampleImodels(): Promise { return this.forward(arguments); } + public async getAvailableRulesets(): Promise { return this.forward(arguments); } } diff --git a/test-apps/presentation-test-app/src/frontend/api/MyAppFrontend.ts b/test-apps/presentation-test-app/src/frontend/api/MyAppFrontend.ts index e2da586..d63b5a2 100644 --- a/test-apps/presentation-test-app/src/frontend/api/MyAppFrontend.ts +++ b/test-apps/presentation-test-app/src/frontend/api/MyAppFrontend.ts @@ -13,6 +13,10 @@ export class MyAppFrontend { return SampleRpcInterface.getClient().getSampleImodels(); } + public static async getAvailableRulesets(): Promise { + return SampleRpcInterface.getClient().getAvailableRulesets(); + } + public static async openIModel(path: string): Promise { this.iModel = await IModelConnection.openStandalone(path, OpenMode.Readonly); Logger.logInfo("presentation", "Opened: " + this.iModel.name); diff --git a/test-apps/presentation-test-app/src/frontend/components/app/App.tsx b/test-apps/presentation-test-app/src/frontend/components/app/App.tsx index d2d0396..b6aaabe 100644 --- a/test-apps/presentation-test-app/src/frontend/components/app/App.tsx +++ b/test-apps/presentation-test-app/src/frontend/components/app/App.tsx @@ -182,7 +182,7 @@ export default class App extends React.Component<{}, State> {

{IModelApp.i18n.translate("Sample:welcome-message")}

- + {imodelComponents} ); diff --git a/test-apps/presentation-test-app/src/frontend/components/ruleset-selector/RulesetSelector.tsx b/test-apps/presentation-test-app/src/frontend/components/ruleset-selector/RulesetSelector.tsx index c4c9c70..d9f89a8 100644 --- a/test-apps/presentation-test-app/src/frontend/components/ruleset-selector/RulesetSelector.tsx +++ b/test-apps/presentation-test-app/src/frontend/components/ruleset-selector/RulesetSelector.tsx @@ -5,32 +5,49 @@ import * as React from "react"; import { IModelApp } from "@bentley/imodeljs-frontend"; +import { MyAppFrontend } from "../../api/MyAppFrontend"; import "./RulesetSelector.css"; export interface RulesetSelectorProps { - availableRulesets: string[]; - onRulesetSelected?: (rulesetId: string) => void; + onRulesetSelected?: (rulesetId?: string) => void; } -export default class RulesetSelector extends React.Component { +export interface RulesetSelectorState { + availableRulesets?: string[]; + activeRulesetId?: string; +} +export default class RulesetSelector extends React.Component { constructor(props: RulesetSelectorProps) { super(props); - if (props.onRulesetSelected && props.availableRulesets.length > 0) - props.onRulesetSelected(props.availableRulesets[0]); + this.state = {}; + } + public componentDidMount() { + // tslint:disable-next-line: no-floating-promises + this.initAvailableRulesets(); + } + private async initAvailableRulesets() { + const rulesetIds = await MyAppFrontend.getAvailableRulesets(); + const activeRulesetId = rulesetIds.length > 0 ? rulesetIds[0] : undefined; + this.setState({ availableRulesets: rulesetIds, activeRulesetId }); + } + public componentDidUpdate(_prevProps: RulesetSelectorProps, prevState: RulesetSelectorState) { + if (this.props.onRulesetSelected && this.state.activeRulesetId !== prevState.activeRulesetId) + this.props.onRulesetSelected(this.state.activeRulesetId); } // tslint:disable-next-line:naming-convention private onSelectedRulesetIdChanged = (e: React.ChangeEvent) => { - if (this.props.onRulesetSelected) - this.props.onRulesetSelected(e.target.value); + this.setState({ activeRulesetId: e.target.value }); } public render() { - if (0 === this.props.availableRulesets.length) + if (!this.state.availableRulesets) + return (
{IModelApp.i18n.translate("Sample:controls.notifications.loading")}
); + if (0 === this.state.availableRulesets.length) return (
{IModelApp.i18n.translate("Sample:controls.notifications.no-available-rulesets")}
); return (
{IModelApp.i18n.translate("Sample:controls.notifications.select-ruleset")}: diff --git a/test-apps/synchro-schedule-importer/package.json b/test-apps/synchro-schedule-importer/package.json index 17475bd..03d412f 100644 --- a/test-apps/synchro-schedule-importer/package.json +++ b/test-apps/synchro-schedule-importer/package.json @@ -15,16 +15,16 @@ }, "repository": {}, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", "fs-extra": "^6.0.1", "yargs": "^12.0.0" }, "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@types/fs-extra": "^4.0.7", "@types/lodash": "^4.14.0", "@types/node": "10.12.18", diff --git a/test-apps/testbed/backend/IModelUnitTestRpcImpl.ts b/test-apps/testbed/backend/IModelUnitTestRpcImpl.ts deleted file mode 100644 index 7d92d52..0000000 --- a/test-apps/testbed/backend/IModelUnitTestRpcImpl.ts +++ /dev/null @@ -1,17 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -/** @module RpcInterface */ -import { RpcInterface, RpcManager, IModelToken } from "@bentley/imodeljs-common"; -import { IModelUnitTestRpcInterface } from "../common/IModelUnitTestRpcInterface"; // not part of the "barrel" -import { IModelDb } from "@bentley/imodeljs-backend"; - -/** - * The backend implementation of IModelUnitTestRpcInterface. - * @hidden - */ -export class IModelUnitTestRpcImpl extends RpcInterface implements IModelUnitTestRpcInterface { - public static register() { RpcManager.registerImpl(IModelUnitTestRpcInterface, IModelUnitTestRpcImpl); } - public async executeTest(iModelToken: IModelToken, testName: string, params: any): Promise { return JSON.parse(IModelDb.find(iModelToken).nativeDb.executeTest(testName, JSON.stringify(params))); } -} diff --git a/test-apps/testbed/backend/index.ts b/test-apps/testbed/backend/index.ts deleted file mode 100644 index 59552f8..0000000 --- a/test-apps/testbed/backend/index.ts +++ /dev/null @@ -1,282 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import * as http2 from "http2"; -import * as fs from "fs"; -import * as path from "path"; -import * as express from "express"; -import * as bodyParser from "body-parser"; -import * as WebSocket from "ws"; - -const mobilePort = process.env.MOBILE_PORT ? parseInt(process.env.MOBILE_PORT, 10) : 4000; -setupMobileMock(); - -import { IModelHost, IModelHostConfiguration } from "@bentley/imodeljs-backend"; -import { IModelUnitTestRpcImpl } from "./IModelUnitTestRpcImpl"; -import { TestbedConfig, TestbedIpcMessage } from "../common/TestbedConfig"; -import { TestRpcImpl, TestRpcImpl2, TestRpcImpl3, resetOp8Initializer, TestZeroMajorRpcImpl } from "./TestRpcImpl"; -import { CONSTANTS } from "../common/Testbed"; -import { RpcConfiguration, IModelReadRpcInterface, HttpServerRequest, HttpServerResponse } from "@bentley/imodeljs-common"; -import { Logger, LogLevel } from "@bentley/bentleyjs-core"; -import { IModelJsConfig } from "@bentley/config-loader/lib/IModelJsConfig"; -import { Config } from "@bentley/imodeljs-clients"; -IModelJsConfig.init(true, true, Config.App); -const compatibleVersion = IModelReadRpcInterface.version; - -let pendingsSent = 0; -let pendingResponseQuota = 0; - -RpcConfiguration.developmentMode = true; -TestbedConfig.mobilePort = mobilePort; - -// tslint:disable-next-line:no-var-requires -const { ipcMain } = require("electron"); -ipcMain.on("testbed", handleTestbedCommand); - -// Start the backend -const hostConfig = new IModelHostConfiguration(); -hostConfig.useTileContentThreadPool = true; -IModelHost.startup(hostConfig); - -IModelUnitTestRpcImpl.register(); -TestRpcImpl.register(); -TestRpcImpl3.register(); -TestZeroMajorRpcImpl.register(); -TestbedConfig.initializeRpcBackend(); - -Logger.initializeToConsole(); -Logger.setLevel("imodeljs-backend.IModelReadRpcImpl", LogLevel.Error); // Change to trace to debug -Logger.setLevel("imodeljs-backend.IModelDb", LogLevel.Error); // Change to trace to debug -Logger.setLevel("Performance", LogLevel.Error); // Change to Info to capture - -if (TestbedConfig.cloudRpc) { - if (TestbedConfig.useHttp2) { - const http2Options = { key: fs.readFileSync(path.join(__dirname, "../../local_dev_server.key")), cert: fs.readFileSync(path.join(__dirname, "../../local_dev_server.crt")) }; - http2.createSecureServer(http2Options, (req2, res2) => { - if (req2.method === "GET") { - handleHttp2Get(req2, res2); - } else if (req2.method === "POST") { - handleHttp2Post(req2, res2); // tslint:disable-line:no-floating-promises - } - }).listen(TestbedConfig.serverPort); - } else { - const app = express(); - app.use(bodyParser.text()); - app.use(bodyParser.raw()); - app.use(express.static(__dirname + "/public")); - app.get(TestbedConfig.swaggerURI, (req, res) => TestbedConfig.cloudRpc.protocol.handleOpenApiDescriptionRequest(req, res)); - - app.post("*", (req, res) => { - if (handleIntercept(req, res)) { - return; - } - - if (handlePending(req, res)) { - return; - } - - TestbedConfig.cloudRpc.protocol.handleOperationPostRequest(req, res); // tslint:disable-line:no-floating-promises - }); - - app.get(/\/imodel\//, (req, res) => { - if (handleIntercept(req, res)) { - return; - } - - TestbedConfig.cloudRpc.protocol.handleOperationGetRequest(req, res); // tslint:disable-line:no-floating-promises - }); - - app.listen(TestbedConfig.serverPort); - } -} - -function handleHttp2Get(req2: http2.Http2ServerRequest, res2: http2.Http2ServerResponse) { - const { req, res } = wrapHttp2API(req2, res2); - - if (req2.url.indexOf("/v3/swagger.json") === 0) { - TestbedConfig.cloudRpc.protocol.handleOpenApiDescriptionRequest(req, res); - } else if (req2.url.match(/\/imodel\//)) { - if (handleIntercept(req, res)) { - return; - } - - TestbedConfig.cloudRpc.protocol.handleOperationGetRequest(req, res); // tslint:disable-line:no-floating-promises - } else { - // serve static assets... - const p = path.join(__dirname, "/public", req2.url); // FYI: path.join(...req.url) is NOT safe for a production server - if (fs.existsSync(p)) { - fs.createReadStream(p).pipe(req2.stream); - } else { - res2.statusCode = 404; - res2.end(""); - } - } -} - -function handlePending(_req: HttpServerRequest, res: HttpServerResponse) { - if (pendingResponseQuota && pendingsSent < pendingResponseQuota) { - ++pendingsSent; - res.status(202); - res.set("Content-Type", "text/plain"); - res.send(`Pending Response #${pendingsSent}`); - return true; - } else { - pendingsSent = 0; - return false; - } -} - -function handleIntercept(req: HttpServerRequest, res: HttpServerResponse) { - if (req.path.indexOf("interceptSendTimeoutStatus") !== -1) { - res.status(504).end(""); - return true; - } - - if (req.path.indexOf("interceptSendUnknownStatus") !== -1) { - res.status(567).end(""); - return true; - } - - return false; -} - -async function handleHttp2Post(req2: http2.Http2ServerRequest, res2: http2.Http2ServerResponse) { - const { req, res } = wrapHttp2API(req2, res2); - - if (handleIntercept(req, res)) { - return; - } - - if (handlePending(req, res)) { - return; - } - - try { - req.body = await readHttp2Body(req2); - TestbedConfig.cloudRpc.protocol.handleOperationPostRequest(req, res); // tslint:disable-line:no-floating-promises - } catch (err) { - res2.end(`Fatal testbed error: ${err.toString()}`); - } -} - -async function readHttp2Body(req2: http2.Http2ServerRequest) { - return new Promise((resolve, reject) => { - const chunks: Buffer[] = []; - req2.on("data", (chunk) => { - chunks.push(chunk); - }).on("end", () => { - const body = Buffer.concat(chunks); - resolve((req2.headers["content-type"] === "application/octet-stream") ? body : body.toString()); - }).on("error", (err) => { - reject(err); - }); - }); -} - -function wrapHttp2API(req2: http2.Http2ServerRequest, res2: http2.Http2ServerResponse) { - const req: HttpServerRequest = req2 as any; - const res: HttpServerResponse = res2 as any; - - req.path = req2.url; - - req.header = (field: string) => { - const value = req2.headers[field.toLowerCase()]; - if (Array.isArray(value)) return value.join(","); - return value; - }; - - res.send = (body?: any) => { - res2.end(body); - return res; - }; - - res.set = (field: string, value: string) => { - res2.setHeader(field, value); - }; - - res.status = (code: number) => { - res2.statusCode = code; - return res; - }; - - return { req, res }; -} - -function handleTestbedCommand(event: any, arg: any) { - const msg: TestbedIpcMessage = arg; - if (msg.name === CONSTANTS.PENDING_RESPONSE_QUOTA_MESSAGE) { - pendingResponseQuota = msg.value; - pendingsSent = 0; - event.returnValue = true; - } else if (msg.name === CONSTANTS.REGISTER_TEST_RPCIMPL2_CLASS_MESSAGE) { - TestRpcImpl2.register(); - TestRpcImpl2.instantiate(); - event.returnValue = true; - } else if (msg.name === CONSTANTS.REPLACE_TEST_RPCIMPL2_INSTANCE_MESSAGE) { - TestRpcImpl2.instantiate(); - event.returnValue = true; - } else if (msg.name === CONSTANTS.UNREGISTER_TEST_RPCIMPL2_CLASS_MESSAGE) { - TestRpcImpl2.unregister(); - event.returnValue = true; - } else if (msg.name === CONSTANTS.SET_INCOMPATIBLE_INTERFACE_VERSION) { - IModelReadRpcInterface.version = "0.0.0"; - event.returnValue = true; - } else if (msg.name === CONSTANTS.RESTORE_COMPATIBLE_INTERFACE_VERSION) { - IModelReadRpcInterface.version = compatibleVersion; - event.returnValue = true; - } else if (msg.name === CONSTANTS.RESTART_BACKEND) { - IModelHost.shutdown(); - IModelHost.startup(); - event.returnValue = true; - } else if (msg.name === CONSTANTS.RESET_OP8_INITIALIZER) { - resetOp8Initializer(); - event.returnValue = true; - } else if (msg.name === CONSTANTS.SET_CHUNK_THRESHOLD) { - TestbedConfig.electronRpc.protocol.transferChunkThreshold = msg.value; - event.returnValue = true; - } -} - -function setupMobileMock() { - const server = new WebSocket.Server({ port: mobilePort }); - let connection: WebSocket; - - const mobilegateway = { - handler: (_payload: ArrayBuffer | string) => { throw new Error("Not implemented."); }, - - sendString: (message: string) => { - connection.send(message, (err) => { - if (err) { - throw err; - } - }); - }, - - sendBinary: (message: Uint8Array) => { - connection.send(Buffer.from(message), (err) => { - if (err) { - throw err; - } - }); - }, - - port: mobilePort, - }; - - server.on("connection", (con) => { - connection = con; - con.on("message", (msg) => { - if (Buffer.isBuffer(msg)) { - const copy = Buffer.alloc(msg.length); - msg.copy(copy); - mobilegateway.handler(copy.buffer as ArrayBuffer); - } else if (typeof (msg) === "string") { - mobilegateway.handler(msg); - } - }); - }); - - (global as any).self = global; - (global as any).bentley = { imodeljs: { servicesTier: { require: () => mobilegateway } } }; -} diff --git a/test-apps/testbed/bin/testbed.js b/test-apps/testbed/bin/testbed.js deleted file mode 100644 index 1616572..0000000 --- a/test-apps/testbed/bin/testbed.js +++ /dev/null @@ -1,49 +0,0 @@ -#! /usr/bin/env node - -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -const program = require("commander"); -const floss = require("../floss"); -const paths = require("@bentley/build-tools/scripts/config/paths"); - -const isCI = (process.env.TF_BUILD); - -const reporterOptions = (isCI) ? { - reporter: "mocha-junit-reporter", - reporterOptions: `mochaFile=${paths.appJUnitTestResults}` -} : { - reporter: "spec" - }; - -program - .version("0.1.0") - .description("imodeljs-core-testbed") - .option('-d, --debug', 'Launch electron in debug mode') - .option('--no-dev-tools', 'Do not automatically open Chrome Developer Tools in debug mode') - .option('-g, --grep ', 'only run tests matching ') - .option('-f, --fgrep ', 'only run tests containing ') - .option('-i, --invert', 'inverts --grep and --fgrep matches') - .option('-t, --timeout ', 'set test-case timeout in milliseconds [2000]') - .option('-c, --coverage', 'Generate json coverage report') - .parse(process.argv); - -floss( - { - path: "bootstrap.js", - debug: program.debug, - timeout: program.timeout || 999999, - noDevTools: program.noDevTools, - grep: program.grep, - fgrep: program.fgrep, - invert: program.invert, - coverage: program.coverage, - checkLeaks: true, - ...reporterOptions, - }, - function (returnCode) { - process.exit(returnCode ? 1 : 0); - } -); diff --git a/test-apps/testbed/bootstrap.js b/test-apps/testbed/bootstrap.js deleted file mode 100644 index f439112..0000000 --- a/test-apps/testbed/bootstrap.js +++ /dev/null @@ -1,25 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -const path = require("path"); -const fs = require("fs"); -const { ipcRenderer, remote } = require("electron"); -global.___IMODELJS_CORE_DIRNAME___ = path.join(__dirname, "../.."); -global.___TESTBED_IPC_RENDERER___ = ipcRenderer; -remote.getCurrentWindow().setTitle("iModelJs Testbed"); - -if (global.options.coverage) { - require(path.join(__dirname, "coverage.js")); - remote.require(path.join(__dirname, "coverage.js")); - remote.require(path.join(__dirname, "lib/backend/index")); - - const testFiles = require("glob").sync(path.resolve(__dirname, "lib/frontend**/*.test.js")); - for (const jsPath of testFiles) { - require(jsPath); - } -} else { - remote.require(path.join(__dirname, "lib/backend/index")); - const jsPath = "lib/dist/testbed.js"; - require("vm").runInThisContext(fs.readFileSync(jsPath), { filename: "file:///" + path.join(__dirname, jsPath).replace(/\\/g, '/') }); -} \ No newline at end of file diff --git a/test-apps/testbed/common/IModelUnitTestRpcInterface.ts b/test-apps/testbed/common/IModelUnitTestRpcInterface.ts deleted file mode 100644 index 984cbbe..0000000 --- a/test-apps/testbed/common/IModelUnitTestRpcInterface.ts +++ /dev/null @@ -1,24 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -/** @module RpcInterface */ - -import { RpcInterface, RpcManager, IModelToken } from "@bentley/imodeljs-common"; - -/** - * For unit testing purposes only. This interface should not be registered by real products. - * @hidden - */ -export abstract class IModelUnitTestRpcInterface extends RpcInterface { - /** The version of the interface. */ - public static version = "1.0.0"; - - /** The types that can be marshaled by the interface. */ - public static types = () => [IModelToken]; - - /** Returns the IModelUnitTestRpcInterface client instance for the frontend. */ - public static getClient(): IModelUnitTestRpcInterface { return RpcManager.getClientForInterface(IModelUnitTestRpcInterface); } - - public async executeTest(_iModelToken: IModelToken, _testName: string, _params: any): Promise { return this.forward(arguments); } -} diff --git a/test-apps/testbed/common/Testbed.ts b/test-apps/testbed/common/Testbed.ts deleted file mode 100644 index a896221..0000000 --- a/test-apps/testbed/common/Testbed.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -declare var ___IMODELJS_CORE_DIRNAME___: any; - -export const CONSTANTS = { - get IMODELJS_CORE_DIRNAME(): string { return ___IMODELJS_CORE_DIRNAME___; }, - PENDING_RESPONSE_QUOTA_MESSAGE: "pendingResponseQuota", - REGISTER_TEST_RPCIMPL2_CLASS_MESSAGE: "registerTestRpcImpl2Class", - REPLACE_TEST_RPCIMPL2_INSTANCE_MESSAGE: "replaceTestRpcImpl2Instance", - UNREGISTER_TEST_RPCIMPL2_CLASS_MESSAGE: "unregisterTestRpcImpl2Class", - SET_INCOMPATIBLE_INTERFACE_VERSION: "setIncompatibleInterfaceVersion", - RESTORE_COMPATIBLE_INTERFACE_VERSION: "restoreIncompatibleInterfaceVersion", - RESTART_BACKEND: "restartBackend", - RESET_OP8_INITIALIZER: "resetOp8Initializer", - SET_CHUNK_THRESHOLD: "setChunkThreshold", -}; diff --git a/test-apps/testbed/common/TestbedConfig.ts b/test-apps/testbed/common/TestbedConfig.ts deleted file mode 100644 index 89a8f2c..0000000 --- a/test-apps/testbed/common/TestbedConfig.ts +++ /dev/null @@ -1,153 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import { - BentleyCloudRpcManager, - ElectronRpcManager, - BentleyCloudRpcConfiguration, - RpcOperation, - IModelToken, - IModelReadRpcInterface, - IModelTileRpcInterface, - IModelWriteRpcInterface, - StandaloneIModelRpcInterface, - RpcManager, - MobileRpcManager, - WipRpcInterface, - ElectronRpcConfiguration, -} from "@bentley/imodeljs-common"; -import { IModelUnitTestRpcInterface } from "./IModelUnitTestRpcInterface"; -import { - TestRpcInterface, - TestRpcInterface2, - TestRpcInterface3, - ZeroMajorRpcInterface, - RpcElectronTransportTest, - RpcDirectTransportTest, - RpcTransportTestImpl, - RpcWebTransportTest, - RpcMobileTransportTest, -} from "./TestRpcInterface"; -import { OpenMode } from "@bentley/bentleyjs-core"; - -declare var ___TESTBED_IPC_RENDERER___: any; - -export async function testInterfaceResource() { - const data = new Uint8Array(4); - data[0] = 1; - data[1] = 2; - data[2] = 3; - data[3] = 4; - return Promise.resolve(data); -} - -class TestRpcImplDirect extends TestRpcInterface { - public async op12(): Promise { - return testInterfaceResource(); - } - - public async op13(data: Uint8Array): Promise { - if (data[0] === 1 && data[1] === 2 && data[2] === 3 && data[3] === 4) { - return; - } else { - throw new Error(); - } - } -} - -export class TestbedConfig { - public static cloudRpcParams = { info: { title: "imodeljs-core-testbed", version: "v1.0" } }; - public static serverPort = process.env.PORT || 3000; - public static mobilePort = process.env.MOBILE_PORT ? parseInt(process.env.MOBILE_PORT, 10) : 4000; - public static swaggerURI = "/v3/swagger.json"; - public static cloudRpc: BentleyCloudRpcConfiguration; - public static electronRpc: ElectronRpcConfiguration; - public static get ipc(): any { return ___TESTBED_IPC_RENDERER___; } - public static useHttp2 = false; - - public static get localServerUrlPrefix() { - const protocol = TestbedConfig.useHttp2 ? "https" : "http"; - const port = TestbedConfig.serverPort; - return `${protocol}://localhost:${port}`; - } - - public static useIPC = false; - public static useDirect = false; - public static rpcInterfaces = [ - IModelReadRpcInterface, - IModelTileRpcInterface, - IModelWriteRpcInterface, - StandaloneIModelRpcInterface, - IModelUnitTestRpcInterface, - WipRpcInterface, - TestRpcInterface, - TestRpcInterface2, - ZeroMajorRpcInterface, - ]; - - public static initializeRpcFrontend() { - if (TestbedConfig.useDirect) { - RpcManager.initializeInterface(TestRpcInterface); - RpcManager.registerImpl(TestRpcInterface, TestRpcImplDirect); - } else if (TestbedConfig.useIPC) { - ElectronRpcManager.initializeClient({}, TestbedConfig.rpcInterfaces); - } else { - TestbedConfig.cloudRpc = BentleyCloudRpcManager.initializeClient(TestbedConfig.cloudRpcParams, TestbedConfig.rpcInterfaces); - TestbedConfig.initializeBentleyCloudCommon(); - } - - TestbedConfig.electronRpc = ElectronRpcManager.initializeClient({}, [TestRpcInterface3]); - - // RPC transport testing - window.location.hash = TestbedConfig.mobilePort.toString(); - - const webClient = BentleyCloudRpcManager.initializeClient(TestbedConfig.cloudRpcParams, [RpcWebTransportTest]); - webClient.protocol.pathPrefix = TestbedConfig.localServerUrlPrefix; - RpcOperation.forEach(RpcWebTransportTest, (operation) => operation.policy.token = (_request) => new IModelToken("test", "test", "test", "test", OpenMode.Readonly)); - - ElectronRpcManager.initializeClient({}, [RpcElectronTransportTest]); - - RpcManager.initializeInterface(RpcDirectTransportTest); - RpcManager.registerImpl(RpcDirectTransportTest, RpcTransportTestImpl); - - MobileRpcManager.initializeClient([RpcMobileTransportTest]); - } - - public static initializeRpcBackend() { - if (TestbedConfig.useDirect) { - // N/A -- only for testing code within frontend bundle - } else if (TestbedConfig.useIPC) { - ElectronRpcManager.initializeImpl({}, TestbedConfig.rpcInterfaces); - } else { - TestbedConfig.cloudRpc = BentleyCloudRpcManager.initializeImpl(TestbedConfig.cloudRpcParams, TestbedConfig.rpcInterfaces); - TestbedConfig.initializeBentleyCloudCommon(); - } - - TestbedConfig.electronRpc = ElectronRpcManager.initializeImpl({}, [TestRpcInterface3]); - - // RPC transport testing - RpcManager.registerImpl(RpcWebTransportTest, RpcTransportTestImpl); - RpcManager.registerImpl(RpcElectronTransportTest, RpcTransportTestImpl); - RpcManager.registerImpl(RpcMobileTransportTest, RpcTransportTestImpl); - - BentleyCloudRpcManager.initializeImpl(TestbedConfig.cloudRpcParams, [RpcWebTransportTest]); - ElectronRpcManager.initializeImpl({}, [RpcElectronTransportTest]); - MobileRpcManager.initializeImpl([RpcMobileTransportTest]); - } - - public static sendToMainSync(msg: TestbedIpcMessage) { - return TestbedConfig.ipc.sendSync("testbed", msg); - } - - private static initializeBentleyCloudCommon() { - for (const definition of TestbedConfig.rpcInterfaces) { - RpcOperation.forEach(definition, (operation) => operation.policy.token = (_request) => new IModelToken("test", "test", "test", "test", OpenMode.Readonly)); - } - } -} - -export interface TestbedIpcMessage { - name: string; - value: any; -} diff --git a/test-apps/testbed/coverage.js b/test-apps/testbed/coverage.js deleted file mode 100644 index 52d31a9..0000000 --- a/test-apps/testbed/coverage.js +++ /dev/null @@ -1,68 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -'use strict' - -const glob = require("glob") -const { resolve, join } = require("path") -const fs = require("fs") -const { hookRequire } = require("istanbul-lib-hook") -const { createInstrumenter } = require("istanbul-lib-instrument") - -function match() { - const map = {} - const fn = function (file) { return map[file] } - - const pattern = '../../core/@(frontend|backend)/lib/**/*.js' - - const opts = { - root: __dirname, - realpath: true, - ignore: [ - "../../core/@(frontend|backend)/lib/module/**", - "../../core/@(frontend|backend)/lib/*test/**" - ] - }; - - fn.files = glob.sync(pattern, opts); - for (let file of fn.files) { - map[file] = transformer(fs.readFileSync(file, 'utf-8'), file) - cov[file] = instrumenter.lastFileCoverage() - } - - return fn -} - -function report() { - //Add map files to transform .js into .ts in coverage report - for (let file in cov) - if (fs.existsSync(file + '.map')) - cov[file].inputSourceMap = JSON.parse(fs.readFileSync(file + '.map', 'utf-8')); - - fs.writeFileSync(join(tmpd, `${process.type}.json`), JSON.stringify(cov), 'utf-8') -} - -const customOpts = { - includeAllSources: true -}; - -const instrumenter = createInstrumenter(customOpts) -const transformer = instrumenter.instrumentSync.bind(instrumenter) -const cov = global.__coverage__ = {} - -const tmpd = resolve(__dirname, '.nyc_output') -if (!fs.existsSync(tmpd)) { - fs.mkdirSync(tmpd) -} - -const matched = match() - -hookRequire(matched, transformer, {}) - -if (process.type === 'browser') { - process.on('exit', report) -} else { - window.addEventListener('unload', report) -} diff --git a/test-apps/testbed/floss/.gitignore b/test-apps/testbed/floss/.gitignore deleted file mode 100644 index 642271f..0000000 --- a/test-apps/testbed/floss/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -coverage/ \ No newline at end of file diff --git a/test-apps/testbed/floss/.npmignore b/test-apps/testbed/floss/.npmignore deleted file mode 100644 index d0ebcd1..0000000 --- a/test-apps/testbed/floss/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules/ -test/ -.gitignore -.travis.yml -coverage/ \ No newline at end of file diff --git a/test-apps/testbed/floss/.travis.yml b/test-apps/testbed/floss/.travis.yml deleted file mode 100644 index 605eea8..0000000 --- a/test-apps/testbed/floss/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: node_js -node_js: - - "4" - -install: - - npm install xvfb-maybe - - npm install - -cache: - directories: - - node_modules - -before_script: - - export DISPLAY=':99.0' - - Xvfb :99 -screen 0 1024x768x24 -extension RANDR & - -script: - - xvfb-maybe npm test \ No newline at end of file diff --git a/test-apps/testbed/floss/LICENSE b/test-apps/testbed/floss/LICENSE deleted file mode 100644 index 971b8ca..0000000 --- a/test-apps/testbed/floss/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jibo, Inc. - -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. \ No newline at end of file diff --git a/test-apps/testbed/floss/README.md b/test-apps/testbed/floss/README.md deleted file mode 100644 index e780d38..0000000 --- a/test-apps/testbed/floss/README.md +++ /dev/null @@ -1,222 +0,0 @@ -# Floss - -Unit-testing for those hard to reach places. - -[![Build Status](https://travis-ci.org/pixijs/floss.svg?branch=master)](https://travis-ci.org/pixijs/floss) [![npm version](https://badge.fury.io/js/floss.svg)](https://badge.fury.io/js/floss) - -Uses Electron to provide a Mocha unit-testing environment which can be run headlessly or to debugged with DevTools. This was largely inspired by the [electron-mocha](https://github.com/jprichardson/electron-mocha) and [mocha-electron](https://github.com/tscanlin/mochatron) projects but didn't quite have the debugging features needed to develop tests. - -## Installation - -Install globally: - -```bash -npm install -g floss electron -``` - -Install locally within a project: - -```bash -npm install floss electron --save-dev -``` - -## Gulp Usage - -```js -const floss = require('floss'); -gulp.task('test', function(done) { - floss('test/index.js', done); -}); -``` - -### Debug Mode - -Open tests in an Electron window where test can can be debugged with `debugger` and dev tools. - -```js -floss({ - path: 'test/index.js', - debug: true -}, done); -``` - -### Mocha Reporter - -The `reporter` and `reporterOptions` are pass-through options for Mocha to specify a different reporter when running Floss in non-debug mode. - -```js -floss({ - path: 'test/index.js', - reporter: 'xunit', - reporterOptions: { - filename: 'report.xml' - } -}, done); -``` - -### Custom Options - -Additional properties can be passed to the test code by adding more values to the run options. - -```js -floss({ - path: 'test/index.js', - customUrl: 'http://localhost:8080' // <- custom -}, done); -``` - -The test code and use the global `options` property to have access to the run options. - -```js -console.log(options.customUrl); // logs: http://localhost:8080 -``` - -## Command Line Usage - -### Arguments - -* **--path** or **-p** (String) Path to the file to test -* **--debug** or **-d** (Boolean) Enable to run in headful mode, default `false`. -* **--quiet** or **-q** (Boolean) Prevent console[log/info/error/warn/dir] messages from appearing in `stdout`. -* **--electron** or **-e** (String) Path to the electron to use. -* **--reporter** or **-r** (String) Mocha reporter type, default `spec`. -* **--reporterOptions** or **-o** (String) Mocha reporter options. -* **--coveragePattern** or **-c** (String) Glob pattern of file source to messure for coverage. -* **--coverageHtmlReporter** or **-h** (Boolean) Generatel HTML report for coverage, default `false`. -* **--coverageSourceMaps** or **-s** (Boolean) Use sourcemaps to determine coverage, default `false`. - -### Usage - -Command Line usage when installed globally: - -```bash -floss --path test/index.js -``` - -Or installed locally: - -```bash -node node_modules/.bin/floss --path test/index.js -``` - -Alernatively, within the **package.json**'s' scripts: - -```json -{ - "scripts": { - "test": "floss --path test/index.js" - } -} -``` - -### Debug Mode - -Open tests in an Electron window where test can can be debugged with `debugger` and dev tools. - -```bash -floss --path test/index.js --debug -``` - -### Istanbul Code Coverage - -Floss comes with istanbul integration. This will generate a json report. - -```bash -floss --path test/index.js --coveragePattern lib/**/*/*.js -``` - -To remap the json report using sourcemaps - -```bash -floss --path test/index.js --coveragePattern lib/**/*/*.js --coverageSourceMaps -``` - -To generate an additional html report - -```bash -floss --path test/index.js \ - --coveragePattern lib/**/*/*.js \ - --coverageHtmlReporter -``` - -To generate an additional html report with source maps - -```bash -floss --path test/index.js \ - --coveragePattern lib/**/*/*.js \ - --coverageSourceMaps \ - --coverageHtmlReporter -``` - -For lists of globs put the coverage files in quotes comma or space separated - -```bash -floss --path test/index.js \ - --coveragePattern "lib/**/*/*.js, node_modules/thing/lib/thing.js" -``` - -### Mocha Reporter - -Can use the same reporter options as the API mentioned above. The `reporterOptions` are expressed as a querystring, for instance `varname=foo&another=bar`. - -```bash -floss --path test/index.js \ - --reporter=xunit \ - --reporterOptions output=report.xml -``` - -## Custom Electron Version - -Some application may require a specific version of Electron. Floss uses Electron 1.0.0+, but you can specific the path to your own version. The custom version can be used either through the commandline argument `--electron`, by setting the Node environmental variable `ELECTRON_PATH` or by setting the run option `electron`. - -```js -gulp.task('test', function(done) { - floss({ - path: 'test/index.js', - electron: require('electron') - }, done); -}); -``` -```bash -floss --path test/index.js \ - --electron /usr/local/bin/electron -``` - -```bash -ELECTRON_PATH=/usr/local/bin/electron floss --path test/index.js -``` - -## Travis Integration - -Floss can be used with [Travis CI](https://travis-ci.org/) to run Electron headlessly by utilizing Xvfb. Here's a sample of how to setup this project. - -### package.json - -Note that scripts `test` must be setup in your **package.json**; - -```json -{ - "scripts": { - "test": "gulp test" - } -} -``` - -### .travis.yml - -```yml -language: node_js -node_js: - - "4" - -install: - - npm install xvfb-maybe - - npm install - -before_script: - - export DISPLAY=':99.0' - - Xvfb :99 -screen 0 1024x768x24 -extension RANDR & - -script: - - xvfb-maybe npm test -``` diff --git a/test-apps/testbed/floss/bin/floss.js b/test-apps/testbed/floss/bin/floss.js deleted file mode 100644 index 0447805..0000000 --- a/test-apps/testbed/floss/bin/floss.js +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const commander = require('commander'); -const chalk = require('chalk'); -const floss = require('../'); - -function cli(args, callback) { - const parsedArgs = parseArgs(args); - // console.log(parsedArgs.coveragePattern); - if (!parsedArgs.path) { - console.error(chalk.red("Error, no path specified.")); - parsedArgs.outputHelp(); - return; - } - floss(parsedArgs, function (err) { - if (callback) { - if (err) { - callback(1); - } else { - callback(0); - } - } - }); -} - -/** - * Split the value by comma or spaces - */ -function parseList(value) { - return value.split(/[\s,]\s*/); -} - -function parseArgs(args) { - commander.option('-d, --debug', 'Launch electron in debug mode') - .option('-p, --path [path/to/folder/or/file.js]', 'Either a path to a directory containing index.js or a path to a single test file') - .option('-e, --electron [path/to/Electron]', 'Path to version of Electron to test on') - .option('-c, --coveragePattern ', 'Glob paths for coverage support', parseList) - .option('-s, --coverageSourceMaps', 'Run the coverage report through sourcemap conversion') - .option('-h, --coverageHtmlReporter', 'Also generate an html report') - .option('-r, --reporter [spec]', 'Mocha reporter for headless mode only') - .option('-o, --reporterOptions [filename=report.xml]', 'Additional arguments for reporter options, query-string formatted') - .option('-q, --quiet', 'Prevent console.(log/info/error/warn) messages from appearing in STDOUT') - .option('--no-dev-tools', 'Do not automatically open Chrome Developer Tools in debug mode') - .option('-g, --grep ', 'only run tests matching ') - .option('-f, --fgrep ', 'only run tests containing ') - .option('-i, --invert', 'inverts --grep and --fgrep matches') - .option('-t, --timeout ', 'set test-case timeout in milliseconds [2000]') - .option('--check-leaks', 'check for global variable leaks') - .parse(args); - return commander; -} - -cli(process.argv, function (returnCode) { - process.exit(returnCode); -}); diff --git a/test-apps/testbed/floss/electron/index.html b/test-apps/testbed/floss/electron/index.html deleted file mode 100644 index 0374ca3..0000000 --- a/test-apps/testbed/floss/electron/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Floss Tests - - - -
-
-
- - - \ No newline at end of file diff --git a/test-apps/testbed/floss/electron/index.js b/test-apps/testbed/floss/electron/index.js deleted file mode 100644 index 070589a..0000000 --- a/test-apps/testbed/floss/electron/index.js +++ /dev/null @@ -1,137 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const { app, BrowserWindow, ipcMain } = require('electron'); - -// NEEDSWORK: Electron seems to be redirecting this process's stderr stream to stdout somewhere. -// Since rush test depends on stderr messages, we're using a separate IPC channel to force console.error to write to our parent process's stderr. -if (process.send) { - console.error = function () { - process.send([...arguments]); - } -} - -// Path to the html render -const htmlPath = path.join(__dirname, 'index.html'); - -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow = null; - -// Get the configuration path -const configPath = path.join(app.getPath('userData'), 'config.json'); - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -app.on('ready', createWindow.bind(this)); - -// Quit when all windows are closed. -app.on('window-all-closed', function () { - app.quit(); -}); - -app.on('activate', function () { - // On OS X it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (mainWindow === null) { - createWindow(); - } -}); - -app.on('certificate-error', (event, webContents, url, error, certificate, callback) => { - event.preventDefault(); - callback(true); -}); - -function createWindow() { - - let args = JSON.parse(process.argv.slice(2)[0]); - - // Get the window bounds - const options = restoreBounds(); - - options.show = args.debug; - - // Create handlers for piping rendered logs to console - if (!args.debug && !args.quiet) { - for (let name in console) { - ipcMain.on(name, function (event, args) { - console[name](...args); - }) - } - } - - - // Create the browser window. - mainWindow = new BrowserWindow(options); - if (!args.debug) - mainWindow.blur(); - - ipcMain.on('mocha-done', function () { - mainWindow.close(); - }); - - ipcMain.on('mocha-error', function () { - process.exit(1); - }); - - // and load the index.html of the app. - mainWindow.loadURL('file://' + htmlPath); - - // don't show the dev tools if you're not in headless mode. this is to - // avoid having breakpoints and "pause on caught / uncaught exceptions" halting - // the runtime. plus, if you're in headless mode, having the devtools open is probably - // not very useful anyway - if (args.debug && !args.noDevTools) { - // Open the DevTools. - mainWindow.webContents.openDevTools({ mode: 'bottom' }); - } - - mainWindow.webContents.on('did-finish-load', function () { - mainWindow.webContents.send('ping', JSON.stringify(args)); - }); - - // Update bounds - mainWindow.on('close', saveBounds); - - // Emitted when the window is closed. - mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null; - }); -} - -/** - * Restore the bounds of the window. - */ -function restoreBounds() { - let data; - try { - data = JSON.parse(fs.readFileSync(configPath, 'utf8')); - } - catch (e) { - // do nothing - } - - if (data && data.bounds) { - return data.bounds; - } - else { - return { - width: 1024, - height: 768 - }; - } -} - -/** - * Save the bounds of the window. - */ -function saveBounds() { - fs.writeFileSync(configPath, JSON.stringify({ - bounds: mainWindow.getBounds() - })); -} diff --git a/test-apps/testbed/floss/electron/package.json b/test-apps/testbed/floss/electron/package.json deleted file mode 100644 index 5066830..0000000 --- a/test-apps/testbed/floss/electron/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "floss", - "version": "0.1.0", - "main": "index.js", - "license": "UNLICENSED", - "private": true -} diff --git a/test-apps/testbed/floss/electron/renderer.js b/test-apps/testbed/floss/electron/renderer.js deleted file mode 100644 index e03d522..0000000 --- a/test-apps/testbed/floss/electron/renderer.js +++ /dev/null @@ -1,202 +0,0 @@ -'use strict'; - -require("../../../../common/scripts/mocha-reporter-tweaks"); -const Mocha = require('mocha'); -const chai = require('chai'); -//const sinon = require('sinon'); -//const sinonChai = require('sinon-chai'); -const pathNode = require('path'); -const fs = require('fs'); -const resolve = require('resolve'); -const { ipcRenderer, remote } = require('electron'); -const querystring = require('querystring'); - -require('mocha/mocha'); -require('chai/chai'); - -global.chai = chai; -//global.sinon = sinon; -global.should = chai.should; -global.assert = chai.assert; -global.expect = chai.expect; -//global.chai.use(sinonChai); - -const globalLoggers = {}; - -class Renderer { - - constructor(linkId) { - - ipcRenderer.on('ping', (ev, data) => { - this.options = global.options = JSON.parse(data); - const { - path, - debug, - quiet - } = this.options; - - // Do this before to catch any errors outside mocha running - // for instance errors on the page like test's requires - this.setupConsoleOutput(quiet, !debug); - - this.headless(path); - }); - - // Add the stylesheet - const mochaPath = pathNode.dirname(resolve.sync('mocha', { basedir: __dirname })); - const link = document.getElementById(linkId); - link.href = pathNode.join(mochaPath, 'mocha.css'); - } - - applyOptions(mochaInst) { - if (this.options.debug) { - mochaInst.enableTimeouts(false); - } - - if (this.options.timeout) { - mochaInst.suite.timeout(this.options.timeout); - } - - if (this.options.grep) { - mochaInst.grep(this.options.grep); - } - - if (this.options.fgrep) { - mochaInst.fgrep(this.options.fgrep); - } - - if (this.options.invert) { - mochaInst.invert(); - } - - if (this.options.checkLeaks) { - mochaInst.checkLeaks(); - } - } - - headful(testPath) { - mocha.setup({ - ui: 'bdd', - enableTimeouts: false - }); - - this.applyOptions(mocha); - - this.addFile(testPath, (pathToAdd) => { - if (pathToAdd) { - require(pathToAdd); - } - }); - } - - headless(testPath) { - try { - mocha.setup({ - ui: 'tdd' - }); - - // Format the reporter options - let reporterOptions; - - // Parse string as an object - if (typeof this.options.reporterOptions === "string") { - reporterOptions = querystring.parse( - this.options.reporterOptions - ); - } - - const mochaInst = new Mocha({ - reporter: this.options.reporter, - reporterOptions: reporterOptions - }); - mochaInst.ui('tdd'); - mochaInst.useColors(true); - this.applyOptions(mochaInst); - this.addFile(testPath, (pathToAdd) => { - if (pathToAdd) { - mochaInst.addFile(pathToAdd); - } - }); - mochaInst.run((errorCount) => { - try { - if (errorCount > 0) { - ipcRenderer.send('mocha-error', 'ping'); - } else { - ipcRenderer.send('mocha-done', 'ping'); - } - } catch (e) { - console.log(`[floss]: ${e.stack || e.message || e}`); - ipcRenderer.send('mocha-error', 'ping'); - } - }); - } catch (e) { - console.log(`[floss]: ${e.stack || e.message || e}`); - ipcRenderer.send('mocha-error', 'ping'); - } - } - - setupConsoleOutput(isQuiet, isHeadless) { - const remoteConsole = remote.getGlobal('console'); - - if (isQuiet) { - if (isHeadless) { - console.log = function () { - remoteConsole.log.apply(remoteConsole, arguments) - } - - console.dir = function () { - remoteConsole.dir.apply(remoteConsole, arguments) - } - } - } else if (isHeadless) { - bindConsole(); - } - - // if we don't do this, we get socket errors and our tests crash - Object.defineProperty(process, 'stdout', { - value: { - write: function (str) { - remote.process.stdout.write(str); - } - } - }); - - // Create new bindings for `console` functions - // Use default console[name] and also send IPC - // log so we can log to stdout - function bindConsole() { - for (const name in console) { - if (typeof console[name] === 'function') { - globalLoggers[name] = console[name]; - console[name] = function (...args) { - globalLoggers[name].apply(console, args); - ipcRenderer.send(name, args); - } - } - } - } - } - - addFile(testPath, callback) { - testPath = pathNode.resolve(testPath); - - if (fs.existsSync(testPath)) { - // if a single directory, find the index.js file and include that - if (fs.statSync(testPath).isDirectory()) { - const indexFile = pathNode.join(testPath, "index.js"); - if (!fs.existsSync(indexFile)) { - console.error(`No index.js file found in directory: ${testPath}`); - callback(null); - } else { - callback(indexFile); - } - } - // if it is a single file, only include that file - else { - callback(testPath); - } - } - } -} - -module.exports = Renderer; diff --git a/test-apps/testbed/floss/index.js b/test-apps/testbed/floss/index.js deleted file mode 100644 index 1ecfee5..0000000 --- a/test-apps/testbed/floss/index.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -const path = require('path'); -const assign = require('object-assign'); -const spawn = require('child_process').spawn; - -let electron; -try { - electron = require('electron'); -} -catch (err) { - // silence is golden -} - -/** - * API to launch the Floss application. - * @module floss - * @param {Object|String} options The options map or path. - * @param {String} [options.path] Path to the JS file to run. - * @param {Boolean} [options.debug] `true` opens in headful mode. - * @param {String} [options.electron] Path to custom electron version. If undefined - * will use environment variable `ELECTRON_PATH` or electron - * installed alongside. - * @param {String} [options.reporter=spec] Mocha reporter (non-debug mode only) - * @param {String|Object} [options.reporterOptions] Additional options for the reporter - * useful for specifying an output file if using the 'xunit' reporter. - * Options can be a querystring format, e.g., `"foo=2&bar=something"` - * @param {Function} done Called when completed. Passes error if failed. - */ -function floss(options, done) { - - if (typeof options === "string") { - options = { - path: options - }; - } - - options = assign({ - debug: false, - quiet: false, - electron: process.env.ELECTRON_PATH || electron - }, options); - - if (!options.path) { - console.error("Error: No path specified for Floss.".red); - return done(); - } - - if (!options.electron) { - console.error("Error: Unable to find Electron. Install 'electron' alongside Floss.".red); - return done(); - } - - const app = path.join(__dirname, 'electron'); - const args = JSON.stringify(options); - - const isWindows = /^win/.test(process.platform); - if (isWindows && !path.extname(options.electron)) { - // In the case where floss is running in windows with the cmdline option --electron electron - // options.electron will just be "electron" at this point. - // Due to limitations with how nodejs spawns windows processes we need to add .cmd to the end of the command - // https://github.com/nodejs/node/issues/3675 - options.electron += ".cmd"; - } - - //copy the environment and remove things that would prevent Floss from running properly - const envCopy = Object.assign({}, process.env); - delete envCopy.ELECTRON_RUN_AS_NODE; - delete envCopy.ELECTRON_NO_ATTACH_CONSOLE; - const childProcess = spawn( - options.electron, [app, args], { - stdio: 'pipe', - env: envCopy - } - ); - childProcess.stdout.on('data', (data) => { - process.stdout.write(data); - }); - childProcess.stderr.on('data', (data) => { - process.stderr.write(data); - }); - childProcess.on('message', (m) => { - console.error(...m); - }); - childProcess.on('close', (code) => { - if (code !== 0) { - return done(new Error('Mocha tests failed')); - } - done(); - }); -} - -// Backward compatibility -floss.run = floss; - -module.exports = floss; diff --git a/test-apps/testbed/floss/package.json b/test-apps/testbed/floss/package.json deleted file mode 100644 index d6d5aed..0000000 --- a/test-apps/testbed/floss/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "floss", - "version": "2.1.3", - "description": "Unit-testing for those hard to reach places", - "bin": "./bin/floss.js", - "main": "./index.js", - "author": "Matt Karl ", - "contributors": [ - "Matt Bittarelli " - ], - "scripts": { - "lint": "eslint index.js electron bin test", - "pretest": "npm run lint", - "test": "node bin/floss.js --path=test/index.js", - "start": "npm test -- --debug", - "preversion": "npm test", - "postpublish": "git push && git push --tags", - "publish:patch": "npm version patch && npm publish", - "publish:minor": "npm version minor && npm publish", - "publish:major": "npm version major && npm publish" - }, - "publishConfig": { - "registry": "https://registry.npmjs.com" - }, - "repository": { - "type": "git", - "url": "git@github.com:pixijs/floss.git" - }, - "bugs": { - "url": "https://github.com/pixijs/floss/issues" - }, - "homepage": "https://github.com/pixijs/floss", - "engines": { - "node": ">=4.0" - }, - "license": "MIT", - "keywords": [ - "mocha", - "sinon", - "chai", - "mocha-electron", - "electron-mocha", - "electron", - "test", - "tests", - "unit-tests", - "unit-testing", - "travis", - "travis-ci" - ], - "dependencies": { - "chai": "^3.5.0", - "chalk": "^2.3.0", - "commander": "^2.9.0", - "find-root": "^1.0.0", - "glob": "^7.1.0", - "mocha": "^5.0.0", - "object-assign": "^4.1.0", - "resolve": "^1.1.7", - "sinon": "^1.17.4", - "sinon-chai": "^2.8.0", - "strip-ansi": "^3.0.1" - }, - "peerDependencies": { - "electron": "^2.0.8" - }, - "devDependencies": { - "eslint": "^3.5.0", - "electron": "^2.0.8" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "rules": { - "no-console": 0, - "no-debugger": 1 - }, - "parserOptions": { - "ecmaVersion": 5, - "sourceType": "module" - }, - "env": { - "browser": true, - "node": true, - "mocha": true - }, - "globals": { - "expect": true - } - } -} \ No newline at end of file diff --git a/test-apps/testbed/floss/test/index.js b/test-apps/testbed/floss/test/index.js deleted file mode 100644 index c4869d5..0000000 --- a/test-apps/testbed/floss/test/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -describe('babys first test', () => { - it('should always be true - dummy test', function () { - expect(true).to.be.ok; - }); - - it('should evaluate to true', () => { - expect(false).to.not.be.ok; - }); -}); diff --git a/test-apps/testbed/frontend/Rpc.ElectronProtocol.test.ts b/test-apps/testbed/frontend/Rpc.ElectronProtocol.test.ts deleted file mode 100644 index 49b63d5..0000000 --- a/test-apps/testbed/frontend/Rpc.ElectronProtocol.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -import { RpcProtocolEvent, RpcRequest } from "@bentley/imodeljs-common"; -import { TestRpcInterface3 } from "../common/TestRpcInterface"; -import { assert } from "chai"; -import { TestbedConfig } from "../common/TestbedConfig"; -import { CONSTANTS } from "../common/Testbed"; - -describe("Rpc.ElectronProtocol", () => { - it("should generate one response per request", async () => { - let received = 0; - let request: RpcRequest; - const client = TestRpcInterface3.getClient(); - - const removeListener = client.configuration.protocol.events.addListener((type, object) => { - if (type !== RpcProtocolEvent.ResponseLoaded) - return; - - if (!request) - request = object as RpcRequest; - else if (object !== request) - return; - - ++received; - }); - - const response = await client.op1(1); - assert.equal(response, 1); - - return new Promise((resolve, reject) => setTimeout(() => { - removeListener(); - (received === 1) ? resolve() : reject(new Error(`Received ${received} responses for 1 request`)); - }, 2000)); - }); - - it("should chunk data larger than 64mb", async () => { - const client = TestRpcInterface3.getClient(); - const threshold = client.configuration.protocol.transferChunkThreshold; - - let size = 2 * 1024 * 1024; - TestbedConfig.sendToMainSync({ name: CONSTANTS.SET_CHUNK_THRESHOLD, value: size }); - let data = await client.op2(size * 2, true); - assert.equal(data.byteLength, size * 2); - - for (let i = 0; i !== (size * 2); ++i) { - assert.equal(data[i], i % 2); - } - - size = 48 * 1024 * 1024; - TestbedConfig.sendToMainSync({ name: CONSTANTS.SET_CHUNK_THRESHOLD, value: size }); - data = await client.op2(size * 2, false); - assert.equal(data.byteLength, size * 2); - - TestbedConfig.sendToMainSync({ name: CONSTANTS.SET_CHUNK_THRESHOLD, value: threshold }); - }); -}); diff --git a/test-apps/testbed/frontend/_Setup.test.ts b/test-apps/testbed/frontend/_Setup.test.ts deleted file mode 100644 index d8e0111..0000000 --- a/test-apps/testbed/frontend/_Setup.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -// tslint:disable:only-arrow-functions -// tslint:disable:space-before-function-paren - -// Testing order of initialization for imodeljs-frontend and imodeljs-common -import * as frontend from "@bentley/imodeljs-frontend"; -frontend; - -import * as common from "@bentley/imodeljs-common"; -common; - -import { TestbedConfig } from "../common/TestbedConfig"; -import { assert } from "chai"; -import { TestData } from "./TestData"; - -TestbedConfig.initializeRpcFrontend(); -if (TestbedConfig.cloudRpc) - TestbedConfig.cloudRpc.protocol.pathPrefix = TestbedConfig.localServerUrlPrefix; - -describe("Testbed", function () { - if (TestbedConfig.cloudRpc) { - it("Server should be accessible", (done) => { - const info = TestbedConfig.cloudRpcParams.info; - - const req = new XMLHttpRequest(); - req.open("GET", `${TestbedConfig.localServerUrlPrefix}${TestbedConfig.swaggerURI}`); - req.addEventListener("load", () => { - assert.equal(200, req.status); - const desc = JSON.parse(req.responseText); - assert(desc.info.title === info.title && desc.info.version === info.version); - done(); - }); - - req.send(); - }); - } - - it("TestData should load (#integration)", async () => { - await TestData.load(); - }); -}); diff --git a/test-apps/testbed/package.json b/test-apps/testbed/package.json deleted file mode 100644 index 037a2df..0000000 --- a/test-apps/testbed/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "testbed", - "//private": "NOTE: this is a private package that is never published", - "private": true, - "license": "MIT", - "scripts": { - "prebuild": "rush build -t testbed", - "build": "tsc 1>&2 && npm run copy:frontendpublic && npm run copy:testpublic && npm run webpack:frontend && node ./node_modules/@bentley/build-tools/scripts/ignoreargs.js 1>&2", - "clean": "rimraf lib backend/lib frontend/lib package-deps.json coverage", - "copy:frontendpublic": "cpx \"../../core/frontend/src/public/**/*\" ./lib/backend/public", - "copy:testpublic": "cpx \"./public/**/*\" ./lib/backend/public", - "cover": "node bin/testbed.js --grep \"#integration|#WebGLPerformance\" --invert --coverage && nyc report --reporter=html", - "docs": "", - "lint": "tslint --project . 1>&2", - "webpack:frontend": "webpack --config webpack.config.js 1>&2", - "test": "node bin/testbed.js --grep \"#integration|#WebGLPerformance\" --invert", - "test-integration": "node bin/testbed.js --grep \"#integration\"", - "test:debug": "node bin/testbed.js --debug --grep \"#integration|#WebGLPerformance\" --invert" - }, - "repository": {}, - "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "body-parser": "^1.18.2", - "chai": "^4.1.2", - "commander": "^2.14.1", - "electron": "^4.0.1", - "express": "^4.16.3", - "fs-extra": "^6.0.1", - "fuse.js": "^3.3.0", - "i18next": "^10.2.2", - "i18next-browser-languagedetector": "^2.1.0", - "i18next-xhr-backend": "^2.0.1", - "js-base64": "^2.4.5", - "object-assign": "^4.1.1", - "resolve": "^1.1.7", - "save": "^2.3.3", - "semver": "^5.5.0", - "ws": "^6.0.0" - }, - "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@types/body-parser": "^1.17.0", - "@types/chai": "^4.1.4", - "@types/express": "^4.16.1", - "@types/fs-extra": "^4.0.7", - "@types/i18next": "^8.4.2", - "@types/i18next-browser-languagedetector": "^2.0.1", - "@types/js-base64": "^2.3.1", - "@types/mocha": "^5.2.5", - "@types/node": "10.12.18", - "@types/webpack": "^3.8.5", - "@types/semver": "^5.5.0", - "@types/ws": "^6.0.1", - "chai": "^4.1.2", - "cpx": "^1.5.0", - "mocha": "^5.2.0", - "node-glob": "^1.2.0", - "glob": "^7.1.2", - "null-loader": "^0.1.1", - "rimraf": "^2.6.2", - "source-map-loader": "^0.2.3", - "tslint": "^5.11.0", - "typescript": "~3.2.2", - "webpack": "^4.20.2", - "find-root": "1.1.0", - "nyc": "^13.0.1", - "istanbul-lib-instrument": "^2.3.2", - "istanbul-lib-hook": "^1.2.2" - } -} diff --git a/test-apps/testbed/tslint.json b/test-apps/testbed/tslint.json deleted file mode 100644 index b94f1bf..0000000 --- a/test-apps/testbed/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@bentley/build-tools/tslint.json", - "rules": { - "no-direct-imports": false // For this test package, this does not matter. - } -} \ No newline at end of file diff --git a/test-apps/testbed/webpack_performance.config.js b/test-apps/testbed/webpack_performance.config.js deleted file mode 100644 index 621a8b0..0000000 --- a/test-apps/testbed/webpack_performance.config.js +++ /dev/null @@ -1,53 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -const path = require("path"); -const glob = require("glob"); -const webpack = require("webpack"); -const raw = require("@bentley/config-loader/lib/IModelJsConfig").IModelJsConfig.init(true /*suppress error*/, true); -module.exports = { - mode: "development", - entry: glob.sync(path.resolve(__dirname, "lib/frontend/performance/*.test.js")), - output: { - path: path.resolve(__dirname, "lib/dist"), - filename: "testbed.js", - devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]" - }, - devtool: "nosources-source-map", - module: { - rules: [ - { - test: /\.js$/, - use: "source-map-loader", - enforce: "pre" - }, - { - test: /azure-storage|AzureFileHandler|UrlFileHandler/, - use: "null-loader" - } - ] - }, - stats: "errors-only", - optimization: { - nodeEnv: "production" - }, - externals: { - fs: "require('fs')" - }, - plugins: [ - // Makes some environment variables available to the JS code, for example: - // if (process.env.NODE_ENV === "development") { ... }. See `./env.js`. - new webpack.DefinePlugin({ - "process.env": Object.keys(raw) - .filter((key) => { - return key.match(/^imjs_/i); - }) - .reduce((env, key) => { - env[key] = JSON.stringify(raw[key]); - return env; - }, {}), - }) - ] -}; diff --git a/test-apps/ui-test-app/package.json b/test-apps/ui-test-app/package.json index 052ec49..7f72012 100644 --- a/test-apps/ui-test-app/package.json +++ b/test-apps/ui-test-app/package.json @@ -77,17 +77,17 @@ "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/webpack-tools": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-webserver": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/webpack-tools": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-webserver": "0.190.0", "@bentley/icons-generic-webfont": "^0.0.9", "@types/body-parser": "^1.17.0", "@types/express": "^4.16.1", @@ -116,24 +116,24 @@ "webpack": "^4.20.2" }, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/electron-manager": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/imodeljs-clients-backend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-quantity": "0.189.0", - "@bentley/imodeljs-backend": "0.189.0", - "@bentley/presentation-backend": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-components": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0", - "@bentley/ui-ninezone": "0.189.0", - "@bentley/ui-framework": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/electron-manager": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/imodeljs-clients-backend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-quantity": "0.190.0", + "@bentley/imodeljs-backend": "0.190.0", + "@bentley/presentation-backend": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-components": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0", + "@bentley/ui-ninezone": "0.190.0", + "@bentley/ui-framework": "0.190.0", "body-parser": "^1.18.2", "express": "^4.16.3", "mobx": "^5.8.0", diff --git a/test-apps/ui-test-app/public/locales/en/SampleApp.json b/test-apps/ui-test-app/public/locales/en/SampleApp.json index 05706a3..2151b82 100644 --- a/test-apps/ui-test-app/public/locales/en/SampleApp.json +++ b/test-apps/ui-test-app/public/locales/en/SampleApp.json @@ -108,7 +108,8 @@ "closePropertyGrid": "Close Property Grid", "showShortcutsMenu": "Show Shortcuts Menu", "shortcutsSubMenu": "Shortcuts Submenu Sample", - "openNestedFrontstage1": "Open Nested Frontstage" + "openNestedFrontstage1": "Open Nested Frontstage", + "switchLayout": "Switch layouts" }, "tools": { "ToolWithSettings": { @@ -120,6 +121,7 @@ "Options": "Options", "Lock": "Lock", "City": "City", + "Color": "Color", "State": "State", "Coordinate": "Coordinate", "Length": "Length" @@ -175,6 +177,7 @@ }, "widgets": { "NavigationTree": "Navigation Tree", + "VisibilityTree": "Visibility Tree", "BreadcrumbDemo": "Breadcrumb Demo", "ModelSelector": "Model Selector", "StatusBar": "Status Bar", diff --git a/test-apps/ui-test-app/src/frontend/appui/AppUi.tsx b/test-apps/ui-test-app/src/frontend/appui/AppUi.tsx index 046497b..d29c3cb 100644 --- a/test-apps/ui-test-app/src/frontend/appui/AppUi.tsx +++ b/test-apps/ui-test-app/src/frontend/appui/AppUi.tsx @@ -22,6 +22,7 @@ import "./widgets/TableDemoWidget"; import "./widgets/FeedbackWidget"; import "./widgets/NavigationTreeWidget"; import "./widgets/PropertyGridDemoWidget"; +import "./widgets/VisibilityTreeWidget"; import "./tooluiproviders/Tool1UiProvider"; import "./tooluiproviders/Tool2UiProvider"; import "./statusbars/AppStatusBar"; diff --git a/test-apps/ui-test-app/src/frontend/appui/contentviews/IModelViewport.tsx b/test-apps/ui-test-app/src/frontend/appui/contentviews/IModelViewport.tsx index 4dc4fb3..83f2282 100644 --- a/test-apps/ui-test-app/src/frontend/appui/contentviews/IModelViewport.tsx +++ b/test-apps/ui-test-app/src/frontend/appui/contentviews/IModelViewport.tsx @@ -71,6 +71,8 @@ class MockIModelViewport extends React.Component { public render(): React.ReactNode { const divStyle: React.CSSProperties = { + width: "100%", + height: "100%", backgroundColor: this.props.bgColor, }; const canvasStyle: React.CSSProperties = { @@ -79,8 +81,8 @@ class MockIModelViewport extends React.Component { }; return ( -
- { this._htmlCanvas = element; }} +
+ { this._htmlCanvas = element; }} onMouseMove={this._onMouseMove} onMouseLeave={this._onMouseLeave} onMouseDown={this._onMouseDown} diff --git a/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage1.tsx b/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage1.tsx index 9b0e86c..ef5fb38 100644 --- a/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage1.tsx +++ b/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage1.tsx @@ -21,6 +21,7 @@ import { CommandItemDef, FrontstageManager, CoreTools, + ContentLayoutManager, } from "@bentley/ui-framework"; import { AppStatusBarWidgetControl } from "../statusbars/AppStatusBar"; @@ -96,7 +97,6 @@ class FrontstageToolWidget extends React.Component { /** Command that opens a nested Frontstage */ private get _openNestedFrontstage1() { return new CommandItemDef({ - commandId: "openNestedFrontstage1", iconSpec: "icon-placeholder", labelKey: "SampleApp:buttons.openNestedFrontstage1", execute: async () => { @@ -107,6 +107,23 @@ class FrontstageToolWidget extends React.Component { }); } + /** Command that opens a nested Frontstage */ + private get _switchLayout() { + return new CommandItemDef({ + iconSpec: "icon-placeholder", + labelKey: "SampleApp:buttons.switchLayout", + execute: async () => { + const activeFrontstageDef = FrontstageManager.activeFrontstageDef; + if (activeFrontstageDef) { + const contentLayout = ContentLayoutManager.findLayout("TwoHalvesHorizontal"); + if (contentLayout && activeFrontstageDef.contentGroup) { + ContentLayoutManager.setActiveLayout(contentLayout, activeFrontstageDef.contentGroup); + } + } + }, + }); + } + private _horizontalToolbar = - + } />; diff --git a/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage2.tsx b/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage2.tsx index 96fe989..564a653 100644 --- a/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage2.tsx +++ b/test-apps/ui-test-app/src/frontend/appui/frontstages/Frontstage2.tsx @@ -72,7 +72,7 @@ export class Frontstage2 extends FrontstageProvider { , + , ]} /> } diff --git a/test-apps/ui-test-app/src/frontend/appui/tooluiproviders/Tool1UiProvider.tsx b/test-apps/ui-test-app/src/frontend/appui/tooluiproviders/Tool1UiProvider.tsx index a993be1..a616932 100644 --- a/test-apps/ui-test-app/src/frontend/appui/tooluiproviders/Tool1UiProvider.tsx +++ b/test-apps/ui-test-app/src/frontend/appui/tooluiproviders/Tool1UiProvider.tsx @@ -6,8 +6,9 @@ import * as React from "react"; import { ConfigurableUiManager, ConfigurableCreateInfo, ToolUiProvider } from "@bentley/ui-framework"; import { IModelApp, NotifyMessageDetails, OutputMessagePriority } from "@bentley/imodeljs-frontend"; +import { HSVColor, ColorDef } from "@bentley/imodeljs-common"; -import { ColorSwatch } from "@bentley/ui-components"; +import { ColorSwatch, HueSlider, AlphaSlider, SaturationPicker, ColorPickerButton } from "@bentley/ui-components"; import { ToolAssistanceItem, ToolAssistanceSeparator } from "@bentley/ui-ninezone"; import { SampleAppIModelApp } from "../.."; @@ -23,13 +24,83 @@ class Tool1UiProvider extends ToolUiProvider { } } -class Tool1Settings extends React.Component { - private _handleColorChange = (color: string) => { - const msg = `Color set to ${color}`; +interface State { + alpha: number; // slider value from 0 to 1 (ColorDef want 0-255) + hsv: HSVColor; + userColor: ColorDef; +} + +class Tool1Settings extends React.Component<{}, State> { + constructor(props: any) { + super(props); + const hsv = new HSVColor(); + hsv.h = 30; + hsv.s = 30; + hsv.v = 30; + const alpha = .5; + const userColor = hsv.toColorDef(); + userColor.setAlpha(alpha * 255); + this.state = { alpha, hsv, userColor }; + } + + private _handleColorChange = (color: ColorDef) => { + const msg = `Color set to ${color.toRgbString()} alpha=${(color.getAlpha() / 255) * 100}%`; + IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); + } + + private _handleHueChange = (hue: HSVColor) => { + const userColor = hue.toColorDef(); + userColor.setAlpha(this.state.alpha * 255); + const msg = `Hue set to ${userColor.toRgbString()} alpha=${(userColor.getAlpha() / 255) * 100}%`; + IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); + this.setState({ hsv: hue, userColor }); + } + + private _handleSaturationChange = (saturation: HSVColor) => { + const userColor = saturation.toColorDef(); + userColor.setAlpha(this.state.alpha * 255); + const msg = `Saturation set to ${userColor.toRgbString()} alpha=${(userColor.getAlpha() / 255) * 100}%`; + IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); + this.setState({ hsv: saturation, userColor }); + } + + private _handleAlphaChange = (alpha: number) => { + const msg = `Alpha set to ${JSON.stringify(alpha * 100)}%`; + IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); + const userColor = this.state.userColor.clone(); + userColor.setAlpha(alpha * 255); + this.setState({ alpha, userColor }); + } + + private _onColorPick = (color: ColorDef) => { + const msg = `Color set to ${color.toRgbString()} alpha=${(color.getAlpha() / 255) * 100}%`; IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); + const hsvColor = HSVColor.fromColorDef(color); + this.setState({ userColor: color, hsv: hsvColor }); } public render(): React.ReactNode { + // const vertDivStyle: React.CSSProperties = { + // height: `120px`, + // }; + + const satDivStyle: React.CSSProperties = { + width: `200px`, + height: `200px`, + }; + + /* + + Green + + + */ + + const redDef = ColorDef.from(255, 0, 0, 0); + const blueDef = ColorDef.from(0, 0, 255, 0); + const purpleDef = new ColorDef("#800080"); + const brownDef = new ColorDef("hsl(59,67%,30%)"); + return (
@@ -51,40 +122,61 @@ class Tool1Settings extends React.Component { - - + + - - + + - - - - - + - + - + - + + + + + + + + + + + + + + + + + + + + +
{SampleAppIModelApp.i18n.translate("SampleApp:tool1.radio")}
{SampleAppIModelApp.i18n.translate("SampleApp:tool1.range")}
Red
Green
Blue
Purple
Brown
User Color
Hue
Alpha
Saturation
Color Picker
-
+
); } } +/* + +
+
+*/ class Tool1Assistance extends React.Component { public render(): React.ReactNode { return ( diff --git a/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.scss b/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.scss index e7e11cb..9d6d5b5 100644 --- a/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.scss +++ b/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.scss @@ -4,6 +4,10 @@ *--------------------------------------------------------------------------------------------*/ @import "@bentley/ui-core/lib/ui-core/index"; +.mobx-demo-view { + color: $buic-text-color; +} + .bird-name { width: 200px; display: inline-block; diff --git a/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.tsx b/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.tsx index 5aeedf9..322acf9 100644 --- a/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.tsx +++ b/test-apps/ui-test-app/src/frontend/appui/widgets/MobxDemoWidget/MobxDemoView.tsx @@ -28,7 +28,7 @@ export class MobxDemoView extends React.Component { } = this.props; return ( -
+

Bird Store

You have {birdCount} birds.

diff --git a/test-apps/ui-test-app/src/frontend/appui/widgets/VisibilityTreeWidget.tsx b/test-apps/ui-test-app/src/frontend/appui/widgets/VisibilityTreeWidget.tsx new file mode 100644 index 0000000..9a63036 --- /dev/null +++ b/test-apps/ui-test-app/src/frontend/appui/widgets/VisibilityTreeWidget.tsx @@ -0,0 +1,53 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as React from "react"; +import { + ConfigurableUiManager, + ConfigurableCreateInfo, + WidgetControl, + VisibilityTree, +} from "@bentley/ui-framework"; +import { IModelConnection, IModelApp, Viewport, SelectedViewportChangedArgs } from "@bentley/imodeljs-frontend"; + +export class VisibilityTreeWidgetControl extends WidgetControl { + constructor(info: ConfigurableCreateInfo, options: any) { + super(info, options); + if (options && options.iModelConnection) + this.reactElement = ; + else + this.reactElement = "no imodel"; + } +} + +interface VisibilityTreeWidgetProps { + iModelConnection: IModelConnection; +} +interface VisibilityTreeWidgetState { + activeViewport?: Viewport; +} +class VisibilityTreeWidget extends React.Component { + public constructor(props: VisibilityTreeWidgetProps, context?: any) { + super(props, context); + this.state = { activeViewport: IModelApp.viewManager.selectedView }; + } + public componentDidMount() { + IModelApp.viewManager.onSelectedViewportChanged.addListener(this.onSelectedViewportChanged); + } + public componentWillUnmount() { + IModelApp.viewManager.onSelectedViewportChanged.removeListener(this.onSelectedViewportChanged); + } + // tslint:disable-next-line: naming-convention + private onSelectedViewportChanged = (args: SelectedViewportChangedArgs) => { + this.setState({ activeViewport: args.current }); + } + public render() { + return (); + } +} + +ConfigurableUiManager.registerControl("VisibilityTreeWidget", VisibilityTreeWidgetControl); diff --git a/test-apps/ui-test-app/src/frontend/index.scss b/test-apps/ui-test-app/src/frontend/index.scss index 3d98f08..da374d7 100644 --- a/test-apps/ui-test-app/src/frontend/index.scss +++ b/test-apps/ui-test-app/src/frontend/index.scss @@ -9,6 +9,7 @@ body { margin: 0; padding: 0; font-family: $uicore-sans; + color: $buic-foreground-body; } .red-text { diff --git a/test-apps/ui-test-app/src/frontend/tools/ToolWithSettings.ts b/test-apps/ui-test-app/src/frontend/tools/ToolWithSettings.ts index 026d97e..f192c06 100644 --- a/test-apps/ui-test-app/src/frontend/tools/ToolWithSettings.ts +++ b/test-apps/ui-test-app/src/frontend/tools/ToolWithSettings.ts @@ -11,6 +11,7 @@ import { } from "@bentley/imodeljs-frontend"; import { Point3d } from "@bentley/geometry-core"; +import { ColorDef, ColorByName } from "@bentley/imodeljs-common"; const enum ToolOptions { Red, @@ -58,6 +59,53 @@ export class ToolWithSettings extends PrimitiveTool { this._optionsValue.value = option; } + // ------------- Color --------------- + private static _colorName = "color"; + private static _getColorDescription = (): PropertyDescription => { + return { + name: ToolWithSettings._colorName, + displayLabel: IModelApp.i18n.translate("SampleApp:tools.ToolWithSettings.Prompts.Color"), + typename: "number", + editor: { + name: "color-picker", + params: [ + { + type: PropertyEditorParamTypes.ColorData, + colorValues: [ + ColorByName.blue as number, + ColorByName.red as number, + ColorByName.green as number, + ColorByName.yellow as number, + ColorByName.black as number, + ColorByName.gray as number, + ColorByName.purple as number, + ColorByName.pink as number, + ], + numColumns: 2, + }, + ], + }, + }; + } + + private _colorValue = new ToolSettingsValue(ColorByName.blue as number); + + public get colorValue(): number { + return this._optionsValue.value as number; + } + + public set colorValue(value: number) { + this._optionsValue.value = value; + } + + public get colorDef(): ColorDef { + return new ColorDef(this._optionsValue.value as number); + } + + public set colorDef(value: ColorDef) { + this._optionsValue.value = value.tbgr; + } + // ------------- boolean based toggle button --------------- private static _lockToggleName = "lockToggle"; private static _getLockToggleDescription = (): PropertyDescription => { @@ -244,6 +292,7 @@ export class ToolWithSettings extends PrimitiveTool { const readonly = true; const toolSettings = new Array(); toolSettings.push(new ToolSettingsPropertyRecord(this._optionsValue.clone() as PrimitiveValue, ToolWithSettings._getEnumAsPicklistDescription(), { rowPriority: 0, columnIndex: 2 })); + toolSettings.push(new ToolSettingsPropertyRecord(this._colorValue.clone() as PrimitiveValue, ToolWithSettings._getColorDescription(), { rowPriority: 2, columnIndex: 2 })); toolSettings.push(new ToolSettingsPropertyRecord(this._lockValue.clone() as PrimitiveValue, ToolWithSettings._getLockToggleDescription(), { rowPriority: 5, columnIndex: 2 })); toolSettings.push(new ToolSettingsPropertyRecord(this._cityValue.clone() as PrimitiveValue, ToolWithSettings._getCityDescription(), { rowPriority: 10, columnIndex: 2 })); toolSettings.push(new ToolSettingsPropertyRecord(this._stateValue.clone() as PrimitiveValue, ToolWithSettings._getStateDescription(), { rowPriority: 10, columnIndex: 4 })); @@ -253,6 +302,11 @@ export class ToolWithSettings extends PrimitiveTool { return toolSettings; } + private showColorInfoFromUi(updatedValue: ToolSettingsPropertySyncItem) { + const msg = `Property '${updatedValue.propertyName}' updated to value ${this.colorDef.toRgbString()}`; + IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); + } + private showInfoFromUi(updatedValue: ToolSettingsPropertySyncItem) { const msg = `Property '${updatedValue.propertyName}' updated to value ${updatedValue.value.value}`; IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg)); @@ -287,6 +341,9 @@ export class ToolWithSettings extends PrimitiveTool { } else if (updatedValue.propertyName === ToolWithSettings._lengthName) { this.length = updatedValue.value.value as string; this.showInfoFromUi(updatedValue); + } else if (updatedValue.propertyName === ToolWithSettings._colorName) { + this.colorValue = updatedValue.value.value as number; + this.showColorInfoFromUi(updatedValue); } // return true is change is valid diff --git a/test-apps/webworker-test-app/package.json b/test-apps/webworker-test-app/package.json index 3cbc502..db45107 100644 --- a/test-apps/webworker-test-app/package.json +++ b/test-apps/webworker-test-app/package.json @@ -46,16 +46,16 @@ "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/webpack-tools": "0.189.0", - "@bentley/build-tools": "0.189.0", + "@bentley/webpack-tools": "0.190.0", + "@bentley/build-tools": "0.190.0", "rimraf": "^2.6.2", "tsconfig-paths": "^3.3.2", "tslint": "^5.11.0", "typescript": "~3.2.2" }, "dependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0" } } diff --git a/tools/build/CHANGELOG.json b/tools/build/CHANGELOG.json index 58039a5..27c8752 100644 --- a/tools/build/CHANGELOG.json +++ b/tools/build/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/build-tools", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/build-tools_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/build-tools_v0.189.0", diff --git a/tools/build/CHANGELOG.md b/tools/build/CHANGELOG.md index a6939ab..5c8efcc 100644 --- a/tools/build/CHANGELOG.md +++ b/tools/build/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/build-tools -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/tools/build/package.json b/tools/build/package.json index d4597fd..cbe1bc2 100644 --- a/tools/build/package.json +++ b/tools/build/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/build-tools", - "version": "0.189.0", + "version": "0.190.0", "description": "Bentley build tools", "license": "MIT", "repository": { diff --git a/tools/build/scripts/extract-api.js b/tools/build/scripts/extract-api.js index 94f6731..3b7007f 100644 --- a/tools/build/scripts/extract-api.js +++ b/tools/build/scripts/extract-api.js @@ -66,15 +66,22 @@ child.stdout.on('data', (data) => { child.stderr.on('data', (data) => { if (data.includes("You have changed the public API signature for this project.") && isCI) errorCode = 1; - if (data.includes("The @param block") || data.includes("TSDoc") || data.includes("HTML") || data.includes("Structured content") || data.includes("The code span") || data.includes("A backslash can only be used") || data.includes("for a code fence")) { + + // Workaround: Errors we currently hit in the iModel.js that will be fixed with API-extractor v7. + if (data.includes("The @param block") || + data.includes("TSDoc") || + data.includes("HTML") || + data.includes("Structured content") || + data.includes("The code span") || + data.includes("A backslash can only be used") || + data.includes("for a code fence")) { //Filter out these errors } else { process.stderr.write(data); - if (isCI) { + if (isCI) errorCode = 1; } - -}) +}); child.on('error', (data) => { console.log(data); }); diff --git a/tools/certa/.npmignore b/tools/certa/.npmignore new file mode 100644 index 0000000..e67f553 --- /dev/null +++ b/tools/certa/.npmignore @@ -0,0 +1,13 @@ +# start off ignoring everything, and then add back only the files we want +* +!lib/**/*.d.ts +!lib/**/*.js +!lib/assets/** +!bin/** +assets/** +test +perftest +!public/** +!package.json +!*.md +!*.schema.json diff --git a/tools/certa/CHANGELOG.json b/tools/certa/CHANGELOG.json new file mode 100644 index 0000000..a03f806 --- /dev/null +++ b/tools/certa/CHANGELOG.json @@ -0,0 +1,17 @@ +{ + "name": "@bentley/certa", + "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/certa_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Initial version of Certa, a new tool for running mocha tests in different environments." + } + ] + } + } + ] +} diff --git a/tools/certa/CHANGELOG.md b/tools/certa/CHANGELOG.md new file mode 100644 index 0000000..37c0b5b --- /dev/null +++ b/tools/certa/CHANGELOG.md @@ -0,0 +1,11 @@ +# Change Log - @bentley/certa + +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Initial version of Certa, a new tool for running mocha tests in different environments. + diff --git a/tools/certa/LICENSE.md b/tools/certa/LICENSE.md new file mode 100644 index 0000000..aa0b4da --- /dev/null +++ b/tools/certa/LICENSE.md @@ -0,0 +1,11 @@ +# MIT License + +Copyright © 2019 Bentley Systems, Inc. + +All rights reserved. + +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. diff --git a/tools/certa/README.md b/tools/certa/README.md new file mode 100644 index 0000000..9e37720 --- /dev/null +++ b/tools/certa/README.md @@ -0,0 +1,230 @@ +# Certa + +__Certa__ is a tool for easily running [mocha](https://mochajs.org/) tests in different environments. +With Certa, you can run the exact same tests in chrome, electron, and node. + +The following types of tests are supported: + - Frontend-only unit tests + - Integration tests with a local backend + - Integration tests with a remote (deployed) backend + +## Getting Started + +There are two steps to running tests with Certa: + +1. **Bundle your tests.** Depending on your project configuration, this can be as easy as running `webpack`. +2. **Choose a test runner.** This determines which environment tests will run in. + +Assuming your bundled tests are located at `lib/bundled-tests.js`, you can run chrome tests on the command line via: +```sh +certa --testBundle lib/bundled-tests.js --runner chrome +``` + +### Configuration +Certa supports a number of other options that let you configure mocha settings, ports used for debugging, etc. +The easiest way to configure Certa is by creating a `certa.json` config file. Here's an example configuration: + +```json +{ + // Comments are allowed here! + "testBundle": "./lib/bundled-tests.js", + "instrumentedTestBundle": "./lib/bundled-tests.instrumented.js", + "ports": { + "debugging": 5858, + "frontendDebugging": 9223 + }, + "mochaOptions": { + "timeout": 2000 + } +} +``` + +> By default, Certa will look for a `certa.json` file in the current working directory, +> but you can override this via the `--config` command-line option. + +#### JSON Schema +Certa also includes a JSON schema to help with editing these configuration files. +You can configure VS Code to use this schema to provide intellisense (and allow comments) by adding the following to your workspace settings: + +```json + "files.associations": { + "certa.json": "jsonc" + }, + "json.schemas": [ + { + "fileMatch": [ "certa.json" ], + "url": "./node_modules/@bentley/certa/certa.schema.json" + }, + ], +``` + +## How it Works + +In order to work in both browser and node environments, Certa requires tests to be bundled into a single JavaScript file. +You can use a module bundler like [webpack](https://webpack.js.org/) or [rollup](https://rollupjs.org) to create this bundle. +See [below](#Bundling-Tests) for an example webpack configuration. + +In addition to specifying a `testBundle`, you'll also need to choose which environment your tests should run in by specifying a _test runner_. +Certa currently includes test runners for electron, chrome, and node, but more may be added in the future. + +### Child Processes +In order to realistically simulate web and desktop environments, Certa test runners may spawn a number of child processes. +The following diagram shows a simplified process tree for each test runner: + +``` + ELECTRON ┊ CHROME ┊ NODE +┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ + ┌───────────────┐ ┊ ┊ + │ certa │ ┊ ┊ + └───────────────┘ ┊ ╔═══════════════╗ ┊ + │ ┊ ║ certa ║ ┊ + ▼ ┊ ╚═══════════════╝ ┊ ┏━━━━━━━━━━━━━━━━━━━┓ + ╔═════════════════╗ ┊ ╱ ╲ ┊ ┃ ╔═══════════════╗ ┃ + ║ electron (main) ║ ┊ ╱ ╲ ┊ ┃ ║ certa ║ ┃ + ╚═════════════════╝ ┊ ┌─────────┐ ┏━━━━━━━━━┓ ┊ ┃ ╚═══════════════╝ ┃ + │ ┊ │ express │ ┃ chrome* ┃ ┊ ┗━━━━━━━━━━━━━━━━━━━┛ + ▼ ┊ └─────────┘ ┗━━━━━━━━━┛ ┊ + ┏━━━━━━━━━━━━━━━━━━━━━┓ ┊ ┊ + ┃ electron (renderer) ┃ ┊ ┊ + ┗━━━━━━━━━━━━━━━━━━━━━┛ ┊ ┊ + ┊ ┊ +┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┴┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┴┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ + 🞑 = Frontend ⧈ = Backend □ = Other +``` +> *Chrome technically spawns many child processes of its own, but since we're using Puppeteer to automate chrome, +> this can be considered an implementation detail. + +Note that each test runner designates a single **frontend** and **backend** process (for the node test runner, +there is only one process which serves as _both_ frontend and backend). Tests are ***always*** executed in the **frontend** process. + +### Local Integration Tests +You can use the optional `backendInitModule` setting to specify a CommonJs module that should be `require`d in Certa's **backend** +process _before_ executing tests. For example, you can define a local express server that will handle API requests made by your tests. +Alternatively, (with the electron test runner), you can use this to handle IPC messages in the electron main process. + +## Measuring Code Coverage + +Certa makes measuring code coverage super easy! Just use the `--cover` CLI option, and Certa will automatically use +[nyc](https://github.com/istanbuljs/nyc#nyc) to create a single combined report showing both backend and frontend coverage. +Any nyc settings in `package.json` or `.nycrc` will be honored. + +> **NB:** Code coverage is currently only supported by the **chrome** and **node** test runners. +> +> Also, when using the chrome test runner, your bundled frontend code must be pre-instrumented. +> We recommend using [istanbul-instrumenter-loader](https://github.com/webpack-contrib/istanbul-instrumenter-loader) for this. + +## Debugging Certa Tests with VS Code + +The following is an example VS Code `launch.json` for debugging Certa tests: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Certa Tests (backend)", + "type": "node", + "request": "launch", + "program": "${workspaceFolder}/node_modules/@bentley/certa/bin/certa", + "args": [ "--debug", "-r", "${input:integrationTestEnvironment}" ], + "outputCapture": "std", // Needed to correctly print test results to Debug Console + "port": 5858 // Must match ports.debugging in certa.json + }, + { + "name": "Certa Tests (frontend)", + "type": "chrome", + "request": "attach", + "port": 9223, // Must match ports.frontendDebugging in certa.json + }, + ], + "compounds": [ + { + "name": "Certa Tests", + "configurations": [ + "Certa Tests (frontend)", + "Certa Tests (backend)" + ] + } + ], + "inputs": [ + { + "id": "integrationTestEnvironment", + "description": "Select integration test frontend environment", + "type": "pickString", + "options": [ "chrome", "electron", "node" ] + } + ] +} +``` +> **NB:** This configuration assumes that `${workspaceFolder}/certa.json` exists and defines a valid `testBundle` path. + +With this config, you can set breakpoints in both your test backend (if a `backendInitModule` was specified in certa.json) and frontend (tests). +When you launch "Certa Tests", VS Code will prompt you to choose an environment, then start[multi-target debugging](https://code.visualstudio.com/docs/editor/debugging#_multitarget-debugging). + +Note that the frontend debugger will always fail to attach when running tests in node, since there is no separate frontend process in this case. + +The frontend debugger may also fail to attach if you break in your test backend's initialization for too long – if this happens you can just +manually re-attach once a chrome/electron window appears by launching the "Certa Tests (frontend)" configuration. + + +### Why We Use Predefined Ports +VS Code's Node.js debugger will normally add the `--inspect-brk={auto-determined port}` arg to programs listed in a launch.json configuration. +This is convenient for debugging most programs, since we usually don't know (or care) which port the debugger should use (and this guarantees +the port will be free). But this does nothing for us if we really care about debugging some child process of that program (i.e., electron). + +However, if we specify a `port` option in that launch.json configuration, VS Code will omit the `--inspect-brk`, and let Certa decide +which child process should activate the v8 inspector. +> This also means that by specifying a port, you can safely set your launch.json to run `npm test -- --debug` if your test script uses Certa! + +Note that VS Code does have an option to [autoAttachChildProcesses](https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_automatically-attach-debugger-to-nodejs-subprocesses), +but this only works by examining program arguments, which won't work if Certa _does_ end up deciding that the original process should be debugged. + +## Bundling Tests +Here's an example webpack config that you can use to bundle your tests: + +```JavaScript +const path = require("path"); +const glob = require("glob"); + +function createConfig(shouldInstrument) { + const config = { + mode: "development", + entry: glob.sync(path.resolve(__dirname, "lib/**/*.test.js")), + output: { + path: path.resolve(__dirname, "lib/dist"), + filename: "bundled-tests.js", + devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]" + }, + devtool: "nosources-source-map", + module: { + rules: [ + { + test: /\.js$/, + use: "source-map-loader", + enforce: "pre" + } + ] + }, + }; + + if (shouldInstrument) { + config.output.filename = "bundled-tests.instrumented.js"; + config.module.rules.push({ + test: /\.(jsx?|tsx?)$/, + include: path.resolve(__dirname, "lib"), + exclude: path.resolve(__dirname, "lib/test"), + loader: "istanbul-instrumenter-loader", + enforce: "post", + }); + } + + return config; +} + +// Exporting two configs in a array like this actually +// tells webpack to run twice - once for each config. +module.exports = [ + createConfig(true), + createConfig(false) +] +``` \ No newline at end of file diff --git a/tools/certa/bin/certa.js b/tools/certa/bin/certa.js new file mode 100644 index 0000000..bbedcc9 --- /dev/null +++ b/tools/certa/bin/certa.js @@ -0,0 +1,99 @@ +#!/usr/bin/env node + +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +"use strict"; + +const yargs = require("yargs"); +yargs.strict(true) + .wrap(Math.min(150, yargs.terminalWidth())) + .options({ + "runner": { + alias: "r", + choices: ["electron", "chrome", "node"], + describe: `The target test runner environment.`, + type: "string", + demandOption: true, + }, + "backend": { + alias: "b", + describe: `The path to a javascript file containing backend initialization logic.`, + type: "string" + }, + "config": { + alias: "c", + describe: `Path to a certa.json config file.`, + type: "string", + default: "./certa.json" + }, + "cover": { + describe: `Measure code coverage using nyc.`, + type: "boolean", + default: undefined + }, + "debug": { + describe: `Run in debug mode.`, + type: "boolean", + default: undefined + }, + "testBundle": { + alias: "t", + describe: `The path to a javascript file containing all mocha tests to be run.`, + type: "string" + }, + "grep": { + alias: "g", + requiresArg: "pattern", + describe: `Only run tests matching `, + type: "string", + }, + "fgrep": { + alias: "f", + requiresArg: "string", + describe: `Only run tests containing `, + type: "string", + }, + "invert": { + alias: "i", + describe: `Inverts --grep and --fgrep matches`, + type: "boolean", + default: undefined, + }, + }); + +const path = require("path"); +const fs = require("fs"); +const { certa } = require("../lib/CertaCore"); +const { CertaConfig } = require("../lib/CertaConfig"); + +const opts = { + debug: yargs.argv.debug, + cover: yargs.argv.cover, + testBundle: yargs.argv.testBundle, + backendInitModule: yargs.argv.backend, + mochaOptions: { + grep: yargs.argv.grep, + fgrep: yargs.argv.fgrep, + invert: yargs.argv.invert, + } +} + +const configFilePath = path.resolve(process.cwd(), yargs.argv.config); +let config; +if (fs.existsSync(configFilePath)) + config = CertaConfig.fromConfigFile(configFilePath, opts); +else + config = CertaConfig.fromObject(opts); + +(async () => { + try { + await certa(yargs.argv.runner, config); + } catch (error) { + console.error(error.message); + console.error(error.stack); + process.exit(1); + } +})(); diff --git a/tools/certa/certa.schema.json b/tools/certa/certa.schema.json new file mode 100644 index 0000000..57907c3 --- /dev/null +++ b/tools/certa/certa.schema.json @@ -0,0 +1,124 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://dev.bentley.com/certa.json", + "type": "object", + "description": "certa.json", + "required": [ + "testBundle" + ], + "properties": { + "debug": { + "type": "boolean", + "description": "Run tests in debug mode. If debug is enabled, chrome and electron windows will be visible, and remote debugging will be enabled in chrome.", + "default": false + }, + "cover": { + "type": "boolean", + "description": "Run tests in coverage mode. If cover is enabled, Certa will measure code coverage according via `nyc`.", + "default": false + }, + "testBundle": { + "type": "string", + "description": "The path to a javascript file containing all mocha tests to be run.", + "examples": [ + "./lib/dist/bundled-tests.js" + ] + }, + "instrumentedTestBundle": { + "type": "string", + "description": "An instanbul-instrumented version of the `testBundle`. This will be used instead of `testBundle` when running with `cover` enabled.", + "examples": [ + "./lib/dist/bundled-tests.instrumented.js" + ] + }, + "backendInitModule": { + "type": "string", + "description": "The path to a JavaScript module containing backend initialization logic.\nThis module will be required in Certa's \"main\" process ***before*** initializing a test runner.\nIf the file's `module.exports` is a Promise, that Promise will also be awaited before running tests.", + "examples": [ + "./lib/backend/backend.js" + ] + }, + "ports": { + "type": "object", + "description": "Defines ports used by the chrome and electron test runners.", + "properties": { + "debugging": { + "type": "integer", + "description": "The port that will be used by the v8 inspector (in Certa's \"main\" process) to communicate with a debugger (when the `debug` option is enabled).", + "default": 5858 + }, + "frontend": { + "type": "integer", + "description": "[Chrome Only] The port that will be used to serve test assets to the frontend.", + "default": 3000 + }, + "frontendDebugging": { + "type": "integer", + "description": "[Chrome and Electron Only] The port that will be used for remote debugging (when debug is enabled).", + "default": 9223 + } + } + }, + "mochaOptions": { + "type": "object", + "description": "Defines common mocha options.", + "properties": { + "timeout": { + "type": "integer", + "description": "The default test-case timeout, in milliseconds.", + "default": 120000 + }, + "grep": { + "type": "string", + "description": "Only run tests matching this regular expression" + }, + "fgrep": { + "type": "string", + "description": "Only run tests containing this string" + }, + "invert": { + "type": "boolean", + "description": "Inverts grep and fgrep matches.", + "default": false + }, + "reporter": { + "type": "string", + "description": "Specifies the mocha reporter to use.", + "default": "spec", + "examples": [ + "spec", + "dot", + "nyan", + "tap", + "landing", + "list", + "json", + "min" + ] + } + } + }, + "chromeOptions": { + "type": "object", + "description": "Defines chrome-specific options", + "properties": { + "args": { + "type": "array", + "description": "[Chrome Only] Additional chrome arguments.", + "default": [], + "items": { + "type": "string" + } + }, + "publicDirs": { + "type": "array", + "description": "[Chrome Only] Directories that contain static assets which should be made available via the frontend webserver.", + "default": [], + "items": { + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/tools/certa/package.json b/tools/certa/package.json new file mode 100644 index 0000000..afab1a8 --- /dev/null +++ b/tools/certa/package.json @@ -0,0 +1,62 @@ +{ + "name": "@bentley/certa", + "version": "0.190.0", + "description": "A mocha-based integration test runner", + "license": "MIT", + "main": "bin/certa.js", + "repository": { + "type": "git", + "url": "https://github.com/imodeljs/imodeljs" + }, + "bin": { + "certa": "./bin/certa.js" + }, + "scripts": { + "prebsuild": "webpack --config webpack.config.js 1>&2", + "build": "tsc 1>&2 && node ./node_modules/@bentley/build-tools/scripts/ignoreargs.js 1>&2", + "clean": "rimraf lib package-deps.json", + "lint": "tslint --project . 1>&2", + "test": "", + "docs": "", + "cover": "" + }, + "keywords": [ + "Bentley", + "iModel", + "iModel.js", + "EC" + ], + "author": { + "name": "Bentley Systems, Inc.", + "url": "http://www.bentley.com" + }, + "dependencies": { + "detect-port": "~1.3.0", + "electron": "^4.0.1", + "express": "^4.16.3", + "jsonc-parser": "~2.0.3", + "lodash": "^4.17.10", + "mocha": "^5.2.0", + "nyc": "^13.0.1", + "puppeteer": "~1.11.0", + "source-map-support": "^0.5.6", + "uuid": "~3.3.2", + "yargs": "^12.0.0" + }, + "devDependencies": { + "@bentley/build-tools": "0.190.0", + "@types/chai": "^4.1.4", + "@types/detect-port": "~1.1.0", + "@types/express": "^4.16.1", + "@types/lodash": "^4.14.0", + "@types/mocha": "^5.2.5", + "@types/node": "10.12.18", + "@types/puppeteer": "1.3.0", + "@types/uuid": "~3.4.4", + "@types/yargs": "^12.0.5", + "cpx": "^1.5.0", + "rimraf": "^2.6.2", + "tslint": "^5.11.0", + "typescript": "~3.2.2" + } +} diff --git a/tools/certa/src/CertaConfig.ts b/tools/certa/src/CertaConfig.ts new file mode 100644 index 0000000..e7be661 --- /dev/null +++ b/tools/certa/src/CertaConfig.ts @@ -0,0 +1,180 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as fs from "fs"; +import * as path from "path"; +import * as lodash from "lodash"; +import { parse } from "jsonc-parser"; + +/** Defines mocha options common to all test runners. */ +export interface CertaMochaOpts { + /** The default hook and test-case timeout, in milliseconds. */ + timeout: number; + /** A regular expression test filter - only tests matching this expression will be run. */ + grep?: string; + /** A string test filter - only tests containing this string will be run. */ + fgrep?: string; + /** Whether `grep` and `fgrep` matches should be inverted. */ + invert: boolean; + /** The name of a (built-in) mocha reporter to use. */ + reporter: string; + /** Mocha reporter-specific options. */ + reporterOptions?: object; +} + +/** Defines options specific to the chrome test runner */ +export interface CertaChromeOpts { + /** Array of additional chrome arguments. */ + args: string[]; + /** Array of absolute paths to directories that contain static assets which should be made available via the frontend webserver. */ + publicDirs: string[]; +} + +/** Defines ports that certa may listen on. */ +export interface CertaPortOpts { + /** The port that will be used by the v8 inspector in the "main" process to communicate with a debugger (when the `debug` option is enabled). */ + debugging: number; + /** `[Chrome Only]` The port that will be used by to serve test assets to the frontend. */ + frontend: number; + /** `[Chrome and Electron Only]` The port that will be used for remote debugging (when the `debug` option is enabled). */ + frontendDebugging: number; +} + +export interface PartialCertaConfig { + testBundle: string; + instrumentedTestBundle?: string; + backendInitModule?: string; + debug?: boolean; + ports?: Partial; + mochaOptions?: Partial; + chromeOptions?: Partial; +} + +/** Certa configuration options. */ +export interface CertaConfig { + + /** The absolute path to a JavaScript file containing all mocha tests to be run. */ + readonly testBundle: string; + + /** + * An instanbul-instrumented version of the `testBundle`. + * This will be used instead of `testBundle` when running with `cover` enabled. + */ + readonly instrumentedTestBundle?: string; + + /** + * The absolute path to a JavaScript module containing backend initialization logic. + * This module will be required in Certa's "main" process ***before*** initializing a test runner. + * If the file's `module.exports` is a Promise, that Promise will also be awaited before running tests. + * @optional + */ + readonly backendInitModule?: string; + + /** + * Whether Certa should run in "debug mode". + * When debug mode is enabled, chrome and electron windows will be visible and remote debugging is enabled. + */ + readonly debug: boolean; + + /** + * Whether Certa should measure code coverage. + * NB: This is currently only supported by the chrome and node test runners. + */ + readonly cover: boolean; + + /** Defines ports used by the chrome and electron test runners. */ + readonly ports: Readonly; + + /** Defines mocha options common to all test runners. */ + readonly mochaOptions: Readonly; + + /** Defines options specific to the chrome test runner */ + readonly chromeOptions: Readonly; +} + +const SECONDS = 1000; +const MINUTES = 60 * SECONDS; + +export namespace CertaConfig { + export const defaults = { + debug: false, + cover: false, + ports: { + debugging: 5858, + frontend: 3000, + frontendDebugging: 9223, + }, + mochaOptions: { + invert: false, + timeout: 2 * MINUTES, + reporter: "spec", + }, + chromeOptions: { + // NB: These should stay **empty** arrays, otherwise lodash.defaultsDeep will not merge them correctly. + args: new Array(), + publicDirs: new Array(), + }, + }; + + // List of config options that may be relative file paths and should be resolved to absolute paths. + const _filePathOpts = [ + "backendInitModule", + "testBundle", + "instrumentedTestBundle", + "chromeOptions.publicDirs", + ]; + + /** + * Resolves all relative file paths in `opts` to absolute paths, starting from `baseDir`. + * NB: This mutates `opts`. + * @param baseDir The starting point for resolving relative paths. + * @param opts A partial CertaConfig object. + */ + function resolvePaths(baseDir: string, opts: PartialCertaConfig): void { + for (const propPath of _filePathOpts) { + const relativeFilePath = lodash.get(opts, propPath); + if (relativeFilePath) { + if (Array.isArray(relativeFilePath)) + lodash.set(opts, propPath, relativeFilePath.map((p) => path.resolve(baseDir, p))); + else + lodash.set(opts, propPath, path.resolve(baseDir, relativeFilePath)); + } + } + } + + /** + * Creates a complete CertaConfig object by combining a partial config with default values. + * All relative paths are resolved from the current working directory. + * Throws if the `testBundle` option is undefined or invalid. + * @param opts A partial CertaConfig object. + */ + export function fromObject(opts: PartialCertaConfig): CertaConfig { + const resolvedOpts = lodash.defaultsDeep(opts, defaults); + resolvePaths(process.cwd(), resolvedOpts); + + if (!resolvedOpts.testBundle) + throw new Error("The required testBundle option was not set."); + + if (!fs.existsSync(resolvedOpts.testBundle)) + throw new Error(`The specified testBundle file "${resolvedOpts.testBundle}" does not exist.`); + + return resolvedOpts; + } + + /** + * Creates a complete CertaConfig object by loading options from a certa.json config file, + * applying run-time overrides, then combining that with default values. + * All relative paths specified in the config file are resolved from the config file directory. + * All other relative paths (overrides or defaults) are resolved from the current working directory. + * Throws if the `testBundle` option is undefined or invalid. + * @param filePath The path to a certa.json config file. + * @param overrides A partial CertaConfig object. These values will always override any options set in the config file. + */ + export function fromConfigFile(filePath: string, overrides: PartialCertaConfig): CertaConfig { + const fileContents = fs.readFileSync(filePath); + const fileOpts = parse(fileContents.toString()); // Parsing with jsonc-parser lets us safely handle comments. + resolvePaths(path.dirname(filePath), fileOpts); + return fromObject(lodash.defaultsDeep(overrides, fileOpts)); + } +} diff --git a/tools/certa/src/CertaCore.ts b/tools/certa/src/CertaCore.ts new file mode 100644 index 0000000..f7af1c9 --- /dev/null +++ b/tools/certa/src/CertaCore.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { ElectronTestRunner } from "./runners/electron/ElectronTestRunner"; +import { ChromeTestRunner } from "./runners/chrome/ChromeTestRunner"; +import { CertaConfig } from "./CertaConfig"; +import { NodeTestRunner } from "./runners/node/NodeTestRunner"; +import { relaunchForCoverage } from "./utils/CoverageUtils"; +import { startDebugger } from "./utils/SpawnUtils"; + +export interface CertaTestRunner { + readonly supportsCoverage: boolean; + initialize?(config: CertaConfig): Promise; + runTests(config: CertaConfig): Promise; +} + +export class CertaCore { + private static _runners: { [environment: string]: CertaTestRunner } = {}; + + public static registerTestRunner(environment: string, runner: CertaTestRunner) { + this._runners[environment] = runner; + } + + public static getTestRunner(environment: string): CertaTestRunner { + if (environment in this._runners) + return this._runners[environment]; + + throw new Error(`Unknown TestRunner: "${environment}"`); + } +} + +CertaCore.registerTestRunner("node", NodeTestRunner); +CertaCore.registerTestRunner("chrome", ChromeTestRunner); +CertaCore.registerTestRunner("electron", ElectronTestRunner); + +export async function certa(environment: string, config: CertaConfig): Promise { + const runner = CertaCore.getTestRunner(environment); + + // If we're going to measure code coverage, we should stop now and let an `nyc`-wrapped child process take it from here. + const alreadyInNyc = process.env.NYC_CWD !== undefined; + if (config.cover && runner.supportsCoverage && !alreadyInNyc) + return process.exit(await relaunchForCoverage()); + + if (runner.initialize) + await runner.initialize(config); + + // In debug mode, we should now start listening for debugger connections (if we're not already). + if (config.debug && config.backendInitModule) + startDebugger(config.ports.debugging); + + // Source map any errors in this backend process + require("source-map-support").install(); + + if (config.backendInitModule) + await require(config.backendInitModule); + + await runner.runTests(config); +} diff --git a/tools/certa/src/runners/chrome/ChromeTestRunner.ts b/tools/certa/src/runners/chrome/ChromeTestRunner.ts new file mode 100644 index 0000000..f77c22c --- /dev/null +++ b/tools/certa/src/runners/chrome/ChromeTestRunner.ts @@ -0,0 +1,150 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as path from "path"; +import * as fs from "fs"; +import * as puppeteer from "puppeteer"; +import * as detect from "detect-port"; +import { spawnChildProcess } from "../../utils/SpawnUtils"; +import { executeRegisteredCallback } from "../../utils/CallbackUtils"; +import { CertaConfig } from "../../CertaConfig"; +import { writeCoverageData } from "../../utils/CoverageUtils"; + +interface ChromeTestResults { + failures: number; + coverage: any; +} + +type ConsoleMethodName = keyof typeof console; + +export class ChromeTestRunner { + public static readonly supportsCoverage = true; + public static async initialize(config: CertaConfig): Promise { + const openPort = await detect(config.ports.frontend); + if (openPort !== config.ports.frontend) + console.warn(`CERTA: Port ${config.ports.frontend} is already in use, so serving test resources on port ${openPort}`); + + process.env.CERTA_PORT = String(openPort); + } + + public static async runTests(config: CertaConfig): Promise { + const webserverEnv = { + CERTA_PORT: process.env.CERTA_PORT, + CERTA_PATH: this.generateHtml(config), + CERTA_PUBLIC_DIRS: JSON.stringify(config.chromeOptions.publicDirs), + }; + const webserverProcess = spawnChildProcess("node", [require.resolve("./webserver")], webserverEnv); + + const { failures, coverage } = await runTestsInPuppeteer(config, process.env.CERTA_PORT!); + webserverProcess.kill(); + + // Save nyc/istanbul coverage file. + if (config.cover) + writeCoverageData(coverage); + + process.exit(failures); + } + + private static generateHtml(config: CertaConfig): string { + const contents = ` + + + + + + +
+ + `; + const filename = path.join(__dirname, "test.html"); + fs.writeFileSync(filename, contents); + return filename; + } +} + +async function loadScript(page: puppeteer.Page, scriptPath: string) { + return page.addScriptTag({ url: "/@/" + scriptPath }); +} + +async function loadScriptAndTemporarilyBreak(page: puppeteer.Page, scriptPath: string) { + // Connect to debugger over chrome devtools protocol, and have it stop on the first statement of next script loaded + const session = await page.target().createCDPSession(); + await session.send("Debugger.enable"); + await session.send("DOMDebugger.setInstrumentationBreakpoint", { eventName: "scriptFirstStatement" }); + + // _Start_ loading the script, but don't wait for it to finish - it can't finish with that breakpoint set! + const loadedPromise = loadScript(page, scriptPath); + + // Resume execution once breakpoints have had a chance to be resolved (unless user already resumed) + // FIXME: Need a more reliable way to wait for breakpoints to be resolved... + const resumed = new Promise((resolve) => session.once("Debugger.resumed", resolve)).then(() => false); + const timeout = new Promise((resolve) => setTimeout(resolve, 5000)).then(() => true); + if (await Promise.race([resumed, timeout])) + await session.send("Debugger.resume"); + await session.detach(); + + // **Now** it's safe to wait for script to load + return loadedPromise; +} + +async function runTestsInPuppeteer(config: CertaConfig, port: string) { + return new Promise(async (resolve, reject) => { + try { + const options = { + ignoreHTTPSErrors: true, + args: config.chromeOptions.args, + headless: !config.debug, + }; + + if (config.debug) + options.args.push(`--remote-debugging-port=${config.ports.frontendDebugging}`); + + const browser = await puppeteer.launch(options); + const page = (await browser.pages()).pop() || await browser.newPage(); + + // Don't let dialogs block tests + page.on("dialog", async (dialog) => dialog.dismiss()); + + // Re-throw any uncaught exceptions from the frontend in the backend + page.on("pageerror", reject); + + // Expose some functions to the frontend that will execute _in the backend context_ + await page.exposeFunction("_CertaConsole", (type: ConsoleMethodName, args: any[]) => console[type](...args)); + await page.exposeFunction("_CertaSendToBackend", executeRegisteredCallback); + await page.exposeFunction("_CertaReportResults", (results) => { + setTimeout(async () => { + await browser.close(); + resolve(results); + }); + }); + + // Now load the page (and requisite scripts)... + const testBundle = (config.cover && config.instrumentedTestBundle) || config.testBundle; + await page.goto(`http://localhost:${port}`); + await loadScript(page, require.resolve("mocha/mocha.js")); + await loadScript(page, require.resolve("source-map-support/browser-source-map-support.js")); + await loadScript(page, require.resolve("../../utils/initSourceMaps.js")); + await loadScript(page, require.resolve("../../utils/initMocha.js")); + if (config.debug) + await loadScriptAndTemporarilyBreak(page, testBundle); + else + await loadScript(page, testBundle); + + // ...and start the tests + await page.evaluate(async () => { + // NB: This is being evaluated in the frontend context! + Mocha.reporters.Base.useColors = true; + const globals = window as any; + mocha.run((failures) => { + const coverage = globals.__coverage__; + globals._CertaReportResults({ failures, coverage }); // This will close the browser + }); + }); + } catch (error) { + reject(error); + } + }); +} diff --git a/tools/certa/src/runners/chrome/webserver.ts b/tools/certa/src/runners/chrome/webserver.ts new file mode 100644 index 0000000..d0c43d7 --- /dev/null +++ b/tools/certa/src/runners/chrome/webserver.ts @@ -0,0 +1,56 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as express from "express"; +import * as path from "path"; + +const app = express(); + +// Enable CORS for all apis +app.all("/*", (_req, res, next) => { + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Methods", "POST, GET"); + res.header("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, X-Correlation-Id"); + next(); +}); + +// The generated HTML file should be served at the "root" URL (i.e., http://localhost:3000/). +app.use("/", (req, resp, next) => { + if (req.path === "/") + resp.sendFile(process.env.CERTA_PATH!); + else + next(); +}); + +// Handle a special route for serving absolute paths and files from node_modules +app.use("/@/", (_req, resp) => { + const filePath = _req.originalUrl.replace(/^\/@\//, ""); + const sourceMap = require("source-map-support").retrieveSourceMap(filePath); + resp.sendFile(path.resolve("/", filePath), { + headers: (sourceMap) && { + "X-SourceMap": `/@/${sourceMap.url}`, + }, + }); +}); + +// Serve static assets from any configured "public" directories +const publicDirs: string[] = JSON.parse(process.env.CERTA_PUBLIC_DIRS || "[]"); +for (const publicDir of publicDirs) { + app.use(express.static(publicDir)); +} + +// All other routes should log a warning +const alreadyLogged = new Set(); +app.use("*", (req, resp) => { + // Don't repeat these warnings if the same asset was requested multiple times. + if (!alreadyLogged.has(req.originalUrl)) { + console.warn(`WARNING: Tests attempted to load missing asset: "${req.originalUrl}"`); + alreadyLogged.add(req.originalUrl); + } + resp.sendStatus(404); +}); + +// Run the server... +app.set("port", process.env.CERTA_PORT || 3000); +app.listen(app.get("port")); diff --git a/tools/certa/src/runners/electron/ElectronTestRunner.ts b/tools/certa/src/runners/electron/ElectronTestRunner.ts new file mode 100644 index 0000000..f9caf4e --- /dev/null +++ b/tools/certa/src/runners/electron/ElectronTestRunner.ts @@ -0,0 +1,85 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as path from "path"; +import * as fs from "fs"; +import { executeRegisteredCallback } from "../../utils/CallbackUtils"; +import { relaunchInElectron } from "../../utils/SpawnUtils"; +import { CertaConfig } from "../../CertaConfig"; + +export class ElectronTestRunner { + public static readonly supportsCoverage = false; + public static async initialize(config: CertaConfig): Promise { + // Restart under electron if we're running in node + if (!("electron" in process.versions)) + return process.exit(await relaunchInElectron()); + + // If we are running in electron, we need to append any chromium CLI switches ***before*** the 'ready' event of the app module is emitted. + const { app } = require("electron"); + if (config.debug) + app.commandLine.appendSwitch("remote-debugging-port", String(config.ports.frontendDebugging)); + } + + public static async runTests(config: CertaConfig): Promise { + const { BrowserWindow, app, ipcMain } = require("electron"); + + if (!app.isReady()) + await new Promise((resolve) => app.on("ready", resolve)); + + const rendererWindow = new BrowserWindow({ + show: config.debug, + webPreferences: { + nodeIntegration: true, + }, + }); + + ipcMain.on("certa-done", (_e: any, count: number) => { + rendererWindow.webContents.once("destroyed", () => app.exit(count)); + setImmediate(() => rendererWindow.close()); + }); + + ipcMain.on("certa-error", (_e: any, { message, stack }: any) => { + console.error("Uncaught Error in Tests: ", message); + console.error(stack); + rendererWindow.webContents.once("destroyed", () => app.exit(1)); + rendererWindow.close(); + }); + + ipcMain.on("certa-callback", async (event: any, msg: any) => { + event.returnValue = executeRegisteredCallback(msg.name, msg.args); + }); + + rendererWindow.loadFile(this.generateHtml(config)); + rendererWindow.webContents.once("did-finish-load", async () => { + const startTests = async () => rendererWindow.webContents.executeJavaScript(`startCertaTests(${JSON.stringify(config.testBundle)});`); + + if (config.debug) { + // For some reason, the VS Code chrome debugger doesn't work correctly unless we reload the window before running tests. + await rendererWindow.webContents.executeJavaScript(`window.location.reload();`); + // Note that we'll have to wait for the did-finish-load event again since we just reloaded. + rendererWindow.webContents.once("did-finish-load", startTests); + return; + } + + await startTests(); + }); + } + + private static generateHtml(config: CertaConfig): string { + const initScriptPath = require.resolve("./initElectronTests.js"); + const contents = ` + + + + + + `; + const filename = path.join(__dirname, "test.html"); + fs.writeFileSync(filename, contents); + return filename; + } +} diff --git a/tools/certa/src/runners/electron/initElectronTests.ts b/tools/certa/src/runners/electron/initElectronTests.ts new file mode 100644 index 0000000..45fa730 --- /dev/null +++ b/tools/certa/src/runners/electron/initElectronTests.ts @@ -0,0 +1,37 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { remote, ipcRenderer } from "electron"; +import Mocha = require("mocha"); + +// Initialize mocha +declare const window: any; +window.mocha = new Mocha(); +window._CertaConsole = (name: string, args: any[]) => remote.getGlobal("console")[name].apply(remote.getGlobal("console"), args); +import "../../utils/initMocha"; + +function startCertaTests(entryPoint: string) { + try { + // Setup source maps + window.sourceMapSupport = require("source-map-support"); + require("../../utils/initSourceMaps"); + + // Load tests + require(entryPoint); + + // FIXME: This breakpoint is currently needed to ensure VS Code's chrome debugger has enough time to source-map the tests and set breakpoints. + debugger; // tslint:disable-line:no-debugger + + // Execute tests + mocha.run((failedCount) => ipcRenderer.send("certa-done", failedCount)); + } catch ({ message, stack }) { + ipcRenderer.send("certa-error", { message, stack }); + } +} + +const _CertaSendToBackend = async (name: string, args: any[]) => Promise.resolve(ipcRenderer.sendSync("certa-callback", { name, args })); + +// Expose some globals +window.startCertaTests = startCertaTests; +window._CertaSendToBackend = _CertaSendToBackend; diff --git a/tools/certa/src/runners/node/NodeTestRunner.ts b/tools/certa/src/runners/node/NodeTestRunner.ts new file mode 100644 index 0000000..d657b9a --- /dev/null +++ b/tools/certa/src/runners/node/NodeTestRunner.ts @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import { CertaConfig } from "../../CertaConfig"; +import Mocha = require("mocha"); + +declare const global: any; + +export class NodeTestRunner { + public static readonly supportsCoverage = true; + public static async runTests(config: CertaConfig): Promise { + // Initialize mocha + global.mocha = new Mocha(); + global._CERTA_CONFIG = config; + require("../../utils/initMocha"); + + // Setup source maps + global.sourceMapSupport = require("source-map-support"); + require("../../utils/initSourceMaps"); + + // Load tests + const frontendBundle = (config.cover && config.instrumentedTestBundle) || config.testBundle; + require(frontendBundle); + + // Execute tests + mocha.run((failedCount) => process.exit(failedCount)); + } +} diff --git a/tools/certa/src/utils/CallbackUtils.ts b/tools/certa/src/utils/CallbackUtils.ts new file mode 100644 index 0000000..be73a62 --- /dev/null +++ b/tools/certa/src/utils/CallbackUtils.ts @@ -0,0 +1,42 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +declare const window: any; +declare const global: any; + +const isFrontend = (typeof (window) !== "undefined"); +export type CertaBackendCallback = (...args: any[]) => void | null | undefined | number | string | boolean; + +/** @hidden */ +export function getCallbacksRegisteredOnBackend(): { [name: string]: CertaBackendCallback } { + if (isFrontend) + throw new Error("This should only be called on the backend!"); + + global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {}; + return global._CertaRegisteredCallbacks; +} + +/** @hidden */ +export function executeRegisteredCallback(name: string, args: any[]): any { + const registeredCallbacks = getCallbacksRegisteredOnBackend(); + if (!(name in registeredCallbacks)) + throw new Error(`Unknown certa backend callback "${name}"`); + + return registeredCallbacks[name](...args); +} + +export function registerBackendCallback(name: string, cb: CertaBackendCallback): void { + if (isFrontend) + throw new Error("This should only be called on the backend!"); + + global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {}; + global._CertaRegisteredCallbacks[name] = cb; +} + +export async function executeBackendCallback(name: string, ...args: any[]): Promise { + if (!isFrontend) + return executeRegisteredCallback(name, args); + + return window._CertaSendToBackend(name, args); +} diff --git a/tools/certa/src/utils/CoverageUtils.ts b/tools/certa/src/utils/CoverageUtils.ts new file mode 100644 index 0000000..cf5ae12 --- /dev/null +++ b/tools/certa/src/utils/CoverageUtils.ts @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as fs from "fs"; +import * as path from "path"; +import * as uuid from "uuid"; +import { spawnChildProcess, onExit } from "./SpawnUtils"; + +/** + * Helper function for relaunching (as a child process) the current process running under `nyc` for measuring code coverage. + * Once that completes, a second `nyc` child process will be spawned to report the coverage results. + * Returns a promise that will be resolved with either 0 or the first non-zero child process exit code, once the reporter process terminates. + */ +export async function relaunchForCoverage(): Promise { + const nyc = require.resolve("nyc/bin/nyc"); + const relaunchArgs = [ + nyc, + "--silent", + "--", + ...process.argv, + ]; + + // By splitting "instrument/runTests" and "report coverage" into two steps, we allow test runners the option of + // running separate (concurrent) instrumented processes that also write to `nyc`'s temp directory. + const instrumentedProcess = spawnChildProcess("node", relaunchArgs); + const instrumentedStatus = await onExit(instrumentedProcess); + + // Now create a *combined* report for everything in `nyc`'s temp directory. + const reporterProcess = spawnChildProcess("node", [require.resolve("nyc/bin/nyc"), "report"]); + const reporterStatus = await onExit(reporterProcess); + + // Certa should exit with an error code if _either_ step failed. + return instrumentedStatus || reporterStatus; +} + +/** Gets the current effective nyc config from `process.env`. Assumes we're running as a child process of `nyc`. */ +function getNycConfig(): any { + const nycConfig = process.env.NYC_CONFIG; + if (!nycConfig) + throw new Error("NYC_CONFIG is not set in environment"); + + return JSON.parse(nycConfig); +} + +/** + * Writes nyc or istanbul-generated coverage data to a uniquely-named file inside `nyc`'s temp directory. + * All such files in the nyc temp directory are merged together when nyc reports are generated via `nyc report`. + * @param coverageData The value of an nyc/istanbul-generated `__coverage__` object. + */ +export function writeCoverageData(coverageData: any): void { + const nycConfig = getNycConfig(); + const nycCWD = nycConfig.cwd; + const nycTempDir = nycConfig["temp-directory"]; + if (!nycCWD || !nycTempDir) + throw new Error("Failed to determine nyc temp directory."); + + const nycTempDirAbsolute = path.resolve(nycCWD, nycTempDir); + if (!fs.existsSync(nycTempDirAbsolute)) + throw new Error(`Cannot save coverage data - nyc temp directory "${nycTempDirAbsolute}" does not exist.`); + + // Use uuid/v4 to generate a unique filename, just like `nyc` does. + const coverageFileName = path.join(nycTempDirAbsolute, uuid.v4() + ".json"); + fs.writeFileSync(coverageFileName, JSON.stringify(coverageData)); +} diff --git a/tools/certa/src/utils/SpawnUtils.ts b/tools/certa/src/utils/SpawnUtils.ts new file mode 100644 index 0000000..079d0af --- /dev/null +++ b/tools/certa/src/utils/SpawnUtils.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as inspector from "inspector"; +import { spawn, ChildProcess } from "child_process"; + +/** + * Helper function for spawning a child process with the same cwd, env, stdout, and stderr as the current process. + * Processes spawned by this function will also have an IPC channel, so the may communicate with their parent via `process.send()`. + * @param command The command to run. + * @param args List of string arguments. + * @param env Environment vars to override in the child process. + */ +export function spawnChildProcess(command: string, args: ReadonlyArray, env?: NodeJS.ProcessEnv): ChildProcess { + const childEnv = { ...process.env, ...(env || {}) }; + const childProcess = spawn(command, args, { stdio: "pipe", cwd: process.cwd(), env: childEnv }); + // For some reason, spawning using `stdio: "inherit"` results in some garbled output (for example, "✓" is printed as "ΓêÜ"). + // Using `stdio: "pipe"` and manually redirecting the output here seems to work though. + childProcess.stdout.on("data", (data: any) => process.stdout.write(data)); + childProcess.stderr.on("data", (data: any) => process.stderr.write(data)); + return childProcess; +} + +/** Returns a Promise that will be resolved with the given child process's exit code upon termination. */ +export async function onExit(child: ChildProcess): Promise { + return new Promise((resolve) => { + child.on("exit", (status) => resolve(status || 0)); + }); +} + +/** + * Helper function for relaunching (as a child process) the current process in electron instead of node. + * Returns a promise that will be resolved with the exit code of the child process, once it terminates. + */ +export async function relaunchInElectron(): Promise { + const child = spawnChildProcess(require("electron/index.js"), process.argv.slice(1)); + return onExit(child); +} + +/** + * Activates the v8 inspector and starts listening on the given port, then breaks as soon as a debugger has connected. + * This is essentially what node does when run with `--inspect-brk={port}`, but doing this manually gives us more control + * over precisely _which_ child process connects to the debugger. + * + * For example, when using the chrome test runner, we want debug the original certa process ("node certa ...args") as the + * test "backend", but with the electron test runner, we want to debug a child process ("electron certa ...args"). + * @param port Port to listen on for inspector connections. + */ +export function startDebugger(port: number) { + // Don't try to activate if there's already an active inspector. + if (inspector.url()) + return; + + inspector.open(port, undefined, true); + // NB: VS Code expects the app to break as soon as it attaches – this gives it a chance to resolve sourcemaps and + // attach breakpoints. It will continue as soon as that's done though – users shouldn't actually "hit" this breakpoint. + debugger; // tslint:disable-line:no-debugger +} diff --git a/tools/certa/src/utils/initMocha.ts b/tools/certa/src/utils/initMocha.ts new file mode 100644 index 0000000..e1ba3a6 --- /dev/null +++ b/tools/certa/src/utils/initMocha.ts @@ -0,0 +1,45 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +type CertaConfig = import("../CertaConfig").CertaConfig; +declare var _CERTA_CONFIG: CertaConfig; +declare var _CertaConsole: undefined | ((name: string, args: any[]) => void); + +// Redirect all console output back to the main (backend) process, if necessary +if (typeof _CertaConsole !== "undefined") { + function forwardConsole(name: keyof typeof console) { + const original = console[name]; + console[name] = (...args: any[]) => { + _CertaConsole!(name, args); + // Also preserve the original behavior. This way, test progress is reported in both the backend _and_ frontend processes. + // This helps keep the output readable when debugging the frontend. + original.apply(console, args); + }; + } + forwardConsole("log"); + forwardConsole("error"); + forwardConsole("dir"); +} + +((config: CertaConfig) => { + const mochaOpts = config.mochaOptions; + + // This is essentially equivalent to `mocha.setup("bdd")`, except it works in both node and browser environments. + mocha.ui("bdd"); + mocha.suite.emit("pre-require", typeof (window) === "undefined" ? global : window, null, mocha); + + mocha.reporter(mochaOpts.reporter, mochaOpts.reporterOptions); + mocha.useColors(true); + mocha.timeout(mochaOpts.timeout); + if (mochaOpts.fgrep) + mocha.fgrep(mochaOpts.fgrep); + if (mochaOpts.grep) + mocha.grep(mochaOpts.grep); + if (mochaOpts.invert) + mocha.invert(); + + // Disable timeouts when debugging. + if (config.debug) + mocha.enableTimeouts(false); +})(_CERTA_CONFIG); diff --git a/tools/certa/src/utils/initSourceMaps.ts b/tools/certa/src/utils/initSourceMaps.ts new file mode 100644 index 0000000..a398b81 --- /dev/null +++ b/tools/certa/src/utils/initSourceMaps.ts @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +// NB: This requires source-map-support/browser-source-map-support.js to be loaded first! +declare const sourceMapSupport: any; +sourceMapSupport.install(); + +// The source-map-support package does not correctly format stack traces from the browser. +// It gets pretty close though, so we'll just monkey-patch here to fix them. +const originalPrepareStackTrace = Error.prepareStackTrace; +Error.prepareStackTrace = function (...args) { + const res = originalPrepareStackTrace!.call(this, ...args); + return res.replace(/\(.*file:(\/|\\)/g, "(").replace(/at .*file:(\/|\\)/g, "at "); +}; diff --git a/tools/certa/tsconfig.json b/tools/certa/tsconfig.json new file mode 100644 index 0000000..0ca1e81 --- /dev/null +++ b/tools/certa/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "./node_modules/@bentley/build-tools/tsconfig-base.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/tools/certa/tslint.json b/tools/certa/tslint.json new file mode 100644 index 0000000..4adce43 --- /dev/null +++ b/tools/certa/tslint.json @@ -0,0 +1,8 @@ +{ + "extends": "@bentley/build-tools/tslint.json", + "rules": { + "no-console": false, + "no-conditional-assignment": true, + "callable-types": false + } +} \ No newline at end of file diff --git a/tools/config-loader/CHANGELOG.json b/tools/config-loader/CHANGELOG.json index 4cfa2f1..8b1eff4 100644 --- a/tools/config-loader/CHANGELOG.json +++ b/tools/config-loader/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@bentley/config-loader", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/config-loader_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": {} + }, { "version": "0.189.0", "tag": "@bentley/config-loader_v0.189.0", diff --git a/tools/config-loader/CHANGELOG.md b/tools/config-loader/CHANGELOG.md index 496fc0c..c51e76f 100644 --- a/tools/config-loader/CHANGELOG.md +++ b/tools/config-loader/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @bentley/config-loader -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +*Version update only* ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/tools/config-loader/package.json b/tools/config-loader/package.json index 7aae2c8..cfef750 100644 --- a/tools/config-loader/package.json +++ b/tools/config-loader/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/config-loader", - "version": "0.189.0", + "version": "0.190.0", "description": "Configuration loader", "license": "MIT", "repository": { @@ -30,7 +30,7 @@ "json5": "^2.1.0" }, "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@types/json5": "0.0.30", "@types/node": "10.12.18", "rimraf": "^2.6.2", diff --git a/tools/webpack/CHANGELOG.json b/tools/webpack/CHANGELOG.json index ced743b..565677b 100644 --- a/tools/webpack/CHANGELOG.json +++ b/tools/webpack/CHANGELOG.json @@ -1,6 +1,33 @@ { "name": "@bentley/webpack-tools", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/webpack-tools_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "changes path to config-loader from nested to sibling dependency in order to function in non-symlinked repos that use rush/pnpm" + }, + { + "comment": "First checks for nested dependency. Falls back to sibling" + }, + { + "comment": "Change to fix iModelJs version string was overly broad." + }, + { + "comment": "fix issue for ios" + }, + { + "comment": "Massage the version required stored in Plugins in the case of pre-release versions." + }, + { + "comment": "Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/webpack-tools_v0.189.0", diff --git a/tools/webpack/CHANGELOG.md b/tools/webpack/CHANGELOG.md index ebf9e69..0d872e3 100644 --- a/tools/webpack/CHANGELOG.md +++ b/tools/webpack/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @bentley/webpack-tools -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- changes path to config-loader from nested to sibling dependency in order to function in non-symlinked repos that use rush/pnpm +- First checks for nested dependency. Falls back to sibling +- Change to fix iModelJs version string was overly broad. +- fix issue for ios +- Massage the version required stored in Plugins in the case of pre-release versions. +- Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/tools/webpack/bin/buildIModelJsModule.js b/tools/webpack/bin/buildIModelJsModule.js index f5f46c2..79de012 100644 --- a/tools/webpack/bin/buildIModelJsModule.js +++ b/tools/webpack/bin/buildIModelJsModule.js @@ -574,19 +574,37 @@ class IModelJsModuleBuilder { return Promise.resolve(new Result("makeConfig", 0)); if (!this._moduleDescription.makeConfig.dest) return Promise.resolve(new Result("makeConfig", 1, undefined, undefined, 'The iModelJs.buildModule.makeConfig must have a "dest" property')); - const makeConfigFullPath = path.resolve(process.cwd(), "node_modules/@bentley/webpack-tools/node_modules/@bentley/config-loader/scripts/write.js"); - const args = [makeConfigFullPath, this._moduleDescription.makeConfig.dest]; - if (this._moduleDescription.makeConfig.filter) - args.push(this._moduleDescription.makeConfig.filter); - if (this._detail > 0) - console.log("Starting makeConfig"); - return new Promise((resolve, _reject) => { - child_process.execFile("node", args, { cwd: process.cwd() }, (error, stdout, stderr) => { - if (this._detail > 0) - console.log("Finished makeConfig"); - resolve(new Result("makeConfig", (null !== error) || (stderr && stderr.length) ? 1 : 0, error, stdout, stderr)); + try { + // get the path to config-loader/scripts/write.js module + let makeConfigFullPath; + const nestedConfigLoaderPath = 'node_modules/@bentley/webpack-tools/node_modules/@bentley/config-loader/scripts/write.js'; + if (fs.existsSync(nestedConfigLoaderPath)) { + // use the nested config-loader dependency + makeConfigFullPath = path.resolve(process.cwd(), nestedConfigLoaderPath); + } + else { + // attempt to use the sibling config-loader dependency. Would need to be explicitly declared as a dependency in a consumer's package.json + const siblingConfigLoaderPath = 'node_modules/@bentley/config-loader/scripts/write.js'; + makeConfigFullPath = path.resolve(process.cwd(), siblingConfigLoaderPath); + } + const args = [makeConfigFullPath, this._moduleDescription.makeConfig.dest]; + if (this._moduleDescription.makeConfig.filter) + args.push(this._moduleDescription.makeConfig.filter); + if (this._detail > 0) + console.log("Starting makeConfig"); + return new Promise((resolve, _reject) => { + child_process.execFile("node", args, { cwd: process.cwd() }, (error, stdout, stderr) => { + if (this._detail > 0) + console.log("Finished makeConfig"); + resolve(new Result("makeConfig", (null !== error) || (stderr && stderr.length) ? 1 : 0, error, stdout, stderr)); + }); }); - }); + } + catch (e) { + return new Promise((resolve, _reject) => { + resolve(new Result("Make Config", 1, e)); + }); + } } // find webpack executable. findWebpack() { diff --git a/tools/webpack/mobile/backend.config.js b/tools/webpack/mobile/backend.config.js index 594f87d..d6c5ccb 100644 --- a/tools/webpack/mobile/backend.config.js +++ b/tools/webpack/mobile/backend.config.js @@ -1,11 +1,13 @@ /*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ + * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. + * Licensed under the MIT License. See LICENSE.md in the project root for license terms. + *--------------------------------------------------------------------------------------------*/ const path = require("path"); const webpack = require("webpack"); -module.exports = (env) => { return getConfig(env); }; +module.exports = (env) => { + return getConfig(env); +}; function getConfig(env) { // set sourcedir if not specified in arguments. @@ -42,13 +44,7 @@ function getConfig(env) { target: "webworker", devtool: "source-map", module: { - rules: [ - { - test: /\.js$/, - use: "source-map-loader", - enforce: "pre" - }, - { + rules: [{ test: /growl\.js$/, use: 'null-loader' }, @@ -83,14 +79,11 @@ function getConfig(env) { Buffer: true, }, plugins: [ - new webpack.DefinePlugin({ - }), - new webpack.ProvidePlugin({ - }), - new webpack.EnvironmentPlugin({ - }) + new webpack.DefinePlugin({}), + new webpack.ProvidePlugin({}), + new webpack.EnvironmentPlugin({}) ], }; return webConfig; -} +} \ No newline at end of file diff --git a/tools/webpack/modules/buildIModelJsModule.ts b/tools/webpack/modules/buildIModelJsModule.ts index 17214a6..018d98e 100644 --- a/tools/webpack/modules/buildIModelJsModule.ts +++ b/tools/webpack/modules/buildIModelJsModule.ts @@ -628,33 +628,51 @@ class IModelJsModuleBuilder { if (!this._moduleDescription.makeConfig.dest) return Promise.resolve(new Result("makeConfig", 1, undefined, undefined, 'The iModelJs.buildModule.makeConfig must have a "dest" property')); - const makeConfigFullPath = path.resolve(process.cwd(), "node_modules/@bentley/webpack-tools/node_modules/@bentley/config-loader/scripts/write.js"); - const args: string[] = [makeConfigFullPath, this._moduleDescription.makeConfig.dest]; - if (this._moduleDescription.makeConfig.filter) - args.push(this._moduleDescription.makeConfig.filter); + try { + // get the path to config-loader/scripts/write.js module + let makeConfigFullPath; + const nestedConfigLoaderPath = 'node_modules/@bentley/webpack-tools/node_modules/@bentley/config-loader/scripts/write.js'; + if (fs.existsSync(nestedConfigLoaderPath)) { + // use the nested config-loader dependency + makeConfigFullPath = path.resolve(process.cwd(), nestedConfigLoaderPath); + } + else { + // attempt to use the sibling config-loader dependency. Would need to be explicitly declared as a dependency in a consumer's package.json + const siblingConfigLoaderPath = 'node_modules/@bentley/config-loader/scripts/write.js'; + makeConfigFullPath = path.resolve(process.cwd(), siblingConfigLoaderPath); + } + const args: string[] = [makeConfigFullPath, this._moduleDescription.makeConfig.dest]; + if (this._moduleDescription.makeConfig.filter) + args.push(this._moduleDescription.makeConfig.filter); - if (this._detail > 0) - console.log("Starting makeConfig"); + if (this._detail > 0) + console.log("Starting makeConfig"); - return new Promise((resolve, _reject) => { - child_process.execFile("node", args, { cwd: process.cwd() }, (error: Error | null, stdout: string, stderr: string) => { - if (this._detail > 0) - console.log("Finished makeConfig"); - resolve(new Result("makeConfig", (null !== error) || (stderr && stderr.length) ? 1 : 0, error, stdout, stderr)); - }) - }); + return new Promise((resolve, _reject) => { + child_process.execFile("node", args, { cwd: process.cwd() }, (error: Error | null, stdout: string, stderr: string) => { + if (this._detail > 0) + console.log("Finished makeConfig"); + resolve(new Result("makeConfig", (null !== error) || (stderr && stderr.length) ? 1 : 0, error, stdout, stderr)); + }) + }); + } + catch (e) { + return new Promise((resolve, _reject) => { + resolve(new Result("Make Config", 1, e)); + }); + } } // find webpack executable. private findWebpack(): string | undefined { // first look in node_modules/webpack const webpackCommand: string = process.platform === "win32" ? "webpack.cmd" : "webpack"; - const inLocalNodeModules = path.resolve (process.cwd(), "node_modules/.bin", webpackCommand); - if (fs.existsSync (inLocalNodeModules)) + const inLocalNodeModules = path.resolve(process.cwd(), "node_modules/.bin", webpackCommand); + if (fs.existsSync(inLocalNodeModules)) return inLocalNodeModules; const inToolsWebpackNodeModules = path.resolve(process.cwd(), "node_modules/@bentley/webpack-tools/node_modules/.bin", webpackCommand); - if (fs.existsSync (inToolsWebpackNodeModules)) + if (fs.existsSync(inToolsWebpackNodeModules)) return inToolsWebpackNodeModules; return undefined; diff --git a/tools/webpack/modules/webpackModule.config.js b/tools/webpack/modules/webpackModule.config.js index b6df864..6eb86b8 100644 --- a/tools/webpack/modules/webpackModule.config.js +++ b/tools/webpack/modules/webpackModule.config.js @@ -222,10 +222,10 @@ function getConfig(env) { // It gets that by reading the version of imodeljs-frontend listed in package.json. if (env.htmltemplate || env.plugin) { const iModelJsVersions = getIModelJsVersions(sourceDir, packageContents, webpackLib.externals); - const versionString = JSON.stringify(iModelJsVersions); if (env.htmltemplate) { const HtmlWebpackPlugin = require("html-webpack-plugin"); + const versionString = JSON.stringify(iModelJsVersions); webpackLib.plugins.push(new HtmlWebpackPlugin({ imjsVersions: versionString, template: env.htmltemplate, @@ -236,6 +236,22 @@ function getConfig(env) { } if (env.plugin) { + + // correct the keys with something like 0.190.0-dev.8 to something like ">0.190.0.dev-0" otherwise the semver matching is too strict. + for (const key in iModelJsVersions) { + if (iModelJsVersions.hasOwnProperty(key)) { + const moduleVersion = iModelJsVersions[key]; + const dashPosition = moduleVersion.indexOf("-"); + if (-1 !== dashPosition) { + const lastNumPosition = moduleVersion.lastIndexOf('.'); + if ((-1 !== lastNumPosition) && (lastNumPosition > dashPosition)) { + iModelJsVersions[key] = ">" + moduleVersion.slice(0, lastNumPosition + 1) + "0"; + } + } + } + } + + const versionString = JSON.stringify(iModelJsVersions); definePluginDefinitions.IMODELJS_VERSIONS_REQUIRED = JSON.stringify(versionString); definePluginDefinitions.PLUGIN_NAME = JSON.stringify(bundleName); } @@ -251,7 +267,8 @@ function getConfig(env) { use: { loader: require.resolve("sass-loader"), options: { - includePaths: [path.resolve(contextDirectory, "node_modules")] + includePaths: [path.resolve(contextDirectory, "node_modules")], + outputStyle: "compressed", }, }, enforce: "pre", diff --git a/tools/webpack/package.json b/tools/webpack/package.json index 590bb84..fcf6584 100644 --- a/tools/webpack/package.json +++ b/tools/webpack/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/webpack-tools", - "version": "0.189.0", + "version": "0.190.0", "description": "Configuration and scripts for imodeljs apps and services.", "license": "MIT", "repository": { @@ -24,7 +24,7 @@ "buildIModelJsModule": "./bin/buildIModelJsModule.js" }, "dependencies": { - "@bentley/config-loader": "0.189.0", + "@bentley/config-loader": "0.190.0", "@types/chai": "^4.1.4", "@types/enzyme": "^3.1.12", "@types/mocha": "^5.2.5", diff --git a/ui/components/CHANGELOG.json b/ui/components/CHANGELOG.json index 556eb1e..0568d3d 100644 --- a/ui/components/CHANGELOG.json +++ b/ui/components/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@bentley/ui-components", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/ui-components_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Add ColorEditor to list of available Type Editors" + }, + { + "comment": "Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS" + }, + { + "comment": "Add SaturationPicker for use with ColorType editor." + }, + { + "comment": "Add Transparency slider component." + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/ui-components_v0.189.0", diff --git a/ui/components/CHANGELOG.md b/ui/components/CHANGELOG.md index 986ff76..86dafe5 100644 --- a/ui/components/CHANGELOG.md +++ b/ui/components/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @bentley/ui-components -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Add ColorEditor to list of available Type Editors +- Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS +- Add SaturationPicker for use with ColorType editor. +- Add Transparency slider component. ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/ui/components/package.json b/ui/components/package.json index 0f4b968..37edd3d 100644 --- a/ui/components/package.json +++ b/ui/components/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/ui-components", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js UI complex components", "license": "MIT", "repository": { @@ -50,26 +50,26 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/ui-core": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/ui-core": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", @@ -104,7 +104,7 @@ "mocha": "^5.2.0", "nyc": "^13.0.1", "raf": "^3.4.0", - "react-testing-library": "^5.2.3", + "react-testing-library": "^5.8.0", "rimraf": "^2.6.2", "sinon": "^7.1.1", "sinon-chai": "^3.2.0", diff --git a/ui/components/src/test/color/AlphaSlider.test.tsx b/ui/components/src/test/color/AlphaSlider.test.tsx new file mode 100644 index 0000000..bc6b4ad --- /dev/null +++ b/ui/components/src/test/color/AlphaSlider.test.tsx @@ -0,0 +1,82 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import React from "react"; +import { render, cleanup, fireEvent } from "react-testing-library"; // , waitForElement +import { expect } from "chai"; +import sinon from "sinon"; +import { AlphaSlider } from "../../ui-components/color/AlphaSlider"; + +describe("", () => { + const alpha = .50; + const alphaDivStyle: React.CSSProperties = { + height: `120px`, + }; + + afterEach(cleanup); + + it("horizontal slider should render", () => { + const renderedComponent = render(); + expect(renderedComponent).not.to.be.undefined; + }); + + it("vertical slider should render", () => { + const renderedComponent = render(
); + expect(renderedComponent).not.to.be.undefined; + }); + + it("Use keyboard to pick Transparency - Horizontal", async () => { + let index = 0; + + // starting value is .5 + const keys = ["ArrowLeft", "ArrowDown", "ArrowRight", "ArrowUp", "Home", "End", "PageDown", "PageUp"]; + const values = [.45, .45, .55, .55, 0, 1, .25, .75]; + + const spyOnPick = sinon.spy(); + function handleAlphaChange(_transparency: number): void { + expect(_transparency).to.be.equal(values[index]); + spyOnPick(); + } + + const renderedComponent = render(); + const sliderDiv = renderedComponent.getByTestId("alpha-slider"); + expect(sliderDiv).not.to.be.null; + expect(sliderDiv.tagName).to.be.equal("DIV"); + + keys.forEach((keyName) => { + fireEvent.keyDown(sliderDiv, { key: keyName }); + expect(spyOnPick.calledOnce).to.be.true; + spyOnPick.resetHistory(); + index = index + 1; + }); + }); + + it("Use keyboard to pick Alpha - Vertical", async () => { + let index = 0; + + // starting value is .5 + const keys = ["ArrowLeft", "ArrowDown", "ArrowRight", "ArrowUp", "Home", "End", "PageDown", "PageUp"]; + const values = [.45, .45, .55, .55, 0, 1, .25, .75]; + + const spyOnPick = sinon.spy(); + function handleAlphaChange(_transparency: number): void { + expect(_transparency).to.be.equal(values[index]); + spyOnPick(); + } + + const renderedComponent = render(
); + const sliderDiv = renderedComponent.getByTestId("alpha-slider"); + expect(sliderDiv).not.to.be.null; + expect(sliderDiv.tagName).to.be.equal("DIV"); + + keys.forEach((keyName) => { + fireEvent.keyDown(sliderDiv, { key: keyName }); + expect(spyOnPick.calledOnce).to.be.true; + spyOnPick.resetHistory(); + index = index + 1; + }); + }); + +}); diff --git a/ui/components/src/test/color/HueSlider.test.tsx b/ui/components/src/test/color/HueSlider.test.tsx new file mode 100644 index 0000000..386b289 --- /dev/null +++ b/ui/components/src/test/color/HueSlider.test.tsx @@ -0,0 +1,61 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import React from "react"; +import { render, cleanup, fireEvent } from "react-testing-library"; // , waitForElement +import { expect } from "chai"; +import sinon from "sinon"; +import { HueSlider } from "../../ui-components/color/HueSlider"; +import { HSVColor } from "@bentley/imodeljs-common"; + +describe("", () => { + const hsv = new HSVColor(); + hsv.h = 60; + hsv.s = 100; + hsv.v = 50; + + afterEach(cleanup); + + it("horizontal slider should render", () => { + const renderedComponent = render(); + expect(renderedComponent).not.to.be.undefined; + }); + + it("vertical slider should render", () => { + const hueDivStyle: React.CSSProperties = { + height: `120px`, + }; + + const renderedComponent = render(
); + expect(renderedComponent).not.to.be.undefined; + }); + + it("Use keyboard to pick hue", async () => { + let index = 0; + + // starting value is 60 + const keys = ["ArrowLeft", "ArrowDown", "ArrowRight", "ArrowUp", "Home", "End", "PageDown", "PageUp"]; + const values = [59, 59, 61, 61, 0, 360, 0, 120]; + + const spyOnPick = sinon.spy(); + function handleHueChange(newColor: HSVColor): void { + expect(newColor.h).to.be.equal(values[index]); + spyOnPick(); + } + + const renderedComponent = render(); + const sliderDiv = renderedComponent.getByTestId("hue-slider"); + expect(sliderDiv).not.to.be.null; + expect(sliderDiv.tagName).to.be.equal("DIV"); + + keys.forEach((keyName) => { + fireEvent.keyDown(sliderDiv, { key: keyName }); + expect(spyOnPick.calledOnce).to.be.true; + spyOnPick.resetHistory(); + index = index + 1; + }); + }); + +}); diff --git a/ui/components/src/test/color/SaturationPicker.test.tsx b/ui/components/src/test/color/SaturationPicker.test.tsx new file mode 100644 index 0000000..cd94dfa --- /dev/null +++ b/ui/components/src/test/color/SaturationPicker.test.tsx @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +import React from "react"; +import { render, cleanup, fireEvent } from "react-testing-library"; +import { expect } from "chai"; +import sinon from "sinon"; +import { SaturationPicker } from "../../ui-components/color/SaturationPicker"; +import { HSVColor } from "@bentley/imodeljs-common"; + +describe("", () => { + const hsv = new HSVColor(); + hsv.h = 30; + hsv.s = 30; + hsv.v = 30; + + const satDivStyle: React.CSSProperties = { + width: `200px`, + height: `200px`, + }; + + afterEach(cleanup); + + it("picker should render", () => { + const renderedComponent = render(
); + expect(renderedComponent).not.to.be.undefined; + }); + + it("Use keyboard to change saturation", async () => { + let index = 0; + + // starting value is 30 + const keys = ["ArrowLeft", "ArrowDown", "ArrowRight", "ArrowUp", "Home", "End", "PageDown", "PageUp"]; + const satValues = [29, 30, 31, 30, 0, 100, 30, 30]; + const vValues = [30, 29, 30, 31, 30, 30, 0, 100]; + + const spyOnPick = sinon.spy(); + + function handleSaturationChange(newHsv: HSVColor): void { + expect(newHsv.s).to.be.equal(satValues[index]); + expect(newHsv.v).to.be.equal(vValues[index]); + spyOnPick(); + } + + const renderedComponent = render(
); + const sliderDiv = renderedComponent.getByTestId("saturation-region"); + expect(sliderDiv).not.to.be.null; + expect(sliderDiv.tagName).to.be.equal("DIV"); + + keys.forEach((keyName) => { + fireEvent.keyDown(sliderDiv, { key: keyName }); + expect(spyOnPick.calledOnce).to.be.true; + spyOnPick.resetHistory(); + index = index + 1; + }); + }); + +}); diff --git a/ui/components/src/test/color/Swatch.test.tsx b/ui/components/src/test/color/Swatch.test.tsx index 47225d9..755db9a 100644 --- a/ui/components/src/test/color/Swatch.test.tsx +++ b/ui/components/src/test/color/Swatch.test.tsx @@ -9,23 +9,26 @@ import { expect } from "chai"; import sinon from "sinon"; import { ColorSwatch } from "../../ui-components/color/Swatch"; import TestUtils from "../TestUtils"; +import { ColorDef } from "@bentley/imodeljs-common"; describe("", () => { + const colorDef = ColorDef.from(255, 0, 0, 255); + afterEach(cleanup); it("should render", () => { - const renderedComponent = render(); + const renderedComponent = render(); expect(renderedComponent).not.to.be.undefined; }); it("Fire click event to pick color", async () => { const spyOnPick = sinon.spy(); - function handleColorPick(color: string): void { - expect(color).to.be.equal("rgba(255,0,0,255)"); + function handleColorPick(color: ColorDef): void { + expect(color.equals(colorDef)).to.be.true; spyOnPick(); } - const renderedComponent = render(); + const renderedComponent = render(); const colorSwatch = renderedComponent.container.firstChild as HTMLElement; expect(colorSwatch).not.to.be.null; expect(colorSwatch.tagName).to.be.equal("BUTTON"); diff --git a/ui/components/src/test/tree/component/Tree.test.tsx b/ui/components/src/test/tree/component/Tree.test.tsx index 172c1b4..f553077 100644 --- a/ui/components/src/test/tree/component/Tree.test.tsx +++ b/ui/components/src/test/tree/component/Tree.test.tsx @@ -61,6 +61,11 @@ describe("Tree", () => { throw new Error(`Found more than one node with label "${label}"`); return result[0]; }; + const getNodeLabel = (node: HTMLElement): string => { + const contents = within(node).getByTestId(Tree.TestId.NodeContents); + const labelSpan = contents.querySelector("div.components-tree-node-content span"); + return labelSpan!.innerHTML; + }; const createDataProvider = (expandedNodes?: string[]): TreeDataProviderMethod => { const isExpanded = (id: string) => (undefined === expandedNodes) || expandedNodes.includes(id); @@ -112,7 +117,7 @@ describe("Tree", () => { const getSelectedNodes = (): Array => { return renderedTree.getAllByTestId(Tree.TestId.Node as any) .filter((node) => node.classList.contains("is-selected")) - .map((node) => Object.assign(node, { label: within(node).getByTestId(Tree.TestId.NodeContents).innerHTML })); + .map((node) => Object.assign(node, { label: getNodeLabel(node) })); }; let defaultSelectionProps: TreeProps; @@ -597,12 +602,7 @@ describe("Tree", () => { nodesDeselectedCallbackMock.verify((x) => x(moq.It.isAny()), moq.Times.never()); expect(getSelectedNodes().length).to.equal(0); - const expectSelectAll = [ - "
0
", - "
0-a
", - "
0-b
", - "
1
", - ]; + const expectSelectAll = ["0", "0-a", "0-b", "1"]; // drag // note: dragging re-renders to update selection @@ -632,19 +632,13 @@ describe("Tree", () => { await waitForUpdate(() => fireEvent.mouseMove(getNode("0-b").contentArea, { buttons: 1 }), renderSpy); nodesSelectedCallbackMock.verify((x) => x(moq.It.isAny(), moq.It.isAny()), moq.Times.never()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.isAny()), moq.Times.never()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0
", - "
0-a
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0", "0-a"]); // release fireEvent.mouseUp(getNode("0-b").contentArea); nodesSelectedCallbackMock.verify((x) => x(moq.It.isAny(), moq.It.isAny()), moq.Times.never()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.is((items: TreeNodeItem[]): boolean => verifyNodes(items, ["0-b", "1"]))), moq.Times.once()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0
", - "
0-a
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0", "0-a"]); }); it("dragging with multiple buttons pressed doesn't select nodes", async () => { @@ -678,29 +672,20 @@ describe("Tree", () => { fireEvent.mouseDown(getNode("0").contentArea); nodesSelectedCallbackMock.verify((x) => x(moq.It.isAny(), moq.It.isAny()), moq.Times.never()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.isAny()), moq.Times.never()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0
", - "
0-b
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0", "0-b"]); // drag // note: dragging re-renders to update selection await waitForUpdate(() => fireEvent.mouseMove(getNode("1").contentArea, { buttons: 1 }), renderSpy); nodesSelectedCallbackMock.verify((x) => x(moq.It.isAny(), moq.It.isAny()), moq.Times.never()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.isAny()), moq.Times.never()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0-a
", - "
1
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0-a", "1"]); // release fireEvent.mouseUp(getNode("1").contentArea); nodesSelectedCallbackMock.verify((x) => x(moq.It.is((items: TreeNodeItem[]): boolean => verifyNodes(items, ["0-a", "1"])), false), moq.Times.once()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.is((items: TreeNodeItem[]): boolean => verifyNodes(items, ["0", "0-b"]))), moq.Times.once()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0-a
", - "
1
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0-a", "1"]); }); it("drag selecting nodes does not select collapsed nodes", async () => { @@ -718,19 +703,13 @@ describe("Tree", () => { await waitForUpdate(() => fireEvent.mouseMove(getNode("1").contentArea, { buttons: 1 }), renderSpy); nodesSelectedCallbackMock.verify((x) => x(moq.It.isAny(), moq.It.isAny()), moq.Times.never()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.isAny()), moq.Times.never()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0
", - "
1
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0", "1"]); // release fireEvent.mouseUp(getNode("1").contentArea); nodesSelectedCallbackMock.verify((x) => x(moq.It.is((items: TreeNodeItem[]): boolean => verifyNodes(items, ["0", "1"])), false), moq.Times.once()); nodesDeselectedCallbackMock.verify((x) => x(moq.It.isAny()), moq.Times.never()); - expect(getSelectedNodes().map((n) => n.label)).to.deep.eq([ - "
0
", - "
1
", - ]); + expect(getSelectedNodes().map((n) => n.label)).to.deep.eq(["0", "1"]); }); }); @@ -1501,19 +1480,13 @@ describe("Tree", () => { }); it("rerenders when `onTreeNodeChanged` is broadcasted with undefined node", async () => { - const getFlatList = () => renderedTree.getAllByTestId(Tree.TestId.Node as any) - .map((node) => within(node).getByTestId(Tree.TestId.NodeContents).innerHTML); + const getFlatList = () => renderedTree.getAllByTestId(Tree.TestId.Node as any).map(getNodeLabel); await waitForUpdate(() => { renderedTree = render(); }, renderSpy, 2); expect(renderedTree.getAllByTestId(Tree.TestId.Node as any).length).to.eq(4); - expect(getFlatList()).to.deep.eq([ - "
0
", - "
0-a
", - "
0-b
", - "
1
", - ]); + expect(getFlatList()).to.deep.eq(["0", "0-a", "0-b", "1"]); setReverseOrder(true); @@ -1521,12 +1494,7 @@ describe("Tree", () => { interfaceProvider.onTreeNodeChanged!.raiseEvent([undefined]); }, renderSpy, 1); expect(renderedTree.getAllByTestId(Tree.TestId.Node as any).length).to.eq(4); - expect(getFlatList()).to.deep.eq([ - "
1
", - "
0
", - "
0-b
", - "
0-a
", - ]); + expect(getFlatList()).to.deep.eq(["1", "0", "0-b", "0-a"]); }); it("handles case when `onTreeNodeChanged` is broadcasted with invalid node", async () => { diff --git a/ui/components/src/ui-components.ts b/ui/components/src/ui-components.ts index b57b323..802bd9f 100644 --- a/ui/components/src/ui-components.ts +++ b/ui/components/src/ui-components.ts @@ -44,6 +44,7 @@ export * from "./ui-components/editors/EnumEditor"; export * from "./ui-components/editors/EnumButtonGroupEditor"; export * from "./ui-components/editors/BooleanEditor"; export * from "./ui-components/editors/ToggleEditor"; +export * from "./ui-components/editors/ColorEditor"; export * from "./ui-components/filtering/FilteringInput"; export * from "./ui-components/filtering/ResultSelector"; @@ -73,6 +74,10 @@ export * from "./ui-components/propertygrid/SimplePropertyDataProvider"; export * from "./ui-components/propertygrid/component/PropertyGrid"; export * from "./ui-components/propertygrid/component/PropertyCategoryBlock"; export * from "./ui-components/color/Swatch"; +export * from "./ui-components/color/HueSlider"; +export * from "./ui-components/color/AlphaSlider"; +export * from "./ui-components/color/SaturationPicker"; +export * from "./ui-components/color/ColorPickerButton"; export * from "./ui-components/table/TableDataProvider"; export * from "./ui-components/table/SimpleTableDataProvider"; diff --git a/ui/components/src/ui-components/color/AlphaSlider.scss b/ui/components/src/ui-components/color/AlphaSlider.scss new file mode 100644 index 0000000..20a9871 --- /dev/null +++ b/ui/components/src/ui-components/color/AlphaSlider.scss @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "@bentley/ui-core/lib/ui-core/index"; + +.components-alpha-pointer { + position: absolute; + width: 1.2rem; + height: 1.2rem; + border-radius: 50%; + background-color: rgb(248, 248, 248); + box-shadow: rgba(0, 0, 0, 0.37) 0px 1px 4px 0px; + + &:focus { + outline: none; + border: none; + } +} + +.components-alpha-container-horizontal { + width: 100%; + height: 1rem; + display: flex; + align-items: center; + justify-content: center; + + .components-alpha-slider { + position: relative; + width: calc(100% - 1.2rem); + height: 100%; + background-color: linear-gradient(to right, rgba(47, 37, 72, 0) 0%, rgb(47, 37, 72) 100%); + background-image: url('data:image/svg+xml, '), + linear-gradient(to right, rgba(47, 37, 72, 0) 0%, rgb(47, 37, 72) 100%); + background-size: 2rem 1rem, cover; + background-repeat: repeat, no-repeat; + + .components-alpha-pointer { + transform: translate(-.6rem, -.1rem); + } + } +} + +.components-alpha-container-vertical { + width: 1rem; + display: flex; + align-items: center; + justify-content: center; + height: 100%; + + .components-alpha-slider { + position: relative; + width: 100%; + height: calc(100% - 1.2rem); + background-color: linear-gradient(to bottom, rgba(47, 37, 72, 0) 0%, rgb(47, 37, 72) 100%); + background-image: url('data:image/svg+xml, '), + linear-gradient(to top, rgba(47, 37, 72, 0) 0%, rgb(47, 37, 72) 100%); + background-size: 1rem 2rem, cover; + background-repeat: repeat, no-repeat; + + .components-alpha-pointer { + transform: translate(-.1rem, -.6rem); + } + } +} \ No newline at end of file diff --git a/ui/components/src/ui-components/color/AlphaSlider.tsx b/ui/components/src/ui-components/color/AlphaSlider.tsx new file mode 100644 index 0000000..c891bd3 --- /dev/null +++ b/ui/components/src/ui-components/color/AlphaSlider.tsx @@ -0,0 +1,168 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module Color */ + +import * as React from "react"; +import "./AlphaSlider.scss"; +import classnames from "classnames"; + +/** Properties for the [[AlphaSlider]] React component */ +export interface AlphaSliderProps extends React.HTMLAttributes { + /** true if slider is oriented horizontal, else vertical orientation is assumed */ + isHorizontal?: boolean; + /** function to run when user selects color swatch */ + onAlphaChange?: ((alpha: number) => void) | undefined; + /** Alpha value between 0 (transparent) and 1 (opaque) */ + alpha: number; +} + +/** AlphaSlider component used to set the alpha value. */ +export class AlphaSlider extends React.PureComponent { + private _container: HTMLDivElement | null = null; + + constructor(props: AlphaSliderProps) { + super(props); + } + + private _calculateChange = (e: React.MouseEvent | React.TouchEvent, isHorizontal: boolean, alpha: number, container: HTMLDivElement): number | undefined => { + e.preventDefault(); + const containerWidth = container.clientWidth; + const containerHeight = container.clientHeight; + + let x = 0; + if ("pageX" in e) { + x = (e as React.MouseEvent).pageX; + } else { + if (undefined === e.touches) + return undefined; + x = (e as React.TouchEvent).touches[0].pageX; + } + if (undefined === x) + return undefined; + + let y = 0; + if ("pageY" in e) { + y = (e as React.MouseEvent).pageY; + } else { + if (undefined === e.touches) + return; + y = (e as React.TouchEvent).touches[0].pageY; + } + if (undefined === y) + return undefined; + + const left = x - (container.getBoundingClientRect().left + window.pageXOffset); + const top = y - (container.getBoundingClientRect().top + window.pageYOffset); + + let t = alpha; + + if (!isHorizontal) { + if (top < 0) { + t = 1; + } else if (top > containerHeight) { + t = 0; + } else { + t = 1 - (top / containerHeight); + } + } else { // horizontal + if (left < 0) { + t = 0; + } else if (left > containerWidth) { + t = 1; + } else { + t = left / containerWidth; + } + } + + if (t < 0) t = 0; + if (t > 1) t = 1; + return (alpha !== t) ? t : undefined; + } + + public componentWillUnmount() { + this._unbindEventListeners(); + } + + private _onChange = (e: React.MouseEvent | React.TouchEvent) => { + if (this._container && this.props.onAlphaChange) { + const change = this._calculateChange(e, this.props.isHorizontal ? this.props.isHorizontal : false, this.props.alpha, this._container); + undefined !== change && typeof this.props.onAlphaChange === "function" && this.props.onAlphaChange(change); + } + } + + private _onMouseDown = (e: React.MouseEvent) => { + this._onChange(e); + if (this._container) + this._container.focus(); + window.addEventListener("mousemove", this._onChange as any); + window.addEventListener("mouseup", this._onMouseUp); + } + + private _onKeyDown = (evt: React.KeyboardEvent) => { + let newTransparency: number | undefined; + if (evt.key === "ArrowLeft" || evt.key === "ArrowDown") { + newTransparency = this.props.alpha - (evt.ctrlKey ? .1 : .05); + } else if (evt.key === "ArrowRight" || evt.key === "ArrowUp") { + newTransparency = this.props.alpha + (evt.ctrlKey ? .1 : .05); + } else if (evt.key === "PageDown") { + newTransparency = this.props.alpha - (evt.ctrlKey ? .5 : .25); + } else if (evt.key === "PageUp") { + newTransparency = this.props.alpha + (evt.ctrlKey ? .5 : .25); + } else if (evt.key === "Home") { + newTransparency = 0; + } else if (evt.key === "End") { + newTransparency = 1; + } + + if (undefined !== newTransparency) { + if (newTransparency > 1) newTransparency = 1; + if (newTransparency < 0) newTransparency = 0; + if (this.props.onAlphaChange) + this.props.onAlphaChange(newTransparency); + } + } + + private _onMouseUp = () => { + this._unbindEventListeners(); + } + + private _unbindEventListeners() { + window.removeEventListener("mousemove", this._onChange as any); + window.removeEventListener("mouseup", this._onMouseUp); + } + + public render(): React.ReactNode { + const containerClasses = classnames( + this.props.isHorizontal ? "components-alpha-container-horizontal" : "components-alpha-container-vertical", + ); + + const pointerStyle: React.CSSProperties = this.props.isHorizontal ? { + left: `${(this.props.alpha * 100)}%`, + } : { + left: `0px`, + top: `${-(this.props.alpha * 100) + 100}%`, + }; + + return ( +
+
this._container = container} + onMouseDown={this._onMouseDown} + onTouchMove={this._onChange} + onTouchStart={this._onChange} + tabIndex={0} + onKeyDown={this._onKeyDown} + > +
+
+
+ ); + } + +} diff --git a/ui/components/src/ui-components/color/ColorPickerButton.scss b/ui/components/src/ui-components/color/ColorPickerButton.scss new file mode 100644 index 0000000..cbf3aa0 --- /dev/null +++ b/ui/components/src/ui-components/color/ColorPickerButton.scss @@ -0,0 +1,55 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "@bentley/ui-core/lib/ui-core/index"; + +.components-colorpicker { + position: relative; + width: 100%; + height: 100%; +} + +.components-colorpicker-button { + font-family: $uicore-font-family; + font-size: $uicore-font-size; + color: $buic-foreground-body; + background: $buic-background-control; + box-sizing: border-box; + border: 1px solid $buic-inputs-border; + border-radius: 3px; + width: 1.25em; + height: 1.25em; + cursor: pointer; + + &.round { + border-radius: 50%; + } +} + +.components-colorpicker-popup { + border: 1px solid $buic-inputs-border; + + >.components-colorpicker-popup-container { + color: $buic-foreground-body; + background: $buic-background-control; + + >.components-colorpicker-popup-colors { + display: grid; + grid-gap: 8px; + padding: 8px; + + >.components-colorpicker-swatch { + height: 1.5em; + width: 1.5em; + transition: scale 0.2s ease; + cursor: pointer; + outline: none; + + &:hover { + transform: scale(1.15); + } + } + } + } +} \ No newline at end of file diff --git a/ui/components/src/ui-components/color/ColorPickerButton.tsx b/ui/components/src/ui-components/color/ColorPickerButton.tsx new file mode 100644 index 0000000..a4b4cbc --- /dev/null +++ b/ui/components/src/ui-components/color/ColorPickerButton.tsx @@ -0,0 +1,125 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module Color */ + +import * as React from "react"; +import classnames from "classnames"; +import { ColorDef, ColorByName } from "@bentley/imodeljs-common"; +import { Popup, Position } from "@bentley/ui-core"; +import { ColorSwatch } from "./Swatch"; +import "./ColorPickerButton.scss"; + +/** Properties for the [[ColorPickerButton]] React component */ +export interface ColorPickerProps extends React.ButtonHTMLAttributes { + /** active color */ + activeColor: ColorDef; + /** available colors */ + colorDefs?: ColorDef[]; + /** function to run when user selects color swatch */ + onColorPick?: ((color: ColorDef) => void) | undefined; + /** Show swatches as squares unless round is set to true */ + round?: boolean; + /** Disabled or not */ + disabled?: boolean; + /** Readonly or not */ + readonly?: boolean; + /** Title to show at top of DropDown */ + dropDownTitle?: string; + /** Number of columns */ + numColumns: number; +} + +interface ColorPickerState { + showPopup: boolean; +} + +/** ColorPickerButton component */ +export class ColorPickerButton extends React.PureComponent { + private _colors: ColorDef[] = []; + + public static defaultProps: Partial = { + numColumns: 4, + }; + + constructor(props: ColorPickerProps) { + super(props); + + if (props.colorDefs) { + props.colorDefs.forEach((color: ColorDef) => { this._colors.push(color.clone()); }); + } else { + ColorPickerButton.defaultColors.forEach((color: ColorDef) => { this._colors.push(color.clone()); }); + } + this.state = { showPopup: false }; + } + + public static get defaultColors(): ColorDef[] { + return [ + new ColorDef(ColorByName.red), + new ColorDef(ColorByName.orange), + new ColorDef(ColorByName.yellow), + new ColorDef(ColorByName.green), + new ColorDef(ColorByName.blue), + new ColorDef(ColorByName.indigo), + new ColorDef(ColorByName.violet), + new ColorDef(ColorByName.black), + new ColorDef(ColorByName.white), + new ColorDef(ColorByName.cyan), + new ColorDef(ColorByName.fuchsia), + new ColorDef(ColorByName.tan), + new ColorDef(ColorByName.gray), + new ColorDef(ColorByName.brown), + new ColorDef(ColorByName.purple), + new ColorDef(ColorByName.olive), + ]; + } + + private _togglePopup = () => { + if (this.props.readonly) + return; + + this.setState((_prevState) => ({ showPopup: !this.state.showPopup })); + } + + private _closePopup = () => { + this.setState((_prevState) => ({ showPopup: false })); + } + + private _handleColorPicked = (color: ColorDef) => { + this._closePopup(); + if (this.props.onColorPick) + this.props.onColorPick (color); + } + + private renderPopup(title: string | undefined) { + const containerStyle: React.CSSProperties = {gridTemplateColumns: `repeat(${this.props.numColumns}, 1fr)`}; + return ( +
+ {title &&

{title}

} +
+ {this._colors.map((color, index) => )} +
+
+ ); + } + + public render() { + const { b, g, r, t } = this.props.activeColor.colors as any; + const rgbaString = `rgb(${r},${g},${b},${(255 - t) / 255})`; + const colorStyle = { backgroundColor: rgbaString } as React.CSSProperties; + const className = classnames("components-colorpicker", this.props.className); + const buttonName = classnames("components-colorpicker-button", this.props.round && "round"); + + return ( +
+
+ ); + } + +} diff --git a/ui/components/src/ui-components/color/HueSlider.scss b/ui/components/src/ui-components/color/HueSlider.scss new file mode 100644 index 0000000..fc3ccb0 --- /dev/null +++ b/ui/components/src/ui-components/color/HueSlider.scss @@ -0,0 +1,62 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "@bentley/ui-core/lib/ui-core/index"; + +.components-hue-pointer { + position: absolute; + width: 1.2rem; + height: 1.2rem; + border-radius: 50%; + background-color: rgb(248, 248, 248); + box-shadow: rgba(0, 0, 0, 0.37) 0px 1px 4px 0px; + + &:focus { + outline: none; + border: none; + } +} + +.components-hue-container-horizontal { + width: 100%; + height: 1rem; + display: flex; + align-items: center; + justify-content: center; + + + .components-hue-slider { + position: relative; + width: calc(100% - 1.2rem); + height: 100%; + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + background: -webkit-linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + } + + .components-hue-pointer { + transform: translate(-.6rem, -.1rem); + } +} + +.components-hue-container-vertical { + width: 1rem; + display: flex; + align-items: center; + justify-content: center; + height: 100%; + + .components-hue-slider { + position: relative; + width: 100%; + height: calc(100% - 1.2rem); + background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, + #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%, + #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + } + + .components-hue-pointer { + transform: translate(-.1rem, -.6rem); + } +} \ No newline at end of file diff --git a/ui/components/src/ui-components/color/HueSlider.tsx b/ui/components/src/ui-components/color/HueSlider.tsx new file mode 100644 index 0000000..90a9425 --- /dev/null +++ b/ui/components/src/ui-components/color/HueSlider.tsx @@ -0,0 +1,182 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module Color */ + +import * as React from "react"; +import "./HueSlider.scss"; +import classnames from "classnames"; +import { HSVColor } from "@bentley/imodeljs-common"; + +/** Properties for the [[HueSlider]] React component */ +export interface HueSliderProps extends React.HTMLAttributes { + /** true if slider is oriented horizontal, else vertical orientation is assumed */ + isHorizontal?: boolean; + /** function to run when user selects color swatch */ + onHueChange?: ((hue: HSVColor) => void) | undefined; + /** HSV Color Value */ + hsv: HSVColor; +} + +/** HueSlider component used to set the hue value. */ +export class HueSlider extends React.PureComponent { + private _container: HTMLDivElement | null = null; + + constructor(props: HueSliderProps) { + super(props); + } + + private _calculateChange = (e: React.MouseEvent | React.TouchEvent, isHorizontal: boolean, hsv: HSVColor, container: HTMLDivElement): HSVColor | undefined => { + e.preventDefault(); + const containerWidth = container.clientWidth; + const containerHeight = container.clientHeight; + + let x = 0; + if ("pageX" in e) { + x = (e as React.MouseEvent).pageX; + } else { + if (undefined === e.touches) + return undefined; + x = (e as React.TouchEvent).touches[0].pageX; + } + if (undefined === x) + return undefined; + + let y = 0; + if ("pageY" in e) { + y = (e as React.MouseEvent).pageY; + } else { + if (undefined === e.touches) + return; + y = (e as React.TouchEvent).touches[0].pageY; + } + if (undefined === y) + return undefined; + + const left = x - (container.getBoundingClientRect().left + window.pageXOffset); + const top = y - (container.getBoundingClientRect().top + window.pageYOffset); + const newColor = this.props.hsv.clone(); + + if (!isHorizontal) { + let h; + if (top < 0) { + h = 360; + } else if (top > containerHeight) { + h = 0; + } else { + const percent = -((top * 100) / containerHeight) + 100; + h = ((360 * percent) / 100); + } + + if (hsv.h !== h) { + newColor.h = h; + return newColor; + } + } else { // horizontal + let h; + if (left < 0) { + h = 0; + } else if (left > containerWidth) { + h = 360; + } else { + const percent = (left * 100) / containerWidth; + h = ((360 * percent) / 100); + } + + if (hsv.h !== h) { + newColor.h = h; + return newColor; + } + } + return undefined; + } + + public componentWillUnmount() { + this._unbindEventListeners(); + } + + private _onChange = (e: React.MouseEvent | React.TouchEvent) => { + if (this._container && this.props.onHueChange) { + const change = this._calculateChange(e, this.props.isHorizontal ? this.props.isHorizontal : false, this.props.hsv, this._container); + change && typeof this.props.onHueChange === "function" && this.props.onHueChange(change); + } + } + + private _onMouseDown = (e: React.MouseEvent) => { + this._onChange(e); + if (this._container) + this._container.focus(); + window.addEventListener("mousemove", this._onChange as any); + window.addEventListener("mouseup", this._onMouseUp); + } + + private _onKeyDown = (evt: React.KeyboardEvent) => { + let newHue: number | undefined; + const hueValue = this.props.hsv.clone(); + if (evt.key === "ArrowLeft" || evt.key === "ArrowDown") { + newHue = hueValue.h - (evt.ctrlKey ? 10 : 1); + } else if (evt.key === "ArrowRight" || evt.key === "ArrowUp") { + newHue = hueValue.h + (evt.ctrlKey ? 10 : 1); + } else if (evt.key === "PageDown") { + newHue = hueValue.h - (evt.ctrlKey ? 180 : 60); + } else if (evt.key === "PageUp") { + newHue = hueValue.h + (evt.ctrlKey ? 180 : 60); + } else if (evt.key === "Home") { + newHue = 0; + } else if (evt.key === "End") { + newHue = 360; + } + + if (undefined !== newHue) { + const newColor = this.props.hsv.clone(); + if (newHue > 360) newHue = 360; + if (newHue < 0) newHue = 0; + newColor.h = newHue; + if (this.props.onHueChange) + this.props.onHueChange(newColor); + } + } + + private _onMouseUp = () => { + this._unbindEventListeners(); + } + + private _unbindEventListeners() { + window.removeEventListener("mousemove", this._onChange as any); + window.removeEventListener("mouseup", this._onMouseUp); + } + + public render(): React.ReactNode { + const containerClasses = classnames( + this.props.isHorizontal ? "components-hue-container-horizontal" : "components-hue-container-vertical", + ); + + const pointerStyle: React.CSSProperties = this.props.isHorizontal ? { + left: `${(this.props.hsv.h * 100) / 360}%`, + } : { + left: `0px`, + top: `${-((this.props.hsv.h * 100) / 360) + 100}%`, + }; + + return ( +
+
this._container = container} + onMouseDown={this._onMouseDown} + onTouchMove={this._onChange} + onTouchStart={this._onChange} + tabIndex={0} + onKeyDown={this._onKeyDown} + > +
+
+
+ ); + } + +} diff --git a/ui/components/src/ui-components/color/SaturationPicker.scss b/ui/components/src/ui-components/color/SaturationPicker.scss new file mode 100644 index 0000000..97d0ea0 --- /dev/null +++ b/ui/components/src/ui-components/color/SaturationPicker.scss @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "@bentley/ui-core/lib/ui-core/index"; + +.components-saturation-pointer { + position: absolute; + width: 1.2rem; + height: 1.2rem; + border-radius: 50%; + background-color: rgb(248, 248, 248); + box-shadow: rgba(0, 0, 0, 0.37) 0px 1px 4px 0px; + + &:focus { + outline: none; + border: none; + } +} + +.components-saturation-container { + width: 100%; + height: 100%; + min-width: 100px; + min-height: 100px; + + .components-saturation-region { + position: relative; + width: 100%; + height: 100%; + background-image: linear-gradient(to top, #000, rgba(0, 0, 0, 0)), linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); + background-size: cover, cover; + overflow: hidden; + + .components-saturation-pointer { + transform: translate(-.6rem, -.6rem); + } + } + +} \ No newline at end of file diff --git a/ui/components/src/ui-components/color/SaturationPicker.tsx b/ui/components/src/ui-components/color/SaturationPicker.tsx new file mode 100644 index 0000000..7f16feb --- /dev/null +++ b/ui/components/src/ui-components/color/SaturationPicker.tsx @@ -0,0 +1,169 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module Color */ + +import * as React from "react"; +import "./SaturationPicker.scss"; +import { HSVColor } from "@bentley/imodeljs-common"; + +/** Properties for the [[SaturationPicker]] React component */ +export interface SaturationPickerProps extends React.HTMLAttributes { + /** function to run when user selects location in saturation region */ + onSaturationChange?: ((saturation: HSVColor) => void) | undefined; + /** HSV Color Value */ + hsv: HSVColor; +} + +/** SaturationPicker component used to set the saturation value. */ +export class SaturationPicker extends React.PureComponent { + private _container: HTMLDivElement | null = null; + + constructor(props: SaturationPickerProps) { + super(props); + } + + private _calculateChange = (e: React.MouseEvent | React.TouchEvent, hsv: HSVColor, container: HTMLDivElement): HSVColor | undefined => { + e.preventDefault(); + const { width: containerWidth, height: containerHeight } = container.getBoundingClientRect(); + + let x = 0; + if ("pageX" in e) { + x = (e as React.MouseEvent).pageX; + } else { + if (undefined === e.touches) + return undefined; + x = (e as React.TouchEvent).touches[0].pageX; + } + if (undefined === x) + return undefined; + + let y = 0; + if ("pageY" in e) { + y = (e as React.MouseEvent).pageY; + } else { + if (undefined === e.touches) + return; + y = (e as React.TouchEvent).touches[0].pageY; + } + if (undefined === y) + return undefined; + + let left = x - (container.getBoundingClientRect().left + window.pageXOffset); + let top = y - (container.getBoundingClientRect().top + window.pageYOffset); + + if (left < 0) { + left = 0; + } else if (left > containerWidth) { + left = containerWidth; + } else if (top < 0) { + top = 0; + } else if (top > containerHeight) { + top = containerHeight; + } + + let saturation = (left * 100) / containerWidth; + let value = -((top * 100) / containerHeight) + 100; + + if (saturation < 0) saturation = 0; + if (saturation > 100) saturation = 100; + if (value < 0) value = 0; + if (value > 100) value = 100; + + const newColor = new HSVColor(); + newColor.h = hsv.h; + newColor.s = saturation; + newColor.v = value; + return newColor; + } + + public componentWillUnmount() { + this._unbindEventListeners(); + } + + private _onChange = (e: React.MouseEvent | React.TouchEvent) => { + if (this._container && this.props.onSaturationChange) { + const change = this._calculateChange(e, this.props.hsv, this._container); + change && typeof this.props.onSaturationChange === "function" && this.props.onSaturationChange(change); + } + } + + private _onMouseDown = (e: React.MouseEvent) => { + this._onChange(e); + if (this._container) + this._container.focus(); + window.addEventListener("mousemove", this._onChange as any); + window.addEventListener("mouseup", this._onMouseUp); + } + + private _onKeyDown = (evt: React.KeyboardEvent) => { + const newColor = this.props.hsv.clone(); + if (evt.key === "ArrowLeft") { + newColor.s -= (evt.ctrlKey ? 10 : 1); + } else if (evt.key === "ArrowDown") { + newColor.v -= (evt.ctrlKey ? 10 : 1); + } else if (evt.key === "ArrowRight") { + newColor.s += (evt.ctrlKey ? 10 : 1); + } else if (evt.key === "ArrowUp") { + newColor.v += (evt.ctrlKey ? 10 : 1); + } else if (evt.key === "PageDown") { + newColor.v = 0; + } else if (evt.key === "PageUp") { + newColor.v = 100; + } else if (evt.key === "Home") { + newColor.s = 0; + } else if (evt.key === "End") { + newColor.s = 100; + } + + if (newColor.s < 0) newColor.s = 0; + if (newColor.s > 100) newColor.s = 100; + if (newColor.v < 0) newColor.v = 0; + if (newColor.v > 100) newColor.v = 100; + + if (this.props.onSaturationChange) + this.props.onSaturationChange(newColor); + } + + private _onMouseUp = () => { + this._unbindEventListeners(); + } + + private _unbindEventListeners() { + window.removeEventListener("mousemove", this._onChange as any); + window.removeEventListener("mouseup", this._onMouseUp); + } + + public render(): React.ReactNode { + + const pointerStyle: React.CSSProperties = { + left: `${this.props.hsv.s}%`, + top: `${-(this.props.hsv.v) + 100}%`, + }; + + const colorStyle: React.CSSProperties = { + backgroundColor: `hsl(${this.props.hsv.h},100%, 50%)`, + }; + + return ( +
+
this._container = container} + onMouseDown={this._onMouseDown} + onTouchMove={this._onChange} + onTouchStart={this._onChange} + tabIndex={0} + onKeyDown={this._onKeyDown} + > +
+
+
+ ); + } + +} diff --git a/ui/components/src/ui-components/color/Swatch.scss b/ui/components/src/ui-components/color/Swatch.scss index caf28d0..477a088 100644 --- a/ui/components/src/ui-components/color/Swatch.scss +++ b/ui/components/src/ui-components/color/Swatch.scss @@ -4,15 +4,20 @@ *--------------------------------------------------------------------------------------------*/ @import "@bentley/ui-core/lib/ui-core/index"; -$color-swatch-size: $uicore-font-size * 1.2; - .components-color-swatch { - height: $color-swatch-size; - width: $color-swatch-size; - margin-left: 0px; + font-size: $uicore-font-size; + height: 1em * 1.2; + width: 1em * 1.2; border-width: 0px; + border-radius: 3px; + + &.round { + border-radius: 50%; + } + + &[disabled] { + opacity: .2; + } } -.components-color-swatch-round { - border-radius: 50%; -} \ No newline at end of file + diff --git a/ui/components/src/ui-components/color/Swatch.tsx b/ui/components/src/ui-components/color/Swatch.tsx index 64d3d59..6f70356 100644 --- a/ui/components/src/ui-components/color/Swatch.tsx +++ b/ui/components/src/ui-components/color/Swatch.tsx @@ -7,20 +7,14 @@ import * as React from "react"; import classnames from "classnames"; import "./Swatch.scss"; +import { ColorDef } from "@bentley/imodeljs-common"; /** Properties for the [[ColorSwatch]] React component */ export interface ColorSwatchProps extends React.ButtonHTMLAttributes { - /** color specification that must be in one of the following forms: - * "rgb(255,0,0)"* - * "rgba(255,0,0,255)"* - * "rgb(100%,0%,0%)"* - * "hsl(120,50%,50%)"* - * "#rrbbgg"* - * "#rrbbggaa"* - */ - color: string; + /** color specification */ + colorDef: ColorDef; /** function to run when user selects color swatch */ - onColorPick?: ((color: string, e: React.MouseEvent) => void) | undefined; + onColorPick?: ((color: ColorDef, e: React.MouseEvent) => void) | undefined; /** Show swatches as squares unless round is set to true */ round?: boolean; } @@ -28,20 +22,20 @@ export interface ColorSwatchProps extends React.ButtonHTMLAttributes = (props) => { - const colorStyle = { background: props.color } as React.CSSProperties; + const { b, g, r, t } = props.colorDef.colors as any; + + const rgbaString = `rgb(${r},${g},${b},${(255 - t) / 255})`; + const colorStyle: React.CSSProperties = { backgroundColor: rgbaString }; const handleClick = (e: React.MouseEvent) => { if (props && props.onColorPick) - props.onColorPick(props.color, e); + props.onColorPick(props.colorDef, e); }; - const classes = classnames("components-color-swatch", - props.className, - props.round && "components-color-swatch-round", - ); + const classes = classnames("components-color-swatch", props.className, props.round && "round" ); const { - onColorPick, color, round, // do not pass on color swatch specific props + onColorPick, colorDef, round, // do not pass on color swatch specific props ...otherProps /* tslint:disable-line: trailing-comma */ // pass-through props } = props as any; diff --git a/ui/components/src/ui-components/converters/valuetypes/ConvertedTypes.ts b/ui/components/src/ui-components/converters/valuetypes/ConvertedTypes.ts index bc2ce09..3dd1dbb 100644 --- a/ui/components/src/ui-components/converters/valuetypes/ConvertedTypes.ts +++ b/ui/components/src/ui-components/converters/valuetypes/ConvertedTypes.ts @@ -6,15 +6,19 @@ import { Id64String } from "@bentley/bentleyjs-core"; +/** Interface for 2d Point */ export interface Point2d { x: number; y: number; } +/** Interface for 3d Point */ export interface Point3d extends Point2d { z: number; } +/** Type definition for 2d or 3d Point */ export type Point = Point2d | Point3d; +/** Type definition for Value */ export type Value = boolean | number | string | Date | Point | Id64String; diff --git a/ui/components/src/ui-components/editors/ColorEditor.scss b/ui/components/src/ui-components/editors/ColorEditor.scss new file mode 100644 index 0000000..6df1747 --- /dev/null +++ b/ui/components/src/ui-components/editors/ColorEditor.scss @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "@bentley/ui-core/lib/ui-core/index"; + +$components-color-editor-item-width: 1.5rem; +$components-color-editor-item-height: 1.5rem; + +.components-color-editor { + font-family: $uicore-font-family; + font-size: $uicore-font-size; + color: $buic-foreground-body; + background: $buic-background-control; + border: none; + box-sizing: border-box; + width: $components-color-editor-item-width; + height: $components-color-editor-item-height; +} \ No newline at end of file diff --git a/ui/components/src/ui-components/editors/ColorEditor.tsx b/ui/components/src/ui-components/editors/ColorEditor.tsx new file mode 100644 index 0000000..7fc6583 --- /dev/null +++ b/ui/components/src/ui-components/editors/ColorEditor.tsx @@ -0,0 +1,160 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module PropertyEditors */ + +import * as React from "react"; +import { PropertyValueFormat, PropertyValue, PrimitiveValue, PropertyRecord, PropertyEditorParams, PropertyEditorParamTypes, ColorEditorParams } from "@bentley/imodeljs-frontend"; // +import { PropertyEditorProps, TypeEditor } from "./EditorContainer"; +import { ColorDef } from "@bentley/imodeljs-common"; +import { ColorPickerButton } from "../color/ColorPickerButton"; +import { PropertyEditorManager, PropertyEditorBase } from "./PropertyEditorManager"; +import "./ColorEditor.scss"; + +interface ColorEditorState { + colorValue: number; + readonly: boolean; + isDisabled?: boolean; +} + +/** ColorEditor React component that is a property editor with text input */ +export class ColorEditor extends React.PureComponent implements TypeEditor { + private _control: any | null = null; + private _isMounted = false; + private _availableColors: ColorDef[] = []; + private _numColumns = 4; + + /** @hidden */ + public readonly state: Readonly = { + colorValue: 0, + readonly: false, + }; + + constructor(props: PropertyEditorProps) { + super(props); + + const record = this.props.propertyRecord; + if (record && record.property && record.property.editor && record.property.editor.params) { + const colorParams = record.property.editor.params.find((param: PropertyEditorParams) => param.type === PropertyEditorParamTypes.ColorData) as ColorEditorParams; + // istanbul ignore else + if (colorParams) { + colorParams.colorValues.forEach((colorNumber: number) => { + this._availableColors.push(new ColorDef(colorNumber)); + }); + if (colorParams.numColumns) + this._numColumns = colorParams.numColumns; + } + } + } + + public getValue(): number { + return this.state.colorValue; + } + + public async getPropertyValue(): Promise { + const record = this.props.propertyRecord; + let propertyValue: PropertyValue | undefined; + + // istanbul ignore else + if (record && record.value.valueFormat === PropertyValueFormat.Primitive) { + propertyValue = { + valueFormat: PropertyValueFormat.Primitive, + value: this.state.colorValue, + displayValue: "", + }; + } + + return propertyValue; + } + + private setFocus(): void { + // istanbul ignore else + if (this._control && !this.state.isDisabled) { + this._control.focus(); + } + } + + private _onColorPick = (color: ColorDef) => { + const propertyRecord = this.props.propertyRecord as PropertyRecord; + + this.setState({ + colorValue: color.tbgr, + }, async () => { + // istanbul ignore else + if (propertyRecord && this.props.onCommit) { + const propertyValue = await this.getPropertyValue(); + // istanbul ignore else + if (propertyValue) { + this.props.onCommit({ propertyRecord, newValue: propertyValue }); + } + } + }); + } + + public componentDidMount() { + this._isMounted = true; + this.setStateFromProps(); // tslint:disable-line:no-floating-promises + } + + public componentWillUnmount() { + this._isMounted = false; + } + + public componentDidUpdate(prevProps: PropertyEditorProps) { + if (this.props.propertyRecord !== prevProps.propertyRecord) { + this.setStateFromProps(); // tslint:disable-line:no-floating-promises + } + } + + private async setStateFromProps() { + const record = this.props.propertyRecord; + let initialValue = 0; + + // istanbul ignore else + if (record && record.value.valueFormat === PropertyValueFormat.Primitive) { + initialValue = (record.value as PrimitiveValue).value as number; + } + + const readonly = record && undefined !== record.isReadonly ? record.isReadonly : false; + const isDisabled = record ? record.isDisabled : undefined; + + // istanbul ignore else + if (this._isMounted) + this.setState( + { colorValue: initialValue, readonly, isDisabled }, + () => { + if (this.props.setFocus) { + this.setFocus(); + // istanbul ignore else + if (this._control) + this._control.select(); + } + }, + ); + } + + public render() { + const colorDef = new ColorDef(this.state.colorValue); + return ( +
+ this._control = control} + activeColor={colorDef} + colorDefs={this._availableColors.length > 0 ? this._availableColors : undefined} + numColumns={this._numColumns} + disabled={this.state.isDisabled ? true : false} + onColorPick={this._onColorPick} + data-testid="components-color-editor" /> +
+ ); + } +} + +/** ColorPropertyEditor returns React component [[ColorEditor]] to select a color value. */ +export class ColorPropertyEditor extends PropertyEditorBase { + public get reactElement(): React.ReactNode { + return ; + } +} + +PropertyEditorManager.registerEditor("number", ColorPropertyEditor, "color-picker"); diff --git a/ui/components/src/ui-components/editors/EnumButtonGroupEditor.scss b/ui/components/src/ui-components/editors/EnumButtonGroupEditor.scss index 65a6e19..4b66838 100644 --- a/ui/components/src/ui-components/editors/EnumButtonGroupEditor.scss +++ b/ui/components/src/ui-components/editors/EnumButtonGroupEditor.scss @@ -9,9 +9,9 @@ $desktop-tool-stripe-height: 22px; $icon-size: 16px; $icon-color: $buic-icon-color; -$hovered-icon-color: $primary-tone; +$hovered-icon-color: $buic-foreground-primary-tone; $pressed-icon-color: $buic-icon-color-reverse; -$active-icon-color: $primary-base; +$active-icon-color: $buic-foreground-primary; $disabled-icon-color: $buic-icon-color-disabled; $icon-shadow-color: $buic-icon-color-reverse; $icon-shadow: drop-shadow(0 1px 0 $icon-shadow-color); @@ -121,7 +121,7 @@ $components-enumbuttongroup-editor-space-between-toolbar-items: 1px; } &:active:not(.nz-is-disabled) { - background: $primary-tone; + background: $buic-foreground-primary-tone; color: $buic-foreground-body-reverse; transition-duration: 150ms; transition-timing-function: cubic-bezier(1, 0.1, 1, 0.5); @@ -134,7 +134,7 @@ $components-enumbuttongroup-editor-space-between-toolbar-items: 1px; transition-duration: 0s; >i { - color: $primary-base; + color: $buic-foreground-primary; filter: $no-shadow; transition-duration: 150ms; transition-timing-function: cubic-bezier(1, 0.1, 1, 0.5); @@ -148,7 +148,7 @@ $components-enumbuttongroup-editor-space-between-toolbar-items: 1px; content: ''; display: block; position: absolute; - background: $primary-base; + background: $buic-foreground-primary; left: 3px; top: ($components-enumbuttongroup-editor-item-height - $desktop-tool-stripe-height) / 2; border-radius: 2px; diff --git a/ui/components/src/ui-components/filtering/ResultSelector.scss b/ui/components/src/ui-components/filtering/ResultSelector.scss index 3352370..5cce569 100644 --- a/ui/components/src/ui-components/filtering/ResultSelector.scss +++ b/ui/components/src/ui-components/filtering/ResultSelector.scss @@ -10,7 +10,7 @@ font-size: 12px; @include uicore-font-family; - color: $uicore-text-color; + color: $buic-text-color; } .result-selector-current-result { @@ -42,12 +42,12 @@ height: 20px; width: 20px; border-style: none; - color: $uicore-gray-5; + color: $buic-foreground-muted; margin: 0 4px; } .result-selector-button:hover { - background-color: $uicore-gray-b; + background-color: $buic-row-hover; // $uicore-gray-b; border-radius: 2px; } @@ -63,6 +63,6 @@ .result-selector-button:disabled, .result-selector-button[disabled]:hover { - background-color: $uicore-gray-9; + background-color: $buic-background-control-disabled; // $uicore-gray-9; cursor: default; } \ No newline at end of file diff --git a/ui/components/src/ui-components/properties/ItemStyle.ts b/ui/components/src/ui-components/properties/ItemStyle.ts index bef6375..0c7b383 100644 --- a/ui/components/src/ui-components/properties/ItemStyle.ts +++ b/ui/components/src/ui-components/properties/ItemStyle.ts @@ -2,6 +2,8 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +/** @module Properties */ + import { CSSProperties } from "react"; /** Converts a color value from a number to an HTML/CSS hex string */ diff --git a/ui/components/src/ui-components/table/component/Table.scss b/ui/components/src/ui-components/table/component/Table.scss index 7c16349..b7ba52b 100644 --- a/ui/components/src/ui-components/table/component/Table.scss +++ b/ui/components/src/ui-components/table/component/Table.scss @@ -19,7 +19,7 @@ height: calc(100% - 25px) !important; @include uicore-touch-scrolling; - @include uicore-scrollbar; + @include uicore-scrollbar(); } .react-grid-Container, @@ -75,19 +75,19 @@ } .react-grid-Header { - background: $buic-background-titlebar-outoffocus; + background: $buic-background-table-header; } .react-grid-HeaderCell { padding: 4px 0 0 8px; box-sizing: border-box; - background: $buic-background-titlebar-outoffocus; + background: $buic-background-table-header; font-size: 14px; border: none; } .react-grid-HeaderCell__draggable { - background: $buic-background-titlebar-outoffocus; + background: $buic-background-table-header; width: 8px !important; left: 100%; z-index: 2; diff --git a/ui/components/src/ui-components/table/hocs/DragDropRow.scss b/ui/components/src/ui-components/table/hocs/DragDropRow.scss index 65344d8..91c425b 100644 --- a/ui/components/src/ui-components/table/hocs/DragDropRow.scss +++ b/ui/components/src/ui-components/table/hocs/DragDropRow.scss @@ -5,24 +5,24 @@ @import "@bentley/ui-core/lib/ui-core/index"; .column-drag-layer { - border: 1px solid rgba($uicore-black, 0.5); + border: 1px solid $buic-foreground-disabled; border-radius: $uicore-border-radius; padding: 0px; margin: 0px; line-height: $uicore-line-height; - color: rgba($uicore-text-color, 0.5); + color: $buic-foreground-disabled; font-weight: bold; } .table-header-drag-drop { &.dragging .react-grid-HeaderCell { - background: $uicore-gray; + background: $buic-background-table-header; } &.left .react-grid-HeaderCell { - border-left: solid black 2px; + border-left: solid $buic-foreground-activehover 2px; } &.right .react-grid-HeaderCell { - border-right: solid black 2px; + border-right: solid $buic-foreground-activehover 2px; } } @@ -31,23 +31,23 @@ border-bottom: solid transparent 1px; &.above { - border-top: solid black 1px; + border-top: solid $buic-foreground-activehover 1px; } &.on { .react-grid-Row * { /* !important used because react-data-grid did. only way to override */ - background-color: $uicore-blue-8 !important; + background-color: $buic-foreground-primary !important; } } &.below { - border-bottom: solid black 1px; + border-bottom: solid $buic-foreground-activehover 1px; } &.dragging { .react-grid-Row * { - color: $uicore-gray; + color: $buic-foreground-muted; } } } diff --git a/ui/components/src/ui-components/tree/component/NodeContent.tsx b/ui/components/src/ui-components/tree/component/NodeContent.tsx index 404d689..ae2f6a2 100644 --- a/ui/components/src/ui-components/tree/component/NodeContent.tsx +++ b/ui/components/src/ui-components/tree/component/NodeContent.tsx @@ -18,6 +18,9 @@ import { ItemStyleProvider, ItemStyle } from "../../properties/ItemStyle"; import "./NodeContent.scss"; +/** Properties for [[TreeNodeContent]] component + * @hidden + */ export interface TreeNodeContentProps { node: BeInspireTreeNode; showDescription?: boolean; @@ -40,10 +43,14 @@ export interface TreeNodeContentProps { renderId?: string; } +/** @hidden */ export interface TreeNodeContentState { label: React.ReactNode; } +/** React component for displaying [[TreeNode]] label + * @hidden + */ export class TreeNodeContent extends React.Component { public readonly state: TreeNodeContentState = { label: , diff --git a/ui/components/src/ui-components/tree/component/Tree.tsx b/ui/components/src/ui-components/tree/component/Tree.tsx index 2fe5f21..c0de215 100644 --- a/ui/components/src/ui-components/tree/component/Tree.tsx +++ b/ui/components/src/ui-components/tree/component/Tree.tsx @@ -50,7 +50,7 @@ export type NodesDeselectedCallback = OnItemsDeselectedCallback; /** Type for node renderer */ export type NodeRenderer = (item: BeInspireTreeNode, props: TreeNodeProps) => React.ReactNode; -/** Properties for the [[Tree]] component */ +/** Properties for the Tree component */ export interface TreeProps { /** Nodes provider */ dataProvider: TreeDataProvider; @@ -185,7 +185,7 @@ export interface TreeProps { rowHeight?: ((node?: TreeNodeItem, index?: number) => number) | number; } -/** State for the [[Tree]] component */ +/** State for the Tree component */ export interface TreeState { prev: { dataProvider: TreeDataProvider; diff --git a/ui/core/CHANGELOG.json b/ui/core/CHANGELOG.json index c07caaf..84f3433 100644 --- a/ui/core/CHANGELOG.json +++ b/ui/core/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@bentley/ui-core", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/ui-core_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Added 'uifw-' to ContentLayout CSS class names and others. Fixed Status Bar separators." + }, + { + "comment": "Added 'uifw-' prefix to most ui-framework CSS class names" + }, + { + "comment": "Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS" + }, + { + "comment": "Restructure `Node` component to allow more flexible layout" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/ui-core_v0.189.0", diff --git a/ui/core/CHANGELOG.md b/ui/core/CHANGELOG.md index f82f3a7..49da9e6 100644 --- a/ui/core/CHANGELOG.md +++ b/ui/core/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @bentley/ui-core -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Added 'uifw-' to ContentLayout CSS class names and others. Fixed Status Bar separators. +- Added 'uifw-' prefix to most ui-framework CSS class names +- Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS +- Restructure `Node` component to allow more flexible layout ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/ui/core/package.json b/ui/core/package.json index de378fc..a5badc4 100644 --- a/ui/core/package.json +++ b/ui/core/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/ui-core", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js UI core components", "license": "MIT", "repository": { @@ -54,20 +54,20 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/geometry-core": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", @@ -95,7 +95,7 @@ "mocha": "^5.2.0", "nyc": "^13.0.1", "raf": "^3.4.0", - "react-testing-library": "^5.2.3", + "react-testing-library": "^5.8.0", "rimraf": "^2.6.2", "sinon": "^7.1.1", "sinon-chai": "^3.2.0", diff --git a/ui/core/src/test/icons/WebFontIcon.test.tsx b/ui/core/src/test/icons/WebFontIcon.test.tsx index eecb3cf..bea7415 100644 --- a/ui/core/src/test/icons/WebFontIcon.test.tsx +++ b/ui/core/src/test/icons/WebFontIcon.test.tsx @@ -16,6 +16,6 @@ describe("WebFontIcon", () => { it("renders specified size", () => { const icon = render(); - expect(icon.container.getElementsByClassName("core-icon-medium")).to.not.be.empty; + expect(icon.container.getElementsByClassName("uicore-icons-medium")).to.not.be.empty; }); }); diff --git a/ui/core/src/test/tree/Node.test.snap b/ui/core/src/test/tree/Node.test.snap index f973052..1766471 100644 --- a/ui/core/src/test/tree/Node.test.snap +++ b/ui/core/src/test/tree/Node.test.snap @@ -4,19 +4,19 @@ exports[` renders correctly 1`] = `
-
+ a
@@ -26,14 +26,14 @@ exports[` renders expander correctly 1`] = `
a
@@ -44,20 +44,20 @@ exports[` renders expander correctly 2`] = `
-
+ a
@@ -67,14 +67,14 @@ exports[` renders expander correctly 3`] = `
a
@@ -85,19 +85,19 @@ exports[` renders icon correctly 1`] = `
-
+
@@ -114,19 +114,19 @@ exports[` renders label correctly 1`] = `
-
+ @@ -140,22 +140,22 @@ exports[` renders loader correctly 1`] = `
-
- -
+
+ +
a
@@ -165,19 +165,19 @@ exports[` should set is-focused class 1`] = `
-
+ a
@@ -187,19 +187,19 @@ exports[` should set is-hover-disabled class 1`] = `
-
+ a
@@ -209,19 +209,19 @@ exports[` should set is-selected class 1`] = `
-
+ a
diff --git a/ui/core/src/ui-core.ts b/ui/core/src/ui-core.ts index 6f2e86a..19c554a 100644 --- a/ui/core/src/ui-core.ts +++ b/ui/core/src/ui-core.ts @@ -55,7 +55,7 @@ export * from "./ui-core/toggle/Toggle"; export { default as ExpansionToggle, ExpansionToggleProps } from "./ui-core/tree/ExpansionToggle"; export { default as TreeBranch, TreeBranchProps } from "./ui-core/tree/Branch"; -export { default as TreeNode, NodeProps, NodeCheckboxProps, NodeCheckboxRenderer } from "./ui-core/tree/Node"; +export { default as TreeNode, NodeProps, NodeCheckboxProps, NodeCheckboxRenderer, NodeCheckboxRenderProps } from "./ui-core/tree/Node"; export { default as Tree, TreeProps } from "./ui-core/tree/Tree"; export { default as TreeNodePlaceholder, PlaceholderProps as TreeNodePlaceholderProps } from "./ui-core/tree/Placeholder"; diff --git a/ui/core/src/ui-core/UiCore.ts b/ui/core/src/ui-core/UiCore.ts index 9e3ead4..cfbcd2e 100644 --- a/ui/core/src/ui-core/UiCore.ts +++ b/ui/core/src/ui-core/UiCore.ts @@ -4,10 +4,12 @@ *--------------------------------------------------------------------------------------------*/ /** @module Utilities */ -import "./colorthemes.scss"; - import { I18N } from "@bentley/imodeljs-i18n"; +/** Import color themes and Sass classes barrel file */ +import "./colorthemes.scss"; +import "./classes.scss"; + /** * Entry point for static initialization required by various * components used in the package. diff --git a/ui/core/src/ui-core/_scrollbar.scss b/ui/core/src/ui-core/_scrollbar.scss index fe2e53a..6cc85ba 100644 --- a/ui/core/src/ui-core/_scrollbar.scss +++ b/ui/core/src/ui-core/_scrollbar.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "./colors"; +// @import "./colors"; $uicore-scrollbar-width: 12px; $uicore-scrollbar-padding: 2px; diff --git a/ui/core/src/ui-core/button/Button.tsx b/ui/core/src/ui-core/button/Button.tsx index 76ce191..fc40c74 100644 --- a/ui/core/src/ui-core/button/Button.tsx +++ b/ui/core/src/ui-core/button/Button.tsx @@ -7,8 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; -import "./index.scss"; - /** Sizes for [[Button]] component */ export enum ButtonSize { Default = "", diff --git a/ui/core/src/ui-core/button/UnderlinedButton.scss b/ui/core/src/ui-core/button/UnderlinedButton.scss index 34a15fa..4d01cb3 100644 --- a/ui/core/src/ui-core/button/UnderlinedButton.scss +++ b/ui/core/src/ui-core/button/UnderlinedButton.scss @@ -2,9 +2,10 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +@import "../style/index.scss"; -$color: #0000ee; -$hoverColor: #4d8bff; +$color: $buic-foreground-primary; // #0000ee; +$hoverColor: $buic-foreground-primary-tone; // #4d8bff; .core-underlined-button { background: transparent; diff --git a/ui/core/src/ui-core/button/UnderlinedButton.tsx b/ui/core/src/ui-core/button/UnderlinedButton.tsx index 8e5abbe..cfbdb54 100644 --- a/ui/core/src/ui-core/button/UnderlinedButton.tsx +++ b/ui/core/src/ui-core/button/UnderlinedButton.tsx @@ -2,6 +2,8 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +/** @module Button */ + import * as React from "react"; import classnames from "classnames"; diff --git a/ui/core/src/ui-core/button/blue-large.scss b/ui/core/src/ui-core/button/blue-large.scss index 5b3b2f1..4cbf8d8 100644 --- a/ui/core/src/ui-core/button/blue-large.scss +++ b/ui/core/src/ui-core/button/blue-large.scss @@ -10,5 +10,3 @@ @include uicore-buttons-blue; @include uicore-buttons-large-size; } - -.uicore-buttons-blue-large { @include uicore-buttons-blue-large; } diff --git a/ui/core/src/ui-core/button/blue.scss b/ui/core/src/ui-core/button/blue.scss index beb6069..bb9268a 100644 --- a/ui/core/src/ui-core/button/blue.scss +++ b/ui/core/src/ui-core/button/blue.scss @@ -25,5 +25,3 @@ color: $uicore-white; } } - -.uicore-buttons-blue { @include uicore-buttons-blue; } diff --git a/ui/core/src/ui-core/button/classes.scss b/ui/core/src/ui-core/button/classes.scss new file mode 100644 index 0000000..d9abd9d --- /dev/null +++ b/ui/core/src/ui-core/button/classes.scss @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./index"; + +.uicore-buttons-blue { @include uicore-buttons-blue; } +.uicore-buttons-blue-large { @include uicore-buttons-blue-large; } +.uicore-buttons-disabled { @include uicore-buttons-disabled; } +.uicore-buttons-disabled-large { @include uicore-buttons-disabled-large; } +.uicore-buttons-hollow { @include uicore-buttons-hollow; } +.uicore-buttons-hollow-large { @include uicore-buttons-hollow-large; } +.uicore-buttons-primary { @include uicore-buttons-primary; } +.uicore-buttons-primary-large { @include uicore-buttons-primary-large; } diff --git a/ui/core/src/ui-core/button/disabled-large.scss b/ui/core/src/ui-core/button/disabled-large.scss index 3709747..65e88fe 100644 --- a/ui/core/src/ui-core/button/disabled-large.scss +++ b/ui/core/src/ui-core/button/disabled-large.scss @@ -10,5 +10,3 @@ @include uicore-buttons-disabled; @include uicore-buttons-large-size; } - -.uicore-buttons-disabled-large { @include uicore-buttons-disabled-large; } diff --git a/ui/core/src/ui-core/button/disabled.scss b/ui/core/src/ui-core/button/disabled.scss index bb92393..447c54d 100644 --- a/ui/core/src/ui-core/button/disabled.scss +++ b/ui/core/src/ui-core/button/disabled.scss @@ -3,7 +3,6 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ @import "../style/index"; - @import "./button"; @@ -16,5 +15,3 @@ @include uicore-buttons-button-disabled; } } - -.uicore-buttons-disabled { @include uicore-buttons-disabled; } diff --git a/ui/core/src/ui-core/button/hollow-large.scss b/ui/core/src/ui-core/button/hollow-large.scss index 0f5398c..de2057c 100644 --- a/ui/core/src/ui-core/button/hollow-large.scss +++ b/ui/core/src/ui-core/button/hollow-large.scss @@ -23,5 +23,3 @@ @include uicore-buttons-large-size; } } - -.uicore-buttons-hollow-large { @include uicore-buttons-hollow-large; } diff --git a/ui/core/src/ui-core/button/hollow.scss b/ui/core/src/ui-core/button/hollow.scss index c85050c..ef79813 100644 --- a/ui/core/src/ui-core/button/hollow.scss +++ b/ui/core/src/ui-core/button/hollow.scss @@ -8,7 +8,6 @@ @import "./button"; @import "./disabled"; - @mixin uicore-buttons-hollow { @include uicore-buttons-button; @@ -36,5 +35,3 @@ padding: $uicore-inputs-padding $uicore-unbordered-padding; } } - -.uicore-buttons-hollow { @include uicore-buttons-hollow; } diff --git a/ui/core/src/ui-core/button/index.scss b/ui/core/src/ui-core/button/index.scss index 5de7fcd..a0ed52b 100644 --- a/ui/core/src/ui-core/button/index.scss +++ b/ui/core/src/ui-core/button/index.scss @@ -2,9 +2,10 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +@import "./button"; + @import "./blue"; @import "./blue-large"; -@import "./button"; @import "./disabled"; @import "./disabled-large"; @import "./hollow"; diff --git a/ui/core/src/ui-core/button/primary-large.scss b/ui/core/src/ui-core/button/primary-large.scss index 172b3e6..e225ddf 100644 --- a/ui/core/src/ui-core/button/primary-large.scss +++ b/ui/core/src/ui-core/button/primary-large.scss @@ -10,5 +10,3 @@ @include uicore-buttons-primary; @include uicore-buttons-large-size; } - -.uicore-buttons-primary-large { @include uicore-buttons-primary-large; } diff --git a/ui/core/src/ui-core/button/primary.scss b/ui/core/src/ui-core/button/primary.scss index 3064344..ba3e93c 100644 --- a/ui/core/src/ui-core/button/primary.scss +++ b/ui/core/src/ui-core/button/primary.scss @@ -25,5 +25,3 @@ color: $uicore-white; } } - -.uicore-buttons-primary { @include uicore-buttons-primary; } diff --git a/ui/core/src/ui-core/classes.scss b/ui/core/src/ui-core/classes.scss new file mode 100644 index 0000000..1b9619a --- /dev/null +++ b/ui/core/src/ui-core/classes.scss @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./style/index"; + +@import "./inputs/classes"; +@import "./text/classes"; +@import "./button/classes"; +@import "./expandable/classes"; +@import "./icons/classes"; +@import "./tabs/classes"; diff --git a/ui/core/src/ui-core/colors.scss b/ui/core/src/ui-core/colors.scss deleted file mode 100644 index 09a2993..0000000 --- a/ui/core/src/ui-core/colors.scss +++ /dev/null @@ -1,25 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -@import "./style/themecolors"; - -$background-1: var(--buic-background-1); // #f9f9f9; -$background-2: var(--buic-background-2); // #eef0f3; -$background-3: var(--buic-background-3); // #dce0e3; -$background-4: var(--buic-background-4); // #85929d; -$background-5: var(--buic-background-5); // #4d575f; - -$primary-base: $buic-foreground-primary; // #008be1; -$primary-tone: $buic-foreground-primary-tone; // #0072b8; -$primary-tint: $buic-foreground-primary-tint; // #a6d7f5; -$primary-hover: $buic-row-hover; // #c9e9fc; - -$accent-base: $buic-foreground-success; // #56aa1c; -$accent-tint: $buic-foreground-success-tint; // #c4e1b0; - -$alert-base: $buic-foreground-alert; // #d30a0a; -$alert-tint: $buic-foreground-alert-tint; // #f0a9a9; - -$text-dark: $buic-foreground-body; // #000000; -$text-light: $buic-foreground-body-reverse; // #ffffff; diff --git a/ui/core/src/ui-core/colorthemes.css b/ui/core/src/ui-core/colorthemes.css deleted file mode 100644 index 3f63ff8..0000000 --- a/ui/core/src/ui-core/colorthemes.css +++ /dev/null @@ -1,97 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -@import "./colorvariables.css"; - -/** @note: This file should only be imported by UiCore.ts. - * It should NOT be imported by any *.scss or other ui-core files. - */ - -html, -html[data-theme="light"] { - --buic-background-1: rgb(255, 255, 255); - --buic-background-2: rgb(248, 249, 251); - --buic-background-3: rgb(238, 240, 243); - --buic-background-4: rgb(220, 224, 227); - --buic-background-5: rgb(199, 204, 209); - - --buic-background-tooltip: rgba(199, 204, 209, 0.95); - --buic-background-scrollbar: rgb(155, 165, 174); - --buic-background-toolbutton-stroke: rgb(155, 165, 174); - - --buic-foreground-body: rgba(000, 000, 000, 0.88); - --buic-foreground-body-reverse: rgba(255, 255, 255, 0.88); - --buic-foreground-muted: rgba(000, 000, 000, 0.66); - --buic-foreground-disabled: rgba(000, 000, 000, 0.44); - --buic-foreground-activehover: rgba(000, 000, 000, 1.00); - - --buic-foreground-accessory: rgb(255, 255, 255); - --buic-foreground-primary: rgb(000, 139, 225); - --buic-foreground-success: rgb(086, 169, 028); - --buic-foreground-alert: rgb(211, 010, 010); - --buic-foreground-warning: rgb(241, 139, 018); - --buic-foreground-primary-tint: rgb(165, 215, 245); - --buic-foreground-success-tint: rgb(195, 225, 175); - --buic-foreground-alert-tint: rgb(239, 169, 169); - --buic-foreground-warning-tint: rgb(249, 215, 171); - --buic-foreground-primary-tone: rgb(000, 128, 206); - - --buic-row-selection: rgb(102, 196, 255); - --buic-row-hover: rgb(200, 232, 252); - - --buic-inputs-border: rgb(199, 204, 209); - --buic-inputs-focus-boxshadow-gradient1: rgba(000, 000, 000, 0); - --buic-inputs-focus-boxshadow-gradient2: rgba(000, 139, 225, 0.1); - - --buic-button-gradient1: rgba(000, 000, 000, 0); - --buic-button-gradient2: rgba(000, 000, 000, 0.22); -} - -html[data-theme="dark"] { - --buic-background-1: rgb(090, 105, 115); - --buic-background-2: rgb(079, 093, 101); - --buic-background-3: rgb(068, 080, 088); - --buic-background-4: rgb(056, 068, 074); - --buic-background-5: rgb(045, 055, 060); - - --buic-background-tooltip: rgb(045, 055, 060, 0.95); - --buic-background-scrollbar: rgb(155, 165, 174); - --buic-background-toolbutton-stroke: rgb(045, 055, 060); - - --buic-foreground-body: rgba(255, 255, 255, 0.88); - --buic-foreground-body-reverse: rgba(000, 000, 000, 0.88); - --buic-foreground-muted: rgba(255, 255, 255, 0.66); - --buic-foreground-disabled: rgba(255, 255, 255, 0.44); - --buic-foreground-activehover: rgba(255, 255, 255, 1.00); - - --buic-foreground-accessory: rgba(255, 255, 255, 0.85); - --buic-foreground-primary: rgb(118, 197, 247); - --buic-foreground-success: rgb(153, 224, 105); - --buic-foreground-alert: rgb(236, 111, 111); - --buic-foreground-warning: rgb(235, 177, 101); - --buic-foreground-primary-tint: rgb(165, 215, 245); - --buic-foreground-success-tint: rgb(195, 225, 175); - --buic-foreground-alert-tint: rgb(239, 169, 169); - --buic-foreground-warning-tint: rgb(249, 215, 171); - --buic-foreground-primary-tone: rgb(69, 165, 224); - - --buic-row-selection: rgb(000, 128, 206); - --buic-row-hover: rgb(071, 150, 199); - - --buic-inputs-border: rgb(199, 204, 209); - --buic-inputs-focus-boxshadow-gradient1: rgba(000, 000, 000, 0); - --buic-inputs-focus-boxshadow-gradient2: rgba(000, 139, 225, 0.1); - - --buic-button-gradient1: rgba(000, 000, 000, 0); - --buic-button-gradient2: rgba(000, 000, 000, 0.22); -} - - -html.theme-transition, -html.theme-transition *, -html.theme-transition *:before, -html.theme-transition *:after { - transition: all 300ms !important; - transition-delay: 0 !important; -} diff --git a/ui/core/src/ui-core/colorthemes.scss b/ui/core/src/ui-core/colorthemes.scss index e8e89e4..8856d0f 100644 --- a/ui/core/src/ui-core/colorthemes.scss +++ b/ui/core/src/ui-core/colorthemes.scss @@ -20,9 +20,9 @@ html[data-theme="light"] { --buic-background-scrollbar: rgb(155, 165, 174); --buic-background-toolbutton-stroke: rgb(155, 165, 174); - --buic-foreground-body: rgba(000, 000, 000, 0.88); - --buic-foreground-body-reverse: rgba(255, 255, 255, 0.88); - --buic-foreground-muted: rgba(000, 000, 000, 0.66); + --buic-foreground-body: rgba(000, 000, 000, 0.85); + --buic-foreground-body-reverse: rgba(255, 255, 255, 0.85); + --buic-foreground-muted: rgba(000, 000, 000, 0.55); --buic-foreground-disabled: rgba(000, 000, 000, 0.44); --buic-foreground-activehover: rgba(000, 000, 000, 1.00); @@ -43,6 +43,7 @@ html[data-theme="light"] { --buic-inputs-border: rgb(199, 204, 209); --buic-inputs-focus-boxshadow-gradient1: rgba(000, 000, 000, 0); --buic-inputs-focus-boxshadow-gradient2: rgba(000, 139, 225, 0.1); + --buic-inputs-boxshadow: rgba(000, 000, 000, 0.075 ); --buic-button-gradient1: rgba(000, 000, 000, 0); --buic-button-gradient2: rgba(000, 000, 000, 0.22); @@ -59,8 +60,8 @@ html[data-theme="dark"] { --buic-background-scrollbar: rgb(155, 165, 174); --buic-background-toolbutton-stroke: rgb(045, 055, 060); - --buic-foreground-body: rgba(255, 255, 255, 0.88); - --buic-foreground-body-reverse: rgba(000, 000, 000, 0.88); + --buic-foreground-body: rgba(255, 255, 255, 0.85); + --buic-foreground-body-reverse: rgba(000, 000, 000, 0.85); --buic-foreground-muted: rgba(255, 255, 255, 0.66); --buic-foreground-disabled: rgba(255, 255, 255, 0.44); --buic-foreground-activehover: rgba(255, 255, 255, 1.00); @@ -80,8 +81,9 @@ html[data-theme="dark"] { --buic-row-hover: rgb(071, 150, 199); --buic-inputs-border: rgb(199, 204, 209); - --buic-inputs-focus-boxshadow-gradient1: rgba(000, 000, 000, 0); + --buic-inputs-focus-boxshadow-gradient1: rgba(199, 204, 209, 0); --buic-inputs-focus-boxshadow-gradient2: rgba(000, 139, 225, 0.1); + --buic-inputs-boxshadow: rgba(199, 204, 209, 0.075 ); --buic-button-gradient1: rgba(000, 000, 000, 0); --buic-button-gradient2: rgba(000, 000, 000, 0.22); diff --git a/ui/core/src/ui-core/colorvariables.css b/ui/core/src/ui-core/colorvariables.css deleted file mode 100644 index 464a54a..0000000 --- a/ui/core/src/ui-core/colorvariables.css +++ /dev/null @@ -1,50 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ - -:root { - - --buic-accessory-hollow: rgb(255, 255, 255); - --buic-accessory-primary: rgb(000, 139, 225); - --buic-accessory-success: rgb(086, 169, 028); - --buic-accessory-alert: rgb(211, 010, 010); - --buic-accessory-warning: rgb(241, 139, 018); - --buic-accessory-primary-tint: rgb(165, 215, 245); - --buic-accessory-success-tint: rgb(195, 225, 175); - --buic-accessory-alert-tint: rgb(239, 169, 169); - --buic-accessory-warning-tint: rgb(249, 215, 171); - - --buic-foreground-mediumgray: rgb(155, 165, 174); - - /** background.5 */ - --buic-background-titlebar: var(--buic-background-5); - --buic-background-dialog-stroke: var(--buic-background-5); - --buic-background-widget-stroke: var(--buic-background-5); - --buic-background-control-stroke: var(--buic-background-5); - --buic-background-panel-stroke: var(--buic-background-5); - - /** background.4 */ - --buic-background-titlebar-outoffocus: var(--buic-background-4); - --buic-background-divider: var(--buic-background-4); - --buic-background-widget-element-stroke: var(--buic-background-4); - --buic-background-control-disabled: var(--buic-background-4); - --buic-background-statusbar: var(--buic-background-4); - - /** background.3 */ - --buic-background-tab-inactive: var(--buic-background-3); - --buic-background-toolbutton-inactive: var(--buic-background-3); - --buic-background-context-menu: var(--buic-background-3); - --buic-background-panel: var(--buic-background-3); - - /** background.2 */ - --buic-background-tab-active: var(--buic-background-2); - --buic-background-dialog: var(--buic-background-2); - --buic-background-widget: var(--buic-background-2); - --buic-background-window: var(--buic-background-2); - - /** background.1 */ - --buic-background-card: var(--buic-background-1); - --buic-background-control: var(--buic-background-1); - -} diff --git a/ui/core/src/ui-core/colorvariables.scss b/ui/core/src/ui-core/colorvariables.scss index 464a54a..8b861a4 100644 --- a/ui/core/src/ui-core/colorvariables.scss +++ b/ui/core/src/ui-core/colorvariables.scss @@ -30,6 +30,7 @@ --buic-background-widget-element-stroke: var(--buic-background-4); --buic-background-control-disabled: var(--buic-background-4); --buic-background-statusbar: var(--buic-background-4); + --buic-background-table-header: var(--buic-background-4); /** background.3 */ --buic-background-tab-inactive: var(--buic-background-3); diff --git a/ui/core/src/ui-core/contextmenu/ContextMenu.tsx b/ui/core/src/ui-core/contextmenu/ContextMenu.tsx index 1d94952..02ffa1c 100644 --- a/ui/core/src/ui-core/contextmenu/ContextMenu.tsx +++ b/ui/core/src/ui-core/contextmenu/ContextMenu.tsx @@ -421,6 +421,7 @@ export interface ContextMenuItemProps extends React.AllHTMLAttributes { if (typeof node === "string") { diff --git a/ui/core/src/ui-core/expandable/ExpandableBlock.scss b/ui/core/src/ui-core/expandable/ExpandableBlock.scss index f6a4cbb..e514072 100644 --- a/ui/core/src/ui-core/expandable/ExpandableBlock.scss +++ b/ui/core/src/ui-core/expandable/ExpandableBlock.scss @@ -133,4 +133,4 @@ z-index: 1; } } -} \ No newline at end of file +} diff --git a/ui/core/src/ui-core/icons/Icon.scss b/ui/core/src/ui-core/expandable/classes.scss similarity index 64% rename from ui/core/src/ui-core/icons/Icon.scss rename to ui/core/src/ui-core/expandable/classes.scss index 0c65dbe..de260bb 100644 --- a/ui/core/src/ui-core/icons/Icon.scss +++ b/ui/core/src/ui-core/expandable/classes.scss @@ -1,10 +1,7 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -@import "./index"; - -.core-icon-large { @include uicore-icons-large; } -.core-icon-medium { @include uicore-icons-medium; } -.core-icon-small { @include uicore-icons-small; } -.core-icon-x-large { @include uicore-icons-x-large; } +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./index"; + +.uicore-expandable-blocks-list { @include uicore-expandable-blocks-list; } diff --git a/ui/core/src/ui-core/expandable/list.scss b/ui/core/src/ui-core/expandable/list.scss index 722759a..6bcf5c7 100644 --- a/ui/core/src/ui-core/expandable/list.scss +++ b/ui/core/src/ui-core/expandable/list.scss @@ -42,5 +42,3 @@ margin-top: $uicore-unbordered-padding; } } - -.uicore-expandable-blocks-list { @include uicore-expandable-blocks-list; } diff --git a/ui/core/src/ui-core/icons/WebFontIcon.scss b/ui/core/src/ui-core/icons/WebFontIcon.scss index b60b891..1f9c017 100644 --- a/ui/core/src/ui-core/icons/WebFontIcon.scss +++ b/ui/core/src/ui-core/icons/WebFontIcon.scss @@ -4,11 +4,6 @@ *--------------------------------------------------------------------------------------------*/ @import "./index"; -.core-icon-large { @include uicore-icons-large; } -.core-icon-medium { @include uicore-icons-medium; } -.core-icon-small { @include uicore-icons-small; } -.core-icon-x-large { @include uicore-icons-x-large; } - .bui-webfont-icon { font-family: bentley-icons-generic-webfont !important; speak: none; @@ -20,5 +15,3 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } - - diff --git a/ui/core/src/ui-core/icons/WebFontIcon.tsx b/ui/core/src/ui-core/icons/WebFontIcon.tsx index 9a2d935..ec9e8af 100644 --- a/ui/core/src/ui-core/icons/WebFontIcon.tsx +++ b/ui/core/src/ui-core/icons/WebFontIcon.tsx @@ -6,6 +6,7 @@ import * as React from "react"; import * as classnames from "classnames"; + import "./WebFontIcon.scss"; import "@bentley/icons-generic-webfont/dist/bentley-icons-generic-webfont.css"; @@ -31,7 +32,7 @@ export const WebFontIcon: React.FunctionComponent = (props) => const className = classnames( "bui-webfont-icon", props.iconName, - props.iconSize ? `core-icon-${props.iconSize}` : undefined, + props.iconSize ? `uicore-icons-${props.iconSize}` : undefined, props.className, ); diff --git a/ui/core/src/ui-core/icons/classes.scss b/ui/core/src/ui-core/icons/classes.scss new file mode 100644 index 0000000..b610ff2 --- /dev/null +++ b/ui/core/src/ui-core/icons/classes.scss @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./index"; + +.uicore-icons-large { @include uicore-icons-large; } +.uicore-icons-medium { @include uicore-icons-medium; } +.uicore-icons-small { @include uicore-icons-small; } +.uicore-icons-x-large { @include uicore-icons-x-large; } diff --git a/ui/core/src/ui-core/imagecheckbox/ImageCheckBox.scss b/ui/core/src/ui-core/imagecheckbox/ImageCheckBox.scss index 7bc2c22..2d5ddd3 100644 --- a/ui/core/src/ui-core/imagecheckbox/ImageCheckBox.scss +++ b/ui/core/src/ui-core/imagecheckbox/ImageCheckBox.scss @@ -11,7 +11,7 @@ position: relative; height: 1em; cursor: pointer; - + input[type="checkbox"]:not(:checked), input[type="checkbox"]:checked { position: absolute; diff --git a/ui/core/src/ui-core/index.scss b/ui/core/src/ui-core/index.scss index 533cc5d..76f7ad9 100644 --- a/ui/core/src/ui-core/index.scss +++ b/ui/core/src/ui-core/index.scss @@ -4,14 +4,12 @@ *--------------------------------------------------------------------------------------------*/ @import "./style/index"; +@import "./_scrollbar"; +@import "./_z-index"; + +@import "./inputs/index"; @import "./button/index"; @import "./expandable/index"; @import "./icons/index"; -@import "./inputs/index"; -@import "./table/index"; @import "./tabs/index"; @import "./text/index"; - -@import "./colors"; -@import "./_scrollbar"; -@import "./_z-index"; diff --git a/ui/core/src/ui-core/inputs/Input.tsx b/ui/core/src/ui-core/inputs/Input.tsx index e05acd2..9d4fe21 100644 --- a/ui/core/src/ui-core/inputs/Input.tsx +++ b/ui/core/src/ui-core/inputs/Input.tsx @@ -6,7 +6,6 @@ import * as React from "react"; import * as classnames from "classnames"; -import "./index.scss"; /** Properties for the [[Input]] component */ export interface InputProps extends React.InputHTMLAttributes { } diff --git a/ui/core/src/ui-core/inputs/LabeledInput.tsx b/ui/core/src/ui-core/inputs/LabeledInput.tsx index 44585a2..8dcb5e9 100644 --- a/ui/core/src/ui-core/inputs/LabeledInput.tsx +++ b/ui/core/src/ui-core/inputs/LabeledInput.tsx @@ -9,7 +9,6 @@ import * as classnames from "classnames"; import Input, { InputProps } from "./Input"; import InputStatus from "./InputStatus"; -import "./index.scss"; /** Properties for [[LabeledInput]] components */ export interface LabeledInputProps extends InputProps { diff --git a/ui/core/src/ui-core/inputs/LabeledSelect.tsx b/ui/core/src/ui-core/inputs/LabeledSelect.tsx index a91bbe0..9d05411 100644 --- a/ui/core/src/ui-core/inputs/LabeledSelect.tsx +++ b/ui/core/src/ui-core/inputs/LabeledSelect.tsx @@ -9,7 +9,6 @@ import * as classnames from "classnames"; import Select, { SelectProps } from "./Select"; import InputStatus from "./InputStatus"; -import "./index.scss"; /** Properties for [[LabeledSelect]] components */ export interface LabeledSelectProps extends SelectProps { diff --git a/ui/core/src/ui-core/inputs/LabeledTextarea.tsx b/ui/core/src/ui-core/inputs/LabeledTextarea.tsx index fb5305b..16039cd 100644 --- a/ui/core/src/ui-core/inputs/LabeledTextarea.tsx +++ b/ui/core/src/ui-core/inputs/LabeledTextarea.tsx @@ -9,7 +9,6 @@ import * as classnames from "classnames"; import Textarea, { TextareaProps } from "./Textarea"; import InputStatus from "./InputStatus"; -import "./index.scss"; /** Properties for [[LabeledTextarea]] component */ export interface LabeledTextareaProps extends TextareaProps { diff --git a/ui/core/src/ui-core/inputs/Radio.tsx b/ui/core/src/ui-core/inputs/Radio.tsx index 0e62026..0917dfe 100644 --- a/ui/core/src/ui-core/inputs/Radio.tsx +++ b/ui/core/src/ui-core/inputs/Radio.tsx @@ -7,26 +7,27 @@ import * as React from "react"; import * as classnames from "classnames"; import { InputStatus } from "./InputStatus"; -import "./index.scss"; /** Properties for [[Radio]] component */ export interface RadioProps extends React.InputHTMLAttributes { - label: string; + label?: string; status?: InputStatus; } /** Basic radio input component */ export class Radio extends React.Component { public render(): JSX.Element { + const { label, disabled, status, className } = this.props; + return ( ); } diff --git a/ui/core/src/ui-core/inputs/Select.tsx b/ui/core/src/ui-core/inputs/Select.tsx index 67920e8..3cdd32d 100644 --- a/ui/core/src/ui-core/inputs/Select.tsx +++ b/ui/core/src/ui-core/inputs/Select.tsx @@ -6,7 +6,6 @@ import * as React from "react"; import * as classnames from "classnames"; -import "./index.scss"; /** Properties for [[Select]] component */ export interface SelectProps extends React.SelectHTMLAttributes { diff --git a/ui/core/src/ui-core/inputs/Textarea.tsx b/ui/core/src/ui-core/inputs/Textarea.tsx index 64fed32..a781514 100644 --- a/ui/core/src/ui-core/inputs/Textarea.tsx +++ b/ui/core/src/ui-core/inputs/Textarea.tsx @@ -6,7 +6,6 @@ import * as React from "react"; import * as classnames from "classnames"; -import "./index.scss"; /** Properties for [[Textarea]] component */ export interface TextareaProps extends React.TextareaHTMLAttributes { diff --git a/ui/core/src/ui-core/inputs/checkbox/Checkbox.tsx b/ui/core/src/ui-core/inputs/checkbox/Checkbox.tsx index 3877cc6..69d1fb7 100644 --- a/ui/core/src/ui-core/inputs/checkbox/Checkbox.tsx +++ b/ui/core/src/ui-core/inputs/checkbox/Checkbox.tsx @@ -9,8 +9,6 @@ import * as classnames from "classnames"; import { InputStatus } from "../InputStatus"; import { Omit } from "../../utils/typeUtils"; -import "./checkbox.scss"; - /** Properties for [[Checkbox]] React component */ export interface CheckboxProps extends Omit, "type"> { /** Text that will be shown next to the checkbox. */ diff --git a/ui/core/src/ui-core/inputs/checkbox/checkbox.scss b/ui/core/src/ui-core/inputs/checkbox/checkbox.scss index 0672680..73ac387 100644 --- a/ui/core/src/ui-core/inputs/checkbox/checkbox.scss +++ b/ui/core/src/ui-core/inputs/checkbox/checkbox.scss @@ -64,5 +64,3 @@ color: $buic-foreground-disabled; /*$uicore-gray-9;*/ } } - -.core-checkbox { @include uicore-inputs-checkbox; } diff --git a/ui/core/src/ui-core/inputs/classes.scss b/ui/core/src/ui-core/inputs/classes.scss new file mode 100644 index 0000000..04fed23 --- /dev/null +++ b/ui/core/src/ui-core/inputs/classes.scss @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./index"; + +.uicore-inputs-checkbox { @include uicore-inputs-checkbox; } +.core-checkbox { @include uicore-inputs-checkbox; } + +.uicore-inputs-input { @include uicore-inputs-input; } +.uicore-inputs-labeled-input { @include uicore-inputs-labeled-input; } +.uicore-inputs-labeled-select { @include uicore-inputs-labeled-select; } +.uicore-inputs-labeled-textarea { @include uicore-inputs-labeled-textarea; } +.uicore-inputs-radio { @include uicore-inputs-radio; } +.uicore-inputs-select { @include uicore-inputs-select; } +.uicore-inputs-textarea { @include uicore-inputs-textarea; } diff --git a/ui/core/src/ui-core/inputs/index.scss b/ui/core/src/ui-core/inputs/index.scss index df1d6b2..4ef8bf8 100644 --- a/ui/core/src/ui-core/inputs/index.scss +++ b/ui/core/src/ui-core/inputs/index.scss @@ -2,6 +2,9 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +@import "../style/index"; + +@import "./variables"; @import "./checkbox/checkbox"; @import "./input"; @import "./labeled-input"; @@ -10,4 +13,3 @@ @import "./radio"; @import "./select"; @import "./textarea"; -@import "./variables"; diff --git a/ui/core/src/ui-core/inputs/input.scss b/ui/core/src/ui-core/inputs/input.scss index ec16633..2a1828a 100644 --- a/ui/core/src/ui-core/inputs/input.scss +++ b/ui/core/src/ui-core/inputs/input.scss @@ -19,12 +19,12 @@ background-image: none; border: 1px solid $buic-inputs-border; // $uicore-inputs-border-color; border-radius: $uicore-border-radius; - box-shadow: rgba( $uicore-black, 0.075 ) 0px 1px 1px inset; + box-shadow: $buic-inputs-boxshadow 0px 1px 1px inset; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - &:-ms-input-placeholder { color: $uicore-gray-9; } - &::-webkit-input-placeholder { color: $uicore-gray-9; } - &::placeholder { color: $buic-foreground-muted; /* $uicore-gray-9;*/ } + &:-ms-input-placeholder { color: $buic-foreground-disabled; /* $uicore-gray-9;*/ } + &::-webkit-input-placeholder { color: $buic-foreground-disabled; /* $uicore-gray-9;*/ } + &::placeholder { color: $buic-foreground-disabled; /* $uicore-gray-9;*/ } &[disabled], &[readonly] { @@ -38,9 +38,6 @@ border-color: $buic-inputs-border; // $uicore-inputs-border-color; outline: 0px; - // box-shadow: rgba( $uicore-black, 0 ) 0px 1px 1px inset, rgba( $uicore-blue, 0.1 ) 0px 0px 0px 2px; box-shadow: $buic-inputs-focus-boxshadow-gradient1 0px 1px 1px inset, $buic-inputs-focus-boxshadow-gradient2 0px 0px 0px 2px; } } - -.uicore-inputs-input { @include uicore-inputs-input; } diff --git a/ui/core/src/ui-core/inputs/labeled-input.scss b/ui/core/src/ui-core/inputs/labeled-input.scss index 2383613..8a4ffac 100644 --- a/ui/core/src/ui-core/inputs/labeled-input.scss +++ b/ui/core/src/ui-core/inputs/labeled-input.scss @@ -24,7 +24,7 @@ font-weight: $uicore-font-weight-semibold; line-height: $uicore-line-height; text-align: left; - color: $uicore-text-color; + color: $buic-text-color; } > .input { @@ -63,7 +63,7 @@ display: block; font-size: $uicore-font-size-small; line-height: $uicore-line-height; - color: $uicore-gray; + color: $buic-text-color-muted; // $uicore-gray; } @@ -88,16 +88,14 @@ > .uicore-inputs-input { border-color: $color; - box-shadow: rgba( $uicore-black, 0.075 ) 0px 1px 1px inset; + box-shadow: $buic-inputs-boxshadow 0px 1px 1px inset; &:focus { border-color: $color; - box-shadow: rgba( $uicore-black, 0 ) 0px 1px 1px inset, rgba( $color, 0.15 ) 0px 0px 0px 2px; + box-shadow: $buic-inputs-focus-boxshadow-gradient1 0px 1px 1px inset, rgba( $color, 0.15 ) 0px 0px 0px 2px; } } } } } - -.uicore-inputs-labeled-input { @include uicore-inputs-labeled-input; } diff --git a/ui/core/src/ui-core/inputs/labeled-select.scss b/ui/core/src/ui-core/inputs/labeled-select.scss index a19e41e..a0fccde 100644 --- a/ui/core/src/ui-core/inputs/labeled-select.scss +++ b/ui/core/src/ui-core/inputs/labeled-select.scss @@ -25,7 +25,7 @@ font-weight: $uicore-font-weight-semibold; line-height: $uicore-line-height; text-align: left; - color: $uicore-text-color; + color: $buic-text-color; } > .message { @@ -33,7 +33,7 @@ display: block; font-size: $uicore-font-size-small; line-height: $uicore-line-height; - color: $uicore-gray; + color: $buic-text-color-muted; // $uicore-gray; } @@ -58,16 +58,14 @@ > .uicore-inputs-select { border-color: $color; - box-shadow: rgba( $uicore-black, 0.075 ) 0px 1px 1px inset; + box-shadow: $buic-inputs-boxshadow 0px 1px 1px inset; &:focus { border-color: $color; - box-shadow: rgba( $uicore-black, 0 ) 0px 1px 1px inset, rgba( $color, 0.15 ) 0px 0px 0px 2px; + box-shadow: $buic-inputs-focus-boxshadow-gradient1 0px 1px 1px inset, rgba( $color, 0.15 ) 0px 0px 0px 2px; } } } } } - -.uicore-inputs-labeled-select { @include uicore-inputs-labeled-select; } diff --git a/ui/core/src/ui-core/inputs/labeled-textarea.scss b/ui/core/src/ui-core/inputs/labeled-textarea.scss index 5622966..e0e1c16 100644 --- a/ui/core/src/ui-core/inputs/labeled-textarea.scss +++ b/ui/core/src/ui-core/inputs/labeled-textarea.scss @@ -24,7 +24,7 @@ font-weight: $uicore-font-weight-semibold; line-height: $uicore-line-height; text-align: left; - color: $uicore-text-color; + color: $buic-text-color; } > .uicore-inputs-textarea { @@ -38,7 +38,7 @@ display: block; font-size: $uicore-font-size-small; line-height: $uicore-line-height; - color: $uicore-gray; + color: $buic-text-color-muted; // $uicore-gray; } @@ -63,16 +63,14 @@ > .uicore-inputs-textarea { border-color: $color; - box-shadow: rgba( $uicore-black, 0.075 ) 0px 1px 1px inset; + box-shadow: $buic-inputs-border 0px 1px 1px inset; &:focus { border-color: $color; - box-shadow: rgba( $uicore-black, 0 ) 0px 1px 1px inset, rgba( $color, 0.15 ) 0px 0px 0px 2px; + box-shadow: $buic-inputs-focus-boxshadow-gradient1 0px 1px 1px inset, rgba( $color, 0.15 ) 0px 0px 0px 2px; } } } } } - -.uicore-inputs-labeled-textarea { @include uicore-inputs-labeled-textarea; } diff --git a/ui/core/src/ui-core/inputs/radio.scss b/ui/core/src/ui-core/inputs/radio.scss index 150c2e1..2ba0401 100644 --- a/ui/core/src/ui-core/inputs/radio.scss +++ b/ui/core/src/ui-core/inputs/radio.scss @@ -43,7 +43,7 @@ text-align: left; vertical-align: initial; white-space: normal; - color: $uicore-text-color; + color: $buic-text-color; } &.disabled { @@ -54,7 +54,5 @@ &.success > .label { color: $uicore-green; } &.warning > .label { color: $uicore-orange; } &.error > .label { color: $uicore-red; } - &.disabled > .label { color: $uicore-gray-9; } + &.disabled > .label { color: $buic-text-color-disabled; } } - -.uicore-inputs-radio { @include uicore-inputs-radio; } diff --git a/ui/core/src/ui-core/inputs/select.scss b/ui/core/src/ui-core/inputs/select.scss index ec1deb7..c95ff3b 100644 --- a/ui/core/src/ui-core/inputs/select.scss +++ b/ui/core/src/ui-core/inputs/select.scss @@ -18,7 +18,7 @@ background-image: none; border: 1px solid $buic-inputs-border; border-radius: $uicore-border-radius; - box-shadow: rgba( $uicore-black, 0.075 ) 0px 1px 1px inset; + box-shadow: $buic-inputs-boxshadow 0px 1px 1px inset; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; &:invalid { @@ -48,9 +48,6 @@ border-color: $buic-inputs-border; outline: 0px; - // box-shadow: rgba( $uicore-black, 0 ) 0px 1px 1px inset, rgba( $uicore-blue, 0.1 ) 0px 0px 0px 2px; box-shadow: $buic-inputs-focus-boxshadow-gradient1 0px 1px 1px inset, $buic-inputs-focus-boxshadow-gradient2 0px 0px 0px 2px; } } - -.uicore-inputs-select { @include uicore-inputs-select; } diff --git a/ui/core/src/ui-core/inputs/textarea.scss b/ui/core/src/ui-core/inputs/textarea.scss index 58c8985..7e7ad4b 100644 --- a/ui/core/src/ui-core/inputs/textarea.scss +++ b/ui/core/src/ui-core/inputs/textarea.scss @@ -15,32 +15,30 @@ font-size: $uicore-font-size; font-weight: normal; line-height: $uicore-line-height; - color: $uicore-text-color; - background-color: $uicore-white; + color: $buic-text-color; + background-color: $buic-background-control; background-image: none; border: 1px solid $uicore-inputs-border-color; border-radius: $uicore-border-radius; - box-shadow: rgba( $uicore-black, 0.075 ) 0px 1px 1px inset; + box-shadow: $buic-inputs-boxshadow 0px 1px 1px inset; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - &:-ms-input-placeholder { color: $uicore-gray-9; } - &::-webkit-input-placeholder { color: $uicore-gray-9; } - &::placeholder { color: $uicore-gray-9; } + &:-ms-input-placeholder { color: $buic-foreground-disabled; /* $uicore-gray-9;*/ } + &::-webkit-input-placeholder { color: $buic-foreground-disabled; /* $uicore-gray-9;*/ } + &::placeholder { color: $buic-foreground-disabled; /* $uicore-gray-9;*/ } &[disabled], &[readonly] { - background-color: $uicore-gray-b; - color: $uicore-gray-9; - cursor: not-allowed; + background-color: $buic-background-control-disabled; // $uicore-gray-b; + color: $buic-foreground-muted; // $uicore-gray-9; + cursor: not-allowed; } &:focus { - border-color: $uicore-inputs-border-color; - outline: 0px; - box-shadow: rgba( $uicore-black, 0 ) 0px 1px 1px inset, rgba( $uicore-blue, 0.1 ) 0px 0px 0px 2px; + border-color: $buic-inputs-border; + outline: 0px; + box-shadow: $buic-inputs-focus-boxshadow-gradient1 0px 1px 1px inset, $buic-inputs-focus-boxshadow-gradient2 0px 0px 0px 2px; } } - -.uicore-inputs-textarea { @include uicore-inputs-textarea; } diff --git a/ui/core/src/ui-core/inputs/variables.scss b/ui/core/src/ui-core/inputs/variables.scss index 391e92f..88bd4cd 100644 --- a/ui/core/src/ui-core/inputs/variables.scss +++ b/ui/core/src/ui-core/inputs/variables.scss @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ @import "../style/index"; - $uicore-inputs-height: 38px; $uicore-inputs-height-large: 48px; @@ -16,4 +15,4 @@ $uicore-inputs-padding-bordered-large: $uicore-inputs-padding-large - 1px; $uicore-inputs-margin: ( $uicore-line-height * 2 - $uicore-inputs-height ) / 2; $uicore-inputs-margin-large: ( $uicore-line-height * 3 - $uicore-inputs-height-large ) / 2; -$uicore-inputs-border-color: $uicore-gray-9; +$uicore-inputs-border-color: $buic-inputs-border; diff --git a/ui/core/src/ui-core/loading/LoadingPrompt.scss b/ui/core/src/ui-core/loading/LoadingPrompt.scss index 982fb25..f3521d5 100644 --- a/ui/core/src/ui-core/loading/LoadingPrompt.scss +++ b/ui/core/src/ui-core/loading/LoadingPrompt.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "../button/index.scss"; +@import "../button/hollow"; .core-loadingprompt { height: 100%; @@ -27,6 +27,6 @@ /* cancel button */ .loading-prompt-cancel { - @extend .uicore-buttons-hollow; + @include uicore-buttons-hollow; margin-top: 2em; } diff --git a/ui/core/src/ui-core/popup/Popup.tsx b/ui/core/src/ui-core/popup/Popup.tsx index 56c9bb6..7efb3a5 100644 --- a/ui/core/src/ui-core/popup/Popup.tsx +++ b/ui/core/src/ui-core/popup/Popup.tsx @@ -228,7 +228,7 @@ export class Popup extends React.Component { const targetRect = this._targetElement.getBoundingClientRect(); const popupRect = popupElement.getBoundingClientRect(); const containerStyle = window.getComputedStyle(this._targetElement); - const offset = (this.props.showArrow) ? 12 : 4; + const offset = (this.props.showArrow) ? 10 : 2; switch (this.props.position) { case Position.BottomRight: { diff --git a/ui/core/src/ui-core/radialmenu/RadialMenu.scss b/ui/core/src/ui-core/radialmenu/RadialMenu.scss index 6e5bedb..8f5b745 100644 --- a/ui/core/src/ui-core/radialmenu/RadialMenu.scss +++ b/ui/core/src/ui-core/radialmenu/RadialMenu.scss @@ -38,6 +38,7 @@ height: $uicore-icons-small; width: $uicore-icons-small; line-height: $uicore-icons-small; + color: $buic-icon-color; } .radial-menu-button-content { diff --git a/ui/core/src/ui-core/radialmenu/RadialMenu.tsx b/ui/core/src/ui-core/radialmenu/RadialMenu.tsx index 7a2acec..dd10600 100644 --- a/ui/core/src/ui-core/radialmenu/RadialMenu.tsx +++ b/ui/core/src/ui-core/radialmenu/RadialMenu.tsx @@ -212,7 +212,7 @@ export class RadialButton extends React.Component
-
+
{this.props.children}
diff --git a/ui/core/src/ui-core/searchbox/SearchBox.tsx b/ui/core/src/ui-core/searchbox/SearchBox.tsx index 76c7014..c4fd8bf 100644 --- a/ui/core/src/ui-core/searchbox/SearchBox.tsx +++ b/ui/core/src/ui-core/searchbox/SearchBox.tsx @@ -132,6 +132,11 @@ export class SearchBox extends React.Component { public componentWillUnmount() { this._unsetTimeout(); } + + public focus () { + if (this._inputElement) + this._inputElement.focus(); + } } export default SearchBox; diff --git a/ui/core/src/ui-core/style/colors.scss b/ui/core/src/ui-core/style/colors.scss index e88c846..2532730 100644 --- a/ui/core/src/ui-core/style/colors.scss +++ b/ui/core/src/ui-core/style/colors.scss @@ -2,7 +2,6 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "./themecolors"; /// Variables ------------------------------------------------------------------ diff --git a/ui/core/src/ui-core/style/index.scss b/ui/core/src/ui-core/style/index.scss index b3a4ea5..6c7952d 100644 --- a/ui/core/src/ui-core/style/index.scss +++ b/ui/core/src/ui-core/style/index.scss @@ -3,6 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ @import "./baseline"; +@import "./themecolors"; @import "./colors"; @import "./data-viz"; @import "./mixins"; diff --git a/ui/core/src/ui-core/style/mixins.scss b/ui/core/src/ui-core/style/mixins.scss index 4f9f44c..7b0c3ed 100644 --- a/ui/core/src/ui-core/style/mixins.scss +++ b/ui/core/src/ui-core/style/mixins.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "./colors"; +@import "./themecolors"; @mixin no-border { @@ -12,14 +12,14 @@ @mixin no-link { text-decoration: none; - color: $uicore-text-color; + color: $buic-text-color; &:link, &:visited, &:hover, &:active { - color: $uicore-text-color; + color: $buic-text-color; text-decoration: none; } } diff --git a/ui/core/src/ui-core/style/themecolors.scss b/ui/core/src/ui-core/style/themecolors.scss index 60632ae..95dd6bf 100644 --- a/ui/core/src/ui-core/style/themecolors.scss +++ b/ui/core/src/ui-core/style/themecolors.scss @@ -3,6 +3,12 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +$buic-background-1: var(--buic-background-1); +$buic-background-2: var(--buic-background-2); +$buic-background-3: var(--buic-background-3); +$buic-background-4: var(--buic-background-4); +$buic-background-5: var(--buic-background-5); + /* Backgrounds and strokes */ $buic-background-scrollbar: var(--buic-background-scrollbar); @@ -19,6 +25,7 @@ $buic-background-titlebar-outoffocus: var(--buic-background-titlebar-outoffo $buic-background-divider: var(--buic-background-divider); $buic-background-widget-element-stroke: var(--buic-background-widget-element-stroke); $buic-background-control-disabled: var(--buic-background-control-disabled); +$buic-background-table-header: var(--buic-background-table-header); $buic-background-tab-inactive: var(--buic-background-tab-inactive); $buic-background-toolbutton-inactive: var(--buic-background-toolbutton-inactive); @@ -58,6 +65,7 @@ $buic-button-gradient2: var(--buic-button-gradient2); $buic-inputs-border: var(--buic-inputs-border); $buic-inputs-focus-boxshadow-gradient1: var(--buic-inputs-focus-boxshadow-gradient1); $buic-inputs-focus-boxshadow-gradient2: var(--buic-inputs-focus-boxshadow-gradient2); +$buic-inputs-boxshadow: var(--buic-inputs-boxshadow); /** Themed colors */ $buic-foreground-accessory: var(--buic-foreground-accessory); @@ -67,6 +75,7 @@ $buic-foreground-primary-tint: var(--buic-foreground-primary-tint); $buic-foreground-success: var(--buic-foreground-success); $buic-foreground-success-tint: var(--buic-foreground-success-tint); $buic-foreground-alert: var(--buic-foreground-alert); +$buic-foreground-error: var(--buic-foreground-alert); $buic-foreground-alert-tint: var(--buic-foreground-alert-tint); $buic-foreground-warning: var(--buic-foreground-warning); $buic-foreground-warning-tint: var(--buic-foreground-warning-tint); diff --git a/ui/core/src/ui-core/table/variables.scss b/ui/core/src/ui-core/table/variables.scss deleted file mode 100644 index 11dd3ce..0000000 --- a/ui/core/src/ui-core/table/variables.scss +++ /dev/null @@ -1,19 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. -* Licensed under the MIT License. See LICENSE.md in the project root for license terms. -*--------------------------------------------------------------------------------------------*/ -@import "../icons/index"; -@import "../style/index"; - - -$uicore-tables-expanded-color: $uicore-blue; -$uicore-tables-expanded-hover: $uicore-blue-5; -$uicore-tables-hover: $uicore-blue-highlight; -$uicore-tables-padding: $uicore-m; -$uicore-tables-padding-condensed: $uicore-sm; -$uicore-tables-padding-x-condensed: $uicore-s; - -$uicore-tables-border-color: $uicore-gray-a; -$uicore-tables-head-dark: $uicore-gray-a; -$uicore-tables-head-light: $uicore-gray-b; -$uicore-tables-min-width: $uicore-cap-size; diff --git a/ui/core/src/ui-core/tabs/HorizontalTabs.tsx b/ui/core/src/ui-core/tabs/HorizontalTabs.tsx index 36a9e61..daa29f9 100644 --- a/ui/core/src/ui-core/tabs/HorizontalTabs.tsx +++ b/ui/core/src/ui-core/tabs/HorizontalTabs.tsx @@ -7,8 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; -import "./index.scss"; - /** Properties for the [[HorizontalTabs]] component */ export interface HorizontalTabsProps extends React.AllHTMLAttributes { labels: string[]; diff --git a/ui/core/src/ui-core/tabs/classes.scss b/ui/core/src/ui-core/tabs/classes.scss new file mode 100644 index 0000000..bc442f4 --- /dev/null +++ b/ui/core/src/ui-core/tabs/classes.scss @@ -0,0 +1,7 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./index"; + +.uicore-tabs-horizontal { @include uicore-tabs-horizontal; } diff --git a/ui/core/src/ui-core/tabs/horizontal.scss b/ui/core/src/ui-core/tabs/horizontal.scss index 775de89..9d0f5fe 100644 --- a/ui/core/src/ui-core/tabs/horizontal.scss +++ b/ui/core/src/ui-core/tabs/horizontal.scss @@ -40,5 +40,3 @@ } } } - -.uicore-tabs-horizontal { @include uicore-tabs-horizontal; } diff --git a/ui/core/src/ui-core/tabs/tabs.scss b/ui/core/src/ui-core/tabs/tabs.scss index b7d2e9b..3e656ba 100644 --- a/ui/core/src/ui-core/tabs/tabs.scss +++ b/ui/core/src/ui-core/tabs/tabs.scss @@ -27,7 +27,7 @@ border-bottom: 0 none transparent; margin: 0; line-height: $uicore-line-height; - color: $buic-text-color; // $uicore-text-color; + color: $buic-text-color; cursor: pointer; &::after { diff --git a/ui/core/src/ui-core/text/BodyText.tsx b/ui/core/src/ui-core/text/BodyText.tsx index 935813b..b14ae71 100644 --- a/ui/core/src/ui-core/text/BodyText.tsx +++ b/ui/core/src/ui-core/text/BodyText.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled body text */ export class BodyText extends React.Component { diff --git a/ui/core/src/ui-core/text/Headline.tsx b/ui/core/src/ui-core/text/Headline.tsx index 7bee541..9ece800 100644 --- a/ui/core/src/ui-core/text/Headline.tsx +++ b/ui/core/src/ui-core/text/Headline.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled headline text */ diff --git a/ui/core/src/ui-core/text/LeadingText.tsx b/ui/core/src/ui-core/text/LeadingText.tsx index 624929c..8d78f02 100644 --- a/ui/core/src/ui-core/text/LeadingText.tsx +++ b/ui/core/src/ui-core/text/LeadingText.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled leading text */ diff --git a/ui/core/src/ui-core/text/LeadingText2.tsx b/ui/core/src/ui-core/text/LeadingText2.tsx index cfc2062..9c52ead 100644 --- a/ui/core/src/ui-core/text/LeadingText2.tsx +++ b/ui/core/src/ui-core/text/LeadingText2.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled leading text */ diff --git a/ui/core/src/ui-core/text/MutedText.tsx b/ui/core/src/ui-core/text/MutedText.tsx index 5c2df64..7e19237 100644 --- a/ui/core/src/ui-core/text/MutedText.tsx +++ b/ui/core/src/ui-core/text/MutedText.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled muted/gray text */ diff --git a/ui/core/src/ui-core/text/SmallText.tsx b/ui/core/src/ui-core/text/SmallText.tsx index ced515d..ed25cee 100644 --- a/ui/core/src/ui-core/text/SmallText.tsx +++ b/ui/core/src/ui-core/text/SmallText.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled small text */ diff --git a/ui/core/src/ui-core/text/Subheading.tsx b/ui/core/src/ui-core/text/Subheading.tsx index 4591509..523e455 100644 --- a/ui/core/src/ui-core/text/Subheading.tsx +++ b/ui/core/src/ui-core/text/Subheading.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled subheading text */ diff --git a/ui/core/src/ui-core/text/Subheading2.tsx b/ui/core/src/ui-core/text/Subheading2.tsx index ce8f1dd..de2f958 100644 --- a/ui/core/src/ui-core/text/Subheading2.tsx +++ b/ui/core/src/ui-core/text/Subheading2.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled subheading text */ diff --git a/ui/core/src/ui-core/text/Title.tsx b/ui/core/src/ui-core/text/Title.tsx index fd407b2..822f002 100644 --- a/ui/core/src/ui-core/text/Title.tsx +++ b/ui/core/src/ui-core/text/Title.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled title text */ export class Title extends React.Component { diff --git a/ui/core/src/ui-core/text/Title2.tsx b/ui/core/src/ui-core/text/Title2.tsx index 37b6193..4e8b948 100644 --- a/ui/core/src/ui-core/text/Title2.tsx +++ b/ui/core/src/ui-core/text/Title2.tsx @@ -7,7 +7,6 @@ import * as React from "react"; import * as classnames from "classnames"; import { TextProps } from "./TextProps"; -import "./index.scss"; /** Styled title text */ export class Title2 extends React.Component { diff --git a/ui/core/src/ui-core/text/block.scss b/ui/core/src/ui-core/text/block.scss index 9c44b1a..50b7388 100644 --- a/ui/core/src/ui-core/text/block.scss +++ b/ui/core/src/ui-core/text/block.scss @@ -9,5 +9,3 @@ @include uicore-text( body ); @include uicore-text-block-spacing; } - -.uicore-text-block { @include uicore-text-block } diff --git a/ui/core/src/ui-core/text/classes.scss b/ui/core/src/ui-core/text/classes.scss new file mode 100644 index 0000000..bff11a7 --- /dev/null +++ b/ui/core/src/ui-core/text/classes.scss @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +@import "./index"; + +.uicore-text-block { @include uicore-text-block } +.uicore-text-headline { @include uicore-text-headline } +.uicore-text-leading { @include uicore-text-leading } +.uicore-text-leading-2 { @include uicore-text-leading-2 } +.uicore-text-muted { @include uicore-text-muted } +.uicore-text-small { @include uicore-text-small } +.uicore-text-subheading { @include uicore-text-subheading } +.uicore-text-subheading-2 { @include uicore-text-subheading-2 } +.uicore-text-title { @include uicore-text-title } +.uicore-text-title-2 { @include uicore-text-title-2 } diff --git a/ui/core/src/ui-core/text/headline.scss b/ui/core/src/ui-core/text/headline.scss index 821e51e..87fa20e 100644 --- a/ui/core/src/ui-core/text/headline.scss +++ b/ui/core/src/ui-core/text/headline.scss @@ -9,5 +9,3 @@ @include uicore-text( headline ); @include uicore-text-block-spacing; } - -.uicore-text-headline { @include uicore-text-headline } diff --git a/ui/core/src/ui-core/text/index.scss b/ui/core/src/ui-core/text/index.scss index b2f4948..7b91af3 100644 --- a/ui/core/src/ui-core/text/index.scss +++ b/ui/core/src/ui-core/text/index.scss @@ -2,11 +2,12 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +@import "./mixins"; + @import "./block"; @import "./headline"; @import "./leading"; @import "./leading-2"; -@import "./mixins"; @import "./muted"; @import "./small"; @import "./subheading"; diff --git a/ui/core/src/ui-core/text/leading-2.scss b/ui/core/src/ui-core/text/leading-2.scss index c5c293d..3897383 100644 --- a/ui/core/src/ui-core/text/leading-2.scss +++ b/ui/core/src/ui-core/text/leading-2.scss @@ -9,5 +9,3 @@ @include uicore-text( leading-2 ); @include uicore-text-block-spacing; } - -.uicore-text-leading-2 { @include uicore-text-leading-2 } diff --git a/ui/core/src/ui-core/text/leading.scss b/ui/core/src/ui-core/text/leading.scss index 2a7c9cc..66ce8d6 100644 --- a/ui/core/src/ui-core/text/leading.scss +++ b/ui/core/src/ui-core/text/leading.scss @@ -9,5 +9,3 @@ @include uicore-text( leading ); @include uicore-text-block-spacing; } - -.uicore-text-leading { @include uicore-text-leading } diff --git a/ui/core/src/ui-core/text/mixins.scss b/ui/core/src/ui-core/text/mixins.scss index 2141c3b..ec5c269 100644 --- a/ui/core/src/ui-core/text/mixins.scss +++ b/ui/core/src/ui-core/text/mixins.scss @@ -56,4 +56,5 @@ font-size: map-get( $sizes, $type ); font-weight: map-get( $weights, $type ); line-height: map-get( $line-heights, $type ); + color: $buic-text-color; } diff --git a/ui/core/src/ui-core/text/muted.scss b/ui/core/src/ui-core/text/muted.scss index c5da5a5..9cf9780 100644 --- a/ui/core/src/ui-core/text/muted.scss +++ b/ui/core/src/ui-core/text/muted.scss @@ -8,5 +8,3 @@ color: $uicore-gray; } - -.uicore-text-muted { @include uicore-text-muted } diff --git a/ui/core/src/ui-core/text/small.scss b/ui/core/src/ui-core/text/small.scss index 5a2b10a..a0d9205 100644 --- a/ui/core/src/ui-core/text/small.scss +++ b/ui/core/src/ui-core/text/small.scss @@ -10,5 +10,3 @@ padding: 0; margin: 0; } - -.uicore-text-small { @include uicore-text-small } diff --git a/ui/core/src/ui-core/text/subheading-2.scss b/ui/core/src/ui-core/text/subheading-2.scss index 42a4cc1..04b353b 100644 --- a/ui/core/src/ui-core/text/subheading-2.scss +++ b/ui/core/src/ui-core/text/subheading-2.scss @@ -9,5 +9,3 @@ @include uicore-text( subheading-2 ); @include uicore-text-block-spacing; } - -.uicore-text-subheading-2 { @include uicore-text-subheading-2 } diff --git a/ui/core/src/ui-core/text/subheading.scss b/ui/core/src/ui-core/text/subheading.scss index 844431e..b0c4b70 100644 --- a/ui/core/src/ui-core/text/subheading.scss +++ b/ui/core/src/ui-core/text/subheading.scss @@ -9,5 +9,3 @@ @include uicore-text( subheading ); @include uicore-text-block-spacing; } - -.uicore-text-subheading { @include uicore-text-subheading } diff --git a/ui/core/src/ui-core/text/title-2.scss b/ui/core/src/ui-core/text/title-2.scss index 28c37b6..5d927f7 100644 --- a/ui/core/src/ui-core/text/title-2.scss +++ b/ui/core/src/ui-core/text/title-2.scss @@ -9,5 +9,3 @@ @include uicore-text( title-2 ); @include uicore-text-block-spacing; } - -.uicore-text-title-2 { @include uicore-text-title-2 } diff --git a/ui/core/src/ui-core/text/title.scss b/ui/core/src/ui-core/text/title.scss index 7ebf50f..5b00875 100644 --- a/ui/core/src/ui-core/text/title.scss +++ b/ui/core/src/ui-core/text/title.scss @@ -9,5 +9,3 @@ @include uicore-text( title ); @include uicore-text-block-spacing; } - -.uicore-text-title { @include uicore-text-title } diff --git a/ui/core/src/ui-core/toggle/Toggle.scss b/ui/core/src/ui-core/toggle/Toggle.scss index c1ea4ee..2f92096 100644 --- a/ui/core/src/ui-core/toggle/Toggle.scss +++ b/ui/core/src/ui-core/toggle/Toggle.scss @@ -3,7 +3,6 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ @import "../style/index.scss"; -@import "../colors"; //$toggle-handle-inset: 2px; diff --git a/ui/core/src/ui-core/tree/ExpansionToggle.scss b/ui/core/src/ui-core/tree/ExpansionToggle.scss index 91e00b5..1c0ef01 100644 --- a/ui/core/src/ui-core/tree/ExpansionToggle.scss +++ b/ui/core/src/ui-core/tree/ExpansionToggle.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "../colors.scss"; +@import "../style/themecolors.scss"; .core-tree-expansionToggle { > .toggle { diff --git a/ui/core/src/ui-core/tree/Node.scss b/ui/core/src/ui-core/tree/Node.scss index 275a7e1..a197e22 100644 --- a/ui/core/src/ui-core/tree/Node.scss +++ b/ui/core/src/ui-core/tree/Node.scss @@ -21,29 +21,34 @@ $node-font-size: $uicore-font-size; cursor: default; min-height: 24px; - > .loader { - margin: auto 4px; - } + > .contents { + display: flex; + align-items: center; - .core-checkbox { - display: inline-block; - padding: 0; - margin: 0; - margin-right: 5px; - background: transparent; + > .loader { + margin: auto 4px; + } - > input { - position: relative; - left: 0px; - height: auto; - line-height: unset; + > .expansion-toggle { + display: inline-block; + margin-top: auto; + margin-bottom: auto; } - } - > .contents { - margin-left: 5px; - display: flex; - align-items: center; + .core-checkbox { + display: inline-block; + padding: 0; + margin: 0; + margin-right: 5px; + background: transparent; + + > input { + position: relative; + left: 0px; + height: auto; + line-height: unset; + } + } } &-icon { @@ -51,16 +56,10 @@ $node-font-size: $uicore-font-size; height: 24px; display: inline-block; box-sizing: border-box; - padding: 4px 0; + padding: 5px 0; margin-right: 5px; } - > .expansion-toggle { - display: inline-block; - margin-top: auto; - margin-bottom: auto; - } - &.is-focused, &:focus { outline: 1px dotted #000; } diff --git a/ui/core/src/ui-core/tree/Node.tsx b/ui/core/src/ui-core/tree/Node.tsx index 4a437f9..2f9d04c 100644 --- a/ui/core/src/ui-core/tree/Node.tsx +++ b/ui/core/src/ui-core/tree/Node.tsx @@ -10,11 +10,15 @@ import { Checkbox, CheckboxProps } from "../inputs/checkbox/Checkbox"; import { CheckBoxState } from "../enums/CheckBoxState"; import ExpansionToggle from "./ExpansionToggle"; import { Spinner, SpinnerSize } from "../loading/Spinner"; +import { Omit } from "../utils/typeUtils"; import "./Node.scss"; +/** Props for node checkbox renderer */ +export type NodeCheckboxRenderProps = Omit & { onChange: (checked: boolean) => void }; + /** Type for node checkbox renderer */ -export type NodeCheckboxRenderer = (props: CheckboxProps) => React.ReactNode; +export type NodeCheckboxRenderer = (props: NodeCheckboxRenderProps) => React.ReactNode; /** Number of pixels the node gets offset per each hierarchy level */ export const LEVEL_OFFSET = 20; @@ -77,7 +81,7 @@ export default class TreeNode extends React.Component { let checkbox: React.ReactNode; if (this.props.checkboxProps) { - const props: CheckboxProps = { + const props: NodeCheckboxRenderProps = { label: "", checked: this.props.checkboxProps.state === CheckBoxState.On, disabled: this.props.checkboxProps.isDisabled, @@ -87,7 +91,7 @@ export default class TreeNode extends React.Component { if (this.props.renderOverrides && this.props.renderOverrides.renderCheckbox) { checkbox = this.props.renderOverrides.renderCheckbox(props); } else { - checkbox = (); + checkbox = ( this._onCheckboxChange(e.target.checked)} data-testid={this.createSubComponentTestId("checkbox")} />); } } @@ -102,24 +106,23 @@ export default class TreeNode extends React.Component { /> ); - const style = { ...this.props.style, paddingLeft: offset }; - return (
- {loader} - {toggle}
+ {loader} + {toggle} {checkbox} {icon} {this.props.label} @@ -135,9 +138,9 @@ export default class TreeNode extends React.Component { return `${this.props["data-testid"]}-${subId}`; } - private _onCheckboxChange = (e: React.ChangeEvent) => { + private _onCheckboxChange = (checked: boolean) => { if (this.props.checkboxProps && this.props.checkboxProps.onClick && !this.props.checkboxProps.isDisabled) - this.props.checkboxProps.onClick(e.target.indeterminate ? CheckBoxState.Partial : e.target.checked ? CheckBoxState.On : CheckBoxState.Off); + this.props.checkboxProps.onClick(checked ? CheckBoxState.On : CheckBoxState.Off); } private _onCheckboxClick = (e: React.MouseEvent) => { diff --git a/ui/core/src/ui-core/tree/Placeholder.scss b/ui/core/src/ui-core/tree/Placeholder.scss index d72cc5d..bdf25eb 100644 --- a/ui/core/src/ui-core/tree/Placeholder.scss +++ b/ui/core/src/ui-core/tree/Placeholder.scss @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ @import "../style/index.scss"; -@import "../colors.scss"; +@import "../style/themecolors.scss"; .core-tree-placeholder { display: block; @@ -15,6 +15,6 @@ padding-bottom: 3px; > .contents { height: 18px; - background-color: $background-2; + background-color: $buic-background-control; } } diff --git a/ui/framework/.npmignore b/ui/framework/.npmignore index 31fdd59..e06cd44 100644 --- a/ui/framework/.npmignore +++ b/ui/framework/.npmignore @@ -3,6 +3,7 @@ !lib/**/*.d.ts !lib/**/*.js !lib/**/*.*css +!lib/**/*.json !lib/public/**/* lib/test !*.md diff --git a/ui/framework/CHANGELOG.json b/ui/framework/CHANGELOG.json index d96ec66..f597cdd 100644 --- a/ui/framework/CHANGELOG.json +++ b/ui/framework/CHANGELOG.json @@ -1,6 +1,39 @@ { "name": "@bentley/ui-framework", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/ui-framework_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Added 'uifw-' to ContentLayout CSS class names and others. Fixed Status Bar separators." + }, + { + "comment": "Added 'uifw-' prefix to most ui-framework CSS class names" + }, + { + "comment": "Fixed .npmignore in ui-framework to include JSON files in lib" + }, + { + "comment": "Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS" + }, + { + "comment": "Add SaturationPicker for use with ColorType editor." + }, + { + "comment": "Made ContentLayoutManager.setActiveLayout callable by apps" + }, + { + "comment": "Update ModelSelector when changes are made to ViewState" + }, + { + "comment": "Add models visibility tree" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/ui-framework_v0.189.0", diff --git a/ui/framework/CHANGELOG.md b/ui/framework/CHANGELOG.md index 73efdc7..2ec6284 100644 --- a/ui/framework/CHANGELOG.md +++ b/ui/framework/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log - @bentley/ui-framework -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Added 'uifw-' to ContentLayout CSS class names and others. Fixed Status Bar separators. +- Added 'uifw-' prefix to most ui-framework CSS class names +- Fixed .npmignore in ui-framework to include JSON files in lib +- Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS +- Add SaturationPicker for use with ColorType editor. +- Made ContentLayoutManager.setActiveLayout callable by apps +- Update ModelSelector when changes are made to ViewState +- Add models visibility tree ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/ui/framework/package.json b/ui/framework/package.json index 78643fc..dabb676 100644 --- a/ui/framework/package.json +++ b/ui/framework/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/ui-framework", - "version": "0.189.0", + "version": "0.190.0", "description": "UI framework", "license": "MIT", "repository": { @@ -27,6 +27,10 @@ "source": "./src/**/*.*css", "dest": "./lib" }, + { + "source": "./src/**/*.json", + "dest": "./lib" + }, { "source": "./public/**/*", "dest": "./lib/public" @@ -50,38 +54,38 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0", - "@bentley/ui-ninezone": "0.189.0" + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0", + "@bentley/ui-ninezone": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/config-loader": "0.189.0", - "@bentley/build-tools": "0.189.0", - "@bentley/bentleyjs-core": "0.189.0", - "@bentley/geometry-core": "0.189.0", - "@bentley/imodeljs-i18n": "0.189.0", - "@bentley/imodeljs-frontend": "0.189.0", - "@bentley/imodeljs-common": "0.189.0", - "@bentley/imodeljs-clients": "0.189.0", - "@bentley/presentation-common": "0.189.0", - "@bentley/presentation-frontend": "0.189.0", - "@bentley/presentation-testing": "0.189.0", - "@bentley/ui-core": "0.189.0", - "@bentley/ui-components": "0.189.0", - "@bentley/ui-ninezone": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/config-loader": "0.190.0", + "@bentley/build-tools": "0.190.0", + "@bentley/bentleyjs-core": "0.190.0", + "@bentley/geometry-core": "0.190.0", + "@bentley/imodeljs-i18n": "0.190.0", + "@bentley/imodeljs-frontend": "0.190.0", + "@bentley/imodeljs-common": "0.190.0", + "@bentley/imodeljs-clients": "0.190.0", + "@bentley/presentation-common": "0.190.0", + "@bentley/presentation-frontend": "0.190.0", + "@bentley/presentation-testing": "0.190.0", + "@bentley/ui-core": "0.190.0", + "@bentley/ui-components": "0.190.0", + "@bentley/ui-ninezone": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", @@ -101,6 +105,7 @@ "chai-jest-snapshot": "^2.0.0", "chai-spies": "1.0.0", "cross-env": "^5.1.4", + "dom-testing-library": "^3.16.6", "enzyme": "^3.4.0", "enzyme-adapter-react-16": "^1.2.0", "enzyme-to-json": "^3.3.4", @@ -110,7 +115,7 @@ "mocha": "^5.2.0", "nyc": "^13.0.1", "raf": "^3.4.0", - "react-testing-library": "^5.2.3", + "react-testing-library": "^5.8.0", "rimraf": "^2.6.2", "sinon": "^7.1.1", "sinon-chai": "^3.2.0", @@ -128,7 +133,7 @@ ], "dependencies": { "@bentley/icons-generic-webfont": "^0.0.9", - "@bentley/presentation-components": "0.189.0", + "@bentley/presentation-components": "0.190.0", "classnames": "^2.2.5", "immutable": "^3.8.2", "lodash": "^4.17.10", diff --git a/ui/framework/src/test/content/ContentLayout.test.snap b/ui/framework/src/test/content/ContentLayout.test.snap index 86cb70e..f9c17bc 100644 --- a/ui/framework/src/test/content/ContentLayout.test.snap +++ b/ui/framework/src/test/content/ContentLayout.test.snap @@ -2,8 +2,8 @@ exports[`ContentLayout FourQuadrantsVertical renders correctly 1`] = `
{ it("ContentLayoutDiv mouse down and up", () => { const wrapper = mount(); - wrapper.find("#ContentLayoutDiv").simulate("mouseDown"); + const layoutDiv = wrapper.find("#uifw-contentlayout-div"); + layoutDiv.simulate("mouseDown"); expect(ContentViewManager.isMouseDown).to.be.true; - wrapper.find("#ContentLayoutDiv").simulate("mouseUp"); + layoutDiv.simulate("mouseUp"); expect(ContentViewManager.isMouseDown).to.be.false; wrapper.unmount(); }); @@ -150,13 +151,13 @@ describe("ContentLayout", () => { it("ContentWrapper mouse down", () => { const wrapper = mount(); - const layoutWrappers = wrapper.find("div.contentlayout-wrapper"); + const layoutWrappers = wrapper.find("div.uifw-contentlayout-wrapper"); expect(layoutWrappers.length).to.eq(2); - expect(wrapper.find("div.contentlayout-overlay-active").length).to.eq(0); + expect(wrapper.find("div.uifw-contentlayout-overlay-active").length).to.eq(0); layoutWrappers.at(0).simulate("mouseDown"); wrapper.update(); - expect(wrapper.find("div.contentlayout-overlay-active").length).to.eq(1); + expect(wrapper.find("div.uifw-contentlayout-overlay-active").length).to.eq(1); wrapper.unmount(); }); diff --git a/ui/framework/src/test/feedback/ValidationTextbox.test.snap b/ui/framework/src/test/feedback/ValidationTextbox.test.snap index 90fa1e7..2dd80a7 100644 --- a/ui/framework/src/test/feedback/ValidationTextbox.test.snap +++ b/ui/framework/src/test/feedback/ValidationTextbox.test.snap @@ -2,7 +2,7 @@ exports[`ValidationTextbox should render correctly 1`] = `
{ FrontstageManager.openModalFrontstage(modalFrontstage); expect(FrontstageManager.modalFrontstageCount).to.eq(1); wrapper.update(); - expect(wrapper.find("div.modal-frontstage").length).to.eq(1); + expect(wrapper.find("div.uifw-modal-frontstage").length).to.eq(1); const backButton = wrapper.find("div.nz-toolbar-button-back"); expect(backButton.length).to.eq(1); diff --git a/ui/framework/src/test/frontstage/ModalFrontstage.test.tsx b/ui/framework/src/test/frontstage/ModalFrontstage.test.tsx index 1329682..ecba2af 100644 --- a/ui/framework/src/test/frontstage/ModalFrontstage.test.tsx +++ b/ui/framework/src/test/frontstage/ModalFrontstage.test.tsx @@ -68,7 +68,7 @@ describe("ModalFrontstage", () => { mount(renderModalFrontstage(false)); const wrapper = mount(renderModalFrontstage(true)); - expect(wrapper.find("div.modal-frontstage").length).to.eq(1); + expect(wrapper.find("div.uifw-modal-frontstage").length).to.eq(1); const backButton = wrapper.find("div.nz-toolbar-button-back"); expect(backButton.length).to.eq(1); diff --git a/ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.snap b/ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.snap new file mode 100644 index 0000000..adea5d4 --- /dev/null +++ b/ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.snap @@ -0,0 +1,468 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`VisibilityTree #integration renders component with real data and no active viewport 1`] = ` +
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+
+ + DgnV8Bridge + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`; + +exports[`VisibilityTree #integration shows correct hierarchy 1`] = ` +Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "icon": "icon-image", + "label": "Physical Object-0-38", + }, + Object { + "icon": "icon-image", + "label": "Physical Object-0-39", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + Object { + "icon": "icon-image", + "label": "TestClass", + }, + ], + "hasChildren": true, + "icon": "icon-layers", + "label": "Uncategorized", + }, + ], + "hasChildren": true, + "icon": "icon-3d", + "label": "Properties_60InstancesWithUrl2", + }, + ], + "hasChildren": true, + "icon": "icon-archived", + "label": "Properties_60InstancesWithUrl2", + }, + ], + "hasChildren": true, + "icon": "icon-archived", + "label": "DgnV8Bridge:D:\\\\Temp\\\\Properties_60InstancesWithUrl2.dgn, Default", + }, + ], + "hasChildren": true, + "icon": "icon-archived", + "label": "DgnV8Bridge", + }, +] +`; + +exports[`VisibilityTree #unit should match snapshot 1`] = ` + +
+
+
+
+
+
+
+
+
+ +
+
+ + test-node + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +`; diff --git a/ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.tsx b/ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.tsx new file mode 100644 index 0000000..1ed374d --- /dev/null +++ b/ui/framework/src/test/imodel-components/visibility-tree/VisibilityTree.test.tsx @@ -0,0 +1,840 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +import * as React from "react"; +import * as moq from "typemoq"; +import * as sinon from "sinon"; +import { render, cleanup, waitForElement, within, fireEvent } from "react-testing-library"; +import { expect } from "chai"; +import TestUtils from "../../TestUtils"; +import { BeEvent, Id64String, using } from "@bentley/bentleyjs-core"; +import { IModelConnection, ViewState, Viewport, ViewState3d, SpatialViewState, CategorySelectorState, ModelSelectorState } from "@bentley/imodeljs-frontend"; +import { KeySet, ECInstanceNodeKey, StandardNodeTypes, BaseNodeKey } from "@bentley/presentation-common"; +import { SelectionManager, Presentation, SelectionChangeEvent } from "@bentley/presentation-frontend"; +import { IPresentationTreeDataProvider } from "@bentley/presentation-components"; +import { initialize as initializePresentationTesting, terminate as terminatePresentationTesting, HierarchyBuilder } from "@bentley/presentation-testing"; +import { TreeDataChangesListener, TreeNodeItem } from "@bentley/ui-components"; +import { VisibilityTree } from "../../../ui-framework"; +import { VisibilityHandler, RULESET } from "../../../ui-framework/imodel-components/visibility-tree/VisibilityTree"; +import { isPromiseLike } from "@bentley/ui-core"; + +describe("VisibilityTree", () => { + + before(async () => { + await TestUtils.initializeUiFramework(); + + // note: this is needed for AutoSizer used by the Tree to + // have non-zero size and render the virtualized list + Object.defineProperties(HTMLElement.prototype, { + offsetHeight: { get: () => 200 }, + offsetWidth: { get: () => 200 }, + }); + }); + + after(() => { + TestUtils.terminateUiFramework(); + }); + + describe("#unit", () => { + + const imodelMock = moq.Mock.ofType(); + const selectionManagerMock = moq.Mock.ofType(); + let dataProvider: IPresentationTreeDataProvider; + + beforeEach(() => { + cleanup(); + + imodelMock.reset(); + selectionManagerMock.reset(); + dataProvider = { + imodel: imodelMock.object, + rulesetId: "", + onTreeNodeChanged: new BeEvent(), + getFilteredNodePaths: async () => [], + getNodeKey: (n: TreeNodeItem) => n.extendedData.key, + getNodesCount: async () => 0, + getNodes: async () => [], + }; + + const selectionChangeEvent = new SelectionChangeEvent(); + selectionManagerMock.setup((x) => x.selectionChange).returns(() => selectionChangeEvent); + selectionManagerMock.setup((x) => x.getSelectionLevels(imodelMock.object)).returns(() => []); + selectionManagerMock.setup((x) => x.getSelection(imodelMock.object, moq.It.isAny())).returns(() => new KeySet()); + Presentation.selection = selectionManagerMock.object; + }); + + after(() => { + Presentation.terminate(); + }); + + const setupDataProvider = (nodes: TreeNodeItem[]) => { + dataProvider.getNodesCount = async () => nodes.length; + dataProvider.getNodes = async () => nodes.map((n) => ({ extendedData: { key: createKey("element", n.id) }, ...n })); + }; + + const setupDataProviderForEachNodeType = () => { + setupDataProvider([ + createSubjectNode(), + createModelNode(), + createCategoryNode(), + createElementNode(), + ]); + }; + + const createSubjectNode = () => ({ + id: "subject", + label: "subject", + extendedData: { key: createKey("subject", "subject_id") }, + }); + + const createModelNode = () => ({ + id: "model", + label: "model", + extendedData: { key: createKey("model", "model_id") }, + }); + + const createCategoryNode = () => ({ + id: "category", + label: "category", + extendedData: { key: createKey("category", "category_id") }, + }); + + const createElementNode = () => ({ + id: "element", + label: "element", + extendedData: { key: createKey("element", "element_id") }, + }); + + const createKey = (type: "subject" | "model" | "category" | "element", id: Id64String): ECInstanceNodeKey => { + let className: string; + switch (type) { + case "subject": className = "BisCore:Subject"; break; + case "model": className = "BisCore:PhysicalModel"; break; + case "category": className = "BisCore:SpatialCategory"; break; + default: className = "BisCore:SomeElementType"; + } + return { + type: StandardNodeTypes.ECInstanceNode, + instanceKey: { className, id }, + pathFromRoot: [], + }; + }; + + describe("", () => { + + const visibilityHandlerMock = moq.Mock.ofType(); + + beforeEach(() => { + visibilityHandlerMock.reset(); + }); + + const isNodeChecked = (node: HTMLElement): boolean => { + const cb = node.querySelector("input"); + return cb!.checked; + }; + + it("should match snapshot", async () => { + setupDataProvider([{ id: "test", label: "test-node" }]); + visibilityHandlerMock.setup(async (x) => x.isDisplayed(moq.It.isAny())).returns(async () => false); + const result = render(); + await waitForElement(() => result.getByText("test-node"), { container: result.container }); + expect(result.baseElement).to.matchSnapshot(); + }); + + it("renders nodes without checkboxes when they're not instance-based", async () => { + setupDataProvider([createElementNode()]); + dataProvider.getNodeKey = (): BaseNodeKey => ({ type: "test", pathFromRoot: [] }); + + const result = render(); + const renderedNode = await waitForElement(() => result.getByText("element")); + expect(within(renderedNode).queryAllByTestId("tree-node-checkbox").length).to.eq(0); + }); + + it("renders nodes as unchecked when they're not displayed", async () => { + setupDataProviderForEachNodeType(); + visibilityHandlerMock.setup(async (x) => x.isDisplayed(moq.It.isAny())).returns(async () => false); + + const result = render(); + await waitForElement(() => result.getByText("model")); + const nodes = result.getAllByTestId("tree-node"); + expect(nodes.length).to.eq(4); + nodes.forEach((node) => expect(isNodeChecked(node)).to.be.false); + }); + + it("renders nodes as checked when they're displayed", async () => { + setupDataProviderForEachNodeType(); + visibilityHandlerMock.setup(async (x) => x.isDisplayed(moq.It.isAny())).returns(async () => true); + + const result = render(); + await waitForElement(() => result.getByText("model")); + const nodes = result.getAllByTestId("tree-node"); + expect(nodes.length).to.eq(4); + nodes.forEach((node) => expect(isNodeChecked(node)).to.be.true); + }); + + it("re-renders nodes on `onVisibilityChange` callback", async () => { + const node = createModelNode(); + setupDataProvider([node]); + + let cb: undefined | (() => void); + visibilityHandlerMock.setup((x) => x.onVisibilityChange = moq.It.isAny()).callback((value) => cb = value).verifiable(); + visibilityHandlerMock.setup((x) => x.isDisplayed(moq.It.isAny())).returns(() => false).verifiable(moq.Times.exactly(2)); + const result = render(); + await waitForElement(() => { + const renderedNode = result.getByTestId("tree-node"); + if (isNodeChecked(renderedNode)) + throw new Error("expecting unchecked node"); + return renderedNode; + }); + visibilityHandlerMock.verifyAll(); + + visibilityHandlerMock.reset(); + visibilityHandlerMock.setup((x) => x.isDisplayed(moq.It.isAny())).returns(() => true).verifiable(moq.Times.exactly(1)); + cb!(); + await waitForElement(() => { + const renderedNode = result.getByTestId("tree-node"); + if (!isNodeChecked(renderedNode)) + throw new Error("expecting checked node"); + return renderedNode; + }); + visibilityHandlerMock.verifyAll(); + }); + + it("calls visibility handler's `changeVisibility` on node checkbox state changes to 'checked'", async () => { + const node = createModelNode(); + setupDataProvider([node]); + visibilityHandlerMock.setup(async (x) => x.isDisplayed(moq.It.isAny())).returns(async () => false); + visibilityHandlerMock.setup(async (x) => x.changeVisibility(node.extendedData.key.instanceKey, true)).returns(async () => Promise.resolve()).verifiable(); + + const result = render(); + await waitForElement(() => result.getByText("model")); + const renderedNode = result.getByTestId("tree-node"); + const cb = renderedNode.querySelector("input"); + fireEvent.click(cb!); + + visibilityHandlerMock.verifyAll(); + }); + + }); + + describe("VisibilityHandler", () => { + + interface ViewportMockProps { + viewState?: ViewState; + onViewChanged?: BeEvent<(vp: Viewport) => void>; + onAlwaysDrawnChanged?: BeEvent<() => void>; + onNeverDrawnChanged?: BeEvent<() => void>; + } + const mockViewport = (props?: ViewportMockProps) => { + if (!props) + props = {}; + if (!props.viewState) + props.viewState = moq.Mock.ofType().object; + if (!props.onViewChanged) + props.onViewChanged = new BeEvent<(vp: Viewport) => void>(); + if (!props.onAlwaysDrawnChanged) + props.onAlwaysDrawnChanged = new BeEvent<() => void>(); + if (!props.onNeverDrawnChanged) + props.onNeverDrawnChanged = new BeEvent<() => void>(); + const vpMock = moq.Mock.ofType(); + vpMock.setup((x) => x.view).returns(() => props!.viewState!); + vpMock.setup((x) => x.onViewChanged).returns(() => props!.onViewChanged!); + vpMock.setup((x) => x.onAlwaysDrawnChanged).returns(() => props!.onAlwaysDrawnChanged!); + vpMock.setup((x) => x.onNeverDrawnChanged).returns(() => props!.onNeverDrawnChanged!); + return vpMock; + }; + + describe("constructor", () => { + + it("should subscribe for viewport change events", () => { + const vpMock = mockViewport(); + new VisibilityHandler(vpMock.object, () => { }); + expect(vpMock.object.onViewChanged.numberOfListeners).to.eq(1); + expect(vpMock.object.onAlwaysDrawnChanged.numberOfListeners).to.eq(1); + expect(vpMock.object.onNeverDrawnChanged.numberOfListeners).to.eq(1); + }); + + }); + + describe("dispose", () => { + + it("should unsubscribe from viewport change events", () => { + const vpMock = mockViewport(); + using(new VisibilityHandler(vpMock.object, () => { }), (_) => { + }); + expect(vpMock.object.onViewChanged.numberOfListeners).to.eq(0); + expect(vpMock.object.onAlwaysDrawnChanged.numberOfListeners).to.eq(0); + expect(vpMock.object.onNeverDrawnChanged.numberOfListeners).to.eq(0); + }); + + }); + + describe("isDisplayed", () => { + + describe("subject", () => { + + it("return false when all models are not displayed", async () => { + const key = createSubjectNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.viewsModel("0x1")).returns(() => false); + viewStateMock.setup((x) => x.viewsModel("0x2")).returns(() => false); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + // note: need to override to avoid running a query on the imodel + (handler as any).getSubjectModelIds = async () => ["0x1", "0x2"]; + + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.true; + if (isPromiseLike(result)) + expect(await result).to.be.false; + }); + }); + + it("return true when at least one model is displayed", async () => { + const key = createSubjectNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.viewsModel("0x1")).returns(() => true); + viewStateMock.setup((x) => x.viewsModel("0x2")).returns(() => false); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + // note: need to override to avoid running a query on the imodel + (handler as any).getSubjectModelIds = async () => ["0x1", "0x2"]; + + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.true; + if (isPromiseLike(result)) + expect(await result).to.be.true; + }); + }); + + }); + + describe("model", () => { + + it("return true when displayed", async () => { + const key = createModelNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.viewsModel(key.id)).returns(() => true); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.false; + expect(result).to.be.true; + }); + }); + + it("returns false when not displayed", async () => { + const key = createModelNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.viewsModel(key.id)).returns(() => false); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.false; + expect(result).to.be.false; + }); + }); + + }); + + describe("category", () => { + + it("return true when displayed", async () => { + const key = createCategoryNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.viewsCategory(key.id)).returns(() => true); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.false; + expect(result).to.be.true; + }); + }); + + it("returns false when not displayed", async () => { + const key = createCategoryNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.viewsCategory(key.id)).returns(() => false); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.false; + expect(result).to.be.false; + }); + }); + + }); + + describe("element", () => { + + it("returns false when element is in never displayed list", async () => { + const key = createElementNode().extendedData.key.instanceKey; + + const vpMock = mockViewport(); + const neverDrawn = new Set([key.id]); + vpMock.setup((x) => x.neverDrawn).returns(() => neverDrawn); + vpMock.setup((x) => x.alwaysDrawn).returns(() => new Set()); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.false; + expect(result).to.be.false; + }); + }); + + it("returns false when element's model is not displayed'", async () => { + const key = createElementNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.viewsCategory(moq.It.isAny())).returns(() => true); + viewStateMock.setup((x) => x.viewsModel(moq.It.isAny())).returns(() => false); + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.neverDrawn).returns(() => new Set()); + vpMock.setup((x) => x.alwaysDrawn).returns(() => new Set()); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + (handler as any)._elementCategoryAndModelLoader = { + // note: need to override this private helper to avoid executing a query + // on the imodel + getCategoryAndModelId: async () => ({ categoryId: "0x1", modelId: "0x2" }), + }; + + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.true; + expect(await result).to.be.false; + }); + }); + + it("returns true when element is displayed and is in always displayed list", async () => { + const key = createElementNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.viewsCategory(moq.It.isAny())).returns(() => false); + viewStateMock.setup((x) => x.viewsModel(moq.It.isAny())).returns(() => true); + const vpMock = mockViewport({ viewState: viewStateMock.object }); + const alwaysDrawn = new Set([key.id]); + vpMock.setup((x) => x.neverDrawn).returns(() => new Set()); + vpMock.setup((x) => x.alwaysDrawn).returns(() => alwaysDrawn); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + (handler as any)._elementCategoryAndModelLoader = { + // note: need to override this private helper to avoid executing a query + // on the imodel + getCategoryAndModelId: async () => ({ categoryId: "0x1", modelId: "0x2" }), + }; + + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.true; + expect(await result).to.be.true; + }); + }); + + it("returns true when element's model and category are displayed", async () => { + const key = createElementNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.viewsCategory(moq.It.isAny())).returns(() => true); + viewStateMock.setup((x) => x.viewsModel(moq.It.isAny())).returns(() => true); + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.alwaysDrawn).returns(() => new Set()); + vpMock.setup((x) => x.neverDrawn).returns(() => new Set()); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + (handler as any)._elementCategoryAndModelLoader = { + // note: need to override this private helper to avoid executing a query + // on the imodel + getCategoryAndModelId: async () => ({ categoryId: "0x1", modelId: "0x2" }), + }; + + const result = handler.isDisplayed(key); + expect(isPromiseLike(result)).to.be.true; + expect(await result).to.be.true; + }); + }); + + }); + + }); + + describe("changeVisibility", () => { + + describe("subject", () => { + + it("does nothing for non-spatial views", async () => { + const key = createSubjectNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => false); + viewStateMock.setup((x) => x.addViewedModel(moq.It.isAny())).verifiable(moq.Times.never()); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(moq.Times.never()); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + // note: need to override to avoid running a query on the imodel + (handler as any).getSubjectModelIds = async () => ["0x1", "0x2"]; + + await handler.changeVisibility(key, true); + viewStateMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + it("makes all subject models visible", async () => { + const key = createSubjectNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.addViewedModel(moq.It.isAny())).verifiable(moq.Times.exactly(2)); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + // note: need to override to avoid running a query on the imodel + (handler as any).getSubjectModelIds = async () => ["0x1", "0x2"]; + + await handler.changeVisibility(key, true); + viewStateMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + it("makes all subject models hidden", async () => { + const key = createSubjectNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.removeViewedModel(moq.It.isAny())).verifiable(moq.Times.exactly(2)); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + // note: need to override to avoid running a query on the imodel + (handler as any).getSubjectModelIds = async () => ["0x1", "0x2"]; + + await handler.changeVisibility(key, false); + viewStateMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + }); + + describe("model", () => { + + it("does nothing for non-spatial views", async () => { + const key = createModelNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => false); + viewStateMock.setup((x) => x.addViewedModel(key.id)).verifiable(moq.Times.never()); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(moq.Times.never()); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, true); + viewStateMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + it("makes model visible", async () => { + const key = createModelNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.addViewedModel(key.id)).verifiable(); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, true); + viewStateMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + it("makes model hidden", async () => { + const key = createModelNode().extendedData.key.instanceKey; + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.removeViewedModel(key.id)).verifiable(); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, false); + viewStateMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + }); + + describe("category", () => { + + it("makes category visible", async () => { + const key = createCategoryNode().extendedData.key.instanceKey; + + const categorySelectorMock = moq.Mock.ofType(); + categorySelectorMock.setup((x) => x.categories).returns(() => new Set()); + categorySelectorMock.setup((x) => x.changeCategoryDisplay(key.id, true)).verifiable(); + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + viewStateMock.setup((x) => x.categorySelector).returns(() => categorySelectorMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, true); + categorySelectorMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + it("makes category hidden", async () => { + const key = createCategoryNode().extendedData.key.instanceKey; + + const categorySelectorMock = moq.Mock.ofType(); + categorySelectorMock.setup((x) => x.categories).returns(() => new Set()); + categorySelectorMock.setup((x) => x.changeCategoryDisplay(key.id, false)).verifiable(); + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.clone()).returns(() => viewStateMock.object); + viewStateMock.setup((x) => x.categorySelector).returns(() => categorySelectorMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object }); + vpMock.setup((x) => x.changeView(viewStateMock.object)).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, false); + categorySelectorMock.verifyAll(); + vpMock.verifyAll(); + }); + }); + + }); + + describe("element", () => { + + it("makes element visible by removing from never displayed list and adding to always displayed list", async () => { + const key = createElementNode().extendedData.key.instanceKey; + + const alwaysDisplayed = new Set(); + const neverDisplayed = new Set([key.id]); + const vpMock = mockViewport(); + vpMock.setup((x) => x.alwaysDrawn).returns(() => alwaysDisplayed); + vpMock.setup((x) => x.neverDrawn).returns(() => neverDisplayed); + vpMock.setup((x) => x.setAlwaysDrawn(moq.It.is((set) => (set.size === 1 && set.has(key.id))))).verifiable(); + vpMock.setup((x) => x.setNeverDrawn(moq.It.is((set) => (set.size === 0)))).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, true); + vpMock.verifyAll(); + }); + }); + + it("makes element hidden by removing from always displayed list and adding to never displayed list", async () => { + const key = createElementNode().extendedData.key.instanceKey; + + const alwaysDisplayed = new Set([key.id]); + const neverDisplayed = new Set(); + const vpMock = mockViewport(); + vpMock.setup((x) => x.alwaysDrawn).returns(() => alwaysDisplayed); + vpMock.setup((x) => x.neverDrawn).returns(() => neverDisplayed); + vpMock.setup((x) => x.setAlwaysDrawn(moq.It.is((set) => (set.size === 0)))).verifiable(); + vpMock.setup((x) => x.setNeverDrawn(moq.It.is((set) => (set.size === 1 && set.has(key.id))))).verifiable(); + + await using(new VisibilityHandler(vpMock.object, () => { }), async (handler) => { + await handler.changeVisibility(key, false); + vpMock.verifyAll(); + }); + }); + + }); + + }); + + describe("visibility change callback", () => { + + describe("after `onViewChanged` callback", () => { + + it("doesn't call the callback if neither categories nor models visibility changed", () => { + const evt = new BeEvent(); + + const categories = new Set(["0x1", "0x2"]); + const categorySelectorMock = moq.Mock.ofType(); + categorySelectorMock.setup((x) => x.categories).returns(() => categories); + + const models = new Set(["0x3", "0x4"]); + const modelsSelectorMock = moq.Mock.ofType(); + modelsSelectorMock.setup((x) => x.models).returns(() => models); + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.modelSelector).returns(() => modelsSelectorMock.object); + viewStateMock.setup((x) => x.categorySelector).returns(() => categorySelectorMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object, onViewChanged: evt }); + const spy = sinon.spy(); + using(new VisibilityHandler(vpMock.object, spy), (_) => { + evt.raiseEvent(vpMock.object); + expect(spy).to.not.be.called; + }); + }); + + it("calls the callback if categories visibility changes", () => { + const evt = new BeEvent(); + + const categories = new Set(["0x1"]); + const categorySelectorMock = moq.Mock.ofType(); + categorySelectorMock.setup((x) => x.categories).returns(() => categories); + + const models = new Set(["0x3", "0x4"]); + const modelsSelectorMock = moq.Mock.ofType(); + modelsSelectorMock.setup((x) => x.models).returns(() => models); + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.modelSelector).returns(() => modelsSelectorMock.object); + viewStateMock.setup((x) => x.categorySelector).returns(() => categorySelectorMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object, onViewChanged: evt }); + const spy = sinon.spy(); + using(new VisibilityHandler(vpMock.object, spy), (_) => { + categories.clear(); + categories.add("0x2"); + evt.raiseEvent(vpMock.object); + expect(spy).to.be.calledOnce; + }); + }); + + it("calls the callback if models visibility changes", () => { + const evt = new BeEvent(); + + const categories = new Set(["0x1", "0x2"]); + const categorySelectorMock = moq.Mock.ofType(); + categorySelectorMock.setup((x) => x.categories).returns(() => categories); + + const models = new Set(["0x3"]); + const modelsSelectorMock = moq.Mock.ofType(); + modelsSelectorMock.setup((x) => x.models).returns(() => models); + + const viewStateMock = moq.Mock.ofType(); + viewStateMock.setup((x) => x.isSpatialView()).returns(() => true); + viewStateMock.setup((x) => x.modelSelector).returns(() => modelsSelectorMock.object); + viewStateMock.setup((x) => x.categorySelector).returns(() => categorySelectorMock.object); + + const vpMock = mockViewport({ viewState: viewStateMock.object, onViewChanged: evt }); + const spy = sinon.spy(); + using(new VisibilityHandler(vpMock.object, spy), (_) => { + models.delete("0x3"); + models.add("0x4"); + evt.raiseEvent(vpMock.object); + expect(spy).to.be.calledOnce; + }); + }); + + }); + + describe("after `onAlwaysDrawnChanged` callback", () => { + + it("calls the callback", () => { + const evt = new BeEvent(); + const vpMock = mockViewport({ onAlwaysDrawnChanged: evt }); + const spy = sinon.spy(); + using(new VisibilityHandler(vpMock.object, spy), (_) => { + evt.raiseEvent(vpMock.object); + expect(spy).to.be.calledOnce; + }); + }); + + }); + + describe("after `onNeverDrawnChanged` callback", () => { + + it("calls the callback", () => { + const evt = new BeEvent(); + const vpMock = mockViewport({ onNeverDrawnChanged: evt }); + const spy = sinon.spy(); + using(new VisibilityHandler(vpMock.object, spy), (_) => { + evt.raiseEvent(vpMock.object); + expect(spy).to.be.calledOnce; + }); + }); + + }); + + }); + + }); + + }); + + describe("#integration", () => { + + let imodel: IModelConnection; + const testIModelPath = "src/test/test-data/Properties_60InstancesWithUrl2.ibim"; + + before(() => { + initializePresentationTesting(); + }); + + after(() => { + terminatePresentationTesting(); + }); + + beforeEach(async () => { + imodel = await IModelConnection.openStandalone(testIModelPath); + }); + + afterEach(async () => { + await imodel.closeStandalone(); + }); + + it("shows correct hierarchy", async () => { + const hierarchyBuilder = new HierarchyBuilder(imodel); + const hierarchy = await hierarchyBuilder.createHierarchy(RULESET); + expect(hierarchy).to.matchSnapshot(); + }); + + it("renders component with real data and no active viewport", async () => { + const result = render(); + await waitForElement(() => result.getByText("DgnV8Bridge"), { timeout: 60 * 1000 }); + expect(result.container).to.matchSnapshot(); + }); + + }); + +}); diff --git a/ui/framework/src/test/messages/InputField.test.snap b/ui/framework/src/test/messages/InputField.test.snap index 2e1c65a..0102fcf 100644 --- a/ui/framework/src/test/messages/InputField.test.snap +++ b/ui/framework/src/test/messages/InputField.test.snap @@ -59,10 +59,10 @@ exports[`InputFieldMessage should render correctly 1`] = ` } > } - className="message-inputField-content" + className="uifw-message-inputField-content" label={
} /> diff --git a/ui/framework/src/test/navigationaids/CubeNavigationAid.test.snap b/ui/framework/src/test/navigationaids/CubeNavigationAid.test.snap index 31bd798..4a9c47b 100644 --- a/ui/framework/src/test/navigationaids/CubeNavigationAid.test.snap +++ b/ui/framework/src/test/navigationaids/CubeNavigationAid.test.snap @@ -2,7 +2,7 @@ exports[`CubeNavigationAid renders correctly 1`] = `
renders correctly 1`] = `
renders correctly 1`] = `
- - Test - - -`; - exports[`IconComponent should render correctly with ReactNode 1`] = ` Test diff --git a/ui/framework/src/test/syncui/SyncUiEventDispatcher.test.ts b/ui/framework/src/test/syncui/SyncUiEventDispatcher.test.ts index 98354da..bc217fe 100644 --- a/ui/framework/src/test/syncui/SyncUiEventDispatcher.test.ts +++ b/ui/framework/src/test/syncui/SyncUiEventDispatcher.test.ts @@ -58,7 +58,7 @@ describe("SyncUiEventDispatcher", () => { SyncUiEventDispatcher.onSyncUiEvent.removeListener(handleSyncUiEvent); }); - it("test timed sync event", () => { + it.skip("test timed sync event", () => { let callbackCalled = false; let callbackHasExpectedEventId = false; @@ -79,7 +79,7 @@ describe("SyncUiEventDispatcher", () => { SyncUiEventDispatcher.onSyncUiEvent.removeListener(handleSyncUiEvent); }); - it("test multiple event Id with a timed sync event", () => { + it.skip("test multiple event Id with a timed sync event", () => { let callbackCalled = false; let callbackHasExpectedEventIds = false; @@ -100,7 +100,7 @@ describe("SyncUiEventDispatcher", () => { SyncUiEventDispatcher.onSyncUiEvent.removeListener(handleSyncUiEvent); }); - it("test multiple event Id with a multiple dispatches", () => { + it.skip("test multiple event Id with a multiple dispatches", () => { let callbackCalled = false; let callbackHasExpectedEventIds = false; @@ -123,7 +123,7 @@ describe("SyncUiEventDispatcher", () => { SyncUiEventDispatcher.onSyncUiEvent.removeListener(handleSyncUiEvent); }); - it("Test event handlers", () => { + it.skip("Test event handlers", () => { const handleSyncUiEvent = sinon.spy(); SyncUiEventDispatcher.initialize(); diff --git a/ui/framework/src/ui-framework.ts b/ui/framework/src/ui-framework.ts index 4ff1e6b..bf5c9fa 100644 --- a/ui/framework/src/ui-framework.ts +++ b/ui/framework/src/ui-framework.ts @@ -32,6 +32,8 @@ export * from "./ui-framework/openimodel/ProjectDialog"; export * from "./ui-framework/openimodel/ProjectDropdown"; export * from "./ui-framework/openimodel/ProjectTabs"; +export * from "./ui-framework/imodel-components/visibility-tree/VisibilityTree"; + export * from "./ui-framework/overallcontent/OverallContent"; export * from "./ui-framework/overallcontent/state"; @@ -112,6 +114,8 @@ export * from "./ui-framework/statusfields/SnapMode"; export * from "./ui-framework/statusfields/PromptField"; export * from "./ui-framework/statusfields/SelectionInfo"; +export * from "./ui-framework/theme/ThemeManager"; + export * from "./ui-framework/tools/AnalysisAnimation"; export * from "./ui-framework/tools/AnalysisAnimationToolSettings"; export * from "./ui-framework/tools/ScheduleAnimation"; diff --git a/ui/framework/src/ui-framework/configurableui/ConfigurableUiContent.tsx b/ui/framework/src/ui-framework/configurableui/ConfigurableUiContent.tsx index 222db5a..ec1e1ea 100644 --- a/ui/framework/src/ui-framework/configurableui/ConfigurableUiContent.tsx +++ b/ui/framework/src/ui-framework/configurableui/ConfigurableUiContent.tsx @@ -6,14 +6,17 @@ import * as React from "react"; import { connect } from "react-redux"; + import { ModalDialogRenderer } from "../ModalDialogManager"; import { FrontstageComposer } from "../frontstage/FrontstageComposer"; import { ElementTooltip } from "../feedback/ElementTooltip"; -import PointerMessage from "../messages/Pointer"; +import { PointerMessage } from "../messages/Pointer"; import { UiFramework } from "../UiFramework"; import { KeyboardShortcutManager } from "../keyboardshortcut/KeyboardShortcut"; import { KeyboardShortcutMenu } from "../keyboardshortcut/KeyboardShortcutMenu"; +import "./configurableui.scss"; + /** Properties for [[ConfigurableUiContent]] */ export interface ConfigurableUiContentProps { placeholder: string; @@ -50,17 +53,8 @@ class ConfigurableUiContentClass extends React.Component +
{this.props.appBackstage} diff --git a/ui/framework/src/ui-framework/configurableui/ConfigurableUiManager.tsx b/ui/framework/src/ui-framework/configurableui/ConfigurableUiManager.tsx index 8af93d1..b57d8ae 100644 --- a/ui/framework/src/ui-framework/configurableui/ConfigurableUiManager.tsx +++ b/ui/framework/src/ui-framework/configurableui/ConfigurableUiManager.tsx @@ -52,8 +52,8 @@ export class ConfigurableUiManager { * [[ContentControl]], * [[NavigationAidControl]], * [[StatusBarWidgetControl]], - * [[ToolUiProvider]], - * [[WidgetControl]]. + * [[WidgetControl]] or + * ToolUiProvider. * @param classId the class id of the control to register * @param constructor the constructor of the control to register */ diff --git a/ui/framework/src/ui-framework/configurableui/configurableui.scss b/ui/framework/src/ui-framework/configurableui/configurableui.scss index 760e816..1587595 100644 --- a/ui/framework/src/ui-framework/configurableui/configurableui.scss +++ b/ui/framework/src/ui-framework/configurableui/configurableui.scss @@ -5,7 +5,22 @@ @import "@bentley/ui-core/lib/ui-core/style/index"; @import "@bentley/ui-ninezone/lib/ui-ninezone/footer/_variables"; -.unselectable { +#uifw-configurableui-wrapper { + position: relative; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 0; + overflow: hidden; +} + +#uifw-frontstage-composer { + width: 100%; + height: 100%; +} + +.uifw-unselectable { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; @@ -13,13 +28,13 @@ user-select: none; } -.centered { +.uifw-centered { display: flex; justify-content: center; align-items: center; } -.dragdrop-layer { +.uifw-dragdrop-layer { cursor: grabbing; position: fixed; pointer-events: none; @@ -30,18 +45,13 @@ width: 100%; } -.element-tooltip { +.uifw-element-tooltip { width: max-content; font-size: $uicore-font-size; pointer-events: none; } -.item-svg-icon { +.uifw-item-svg-icon { width: $icon-size; height: $icon-size; } - -#frontstage-composer { - width: 100%; - height: 100%; -} diff --git a/ui/framework/src/ui-framework/content/ContentLayout.scss b/ui/framework/src/ui-framework/content/ContentLayout.scss index aaef1c1..219b001 100644 --- a/ui/framework/src/ui-framework/content/ContentLayout.scss +++ b/ui/framework/src/ui-framework/content/ContentLayout.scss @@ -5,84 +5,87 @@ @import "@bentley/ui-core/lib/ui-core/style/index"; @import "@bentley/ui-ninezone/lib/ui-ninezone/footer/_variables"; -.ContentViewPane { - height: 100%; - width: 100%; - background: rgb(102, 100, 100); -} +#uifw-contentlayout-div { + position: absolute; + top: 0; + left: 0; + right: 0; -.Resizer { - background: rgb(180, 180, 180); - z-index: 1; - box-sizing: border-box; - background-clip: padding-box; -} + &.uifw-contentlayout-footer-mode { + bottom: $footer-height; + } -.Resizer:hover { - transition: all 2s ease; -} + &.uifw-contentlayout-open-mode { + bottom: 0; + } -.Resizer.horizontal { - height: 11px; - min-height: 11px; - margin: -3px 0; - border-top: 3px solid rgba(255, 255, 255, 0); - border-bottom: 3px solid rgba(255, 255, 255, 0); - cursor: ns-resize; - width: 100%; -} + .Resizer { + background: rgb(180, 180, 180); + z-index: 1; + box-sizing: border-box; + background-clip: padding-box; -.Resizer.vertical { - width: 11px; - min-width: 11px; - margin: 0 -3px; - border-left: 3px solid rgba(255, 255, 255, 0); - border-right: 3px solid rgba(255, 255, 255, 0); - cursor: ew-resize; -} + &:hover { + transition: all 2s ease; + } -.Resizer.disabled { - cursor: not-allowed; -} + &.horizontal { + height: 11px; + min-height: 11px; + margin: -3px 0; + border-top: 3px solid rgba(255, 255, 255, 0); + border-bottom: 3px solid rgba(255, 255, 255, 0); + cursor: ns-resize; + width: 100%; + } -.Resizer.disabled:hover { - border-color: transparent; -} + &.vertical { + width: 11px; + min-width: 11px; + margin: 0 -3px; + border-left: 3px solid rgba(255, 255, 255, 0); + border-right: 3px solid rgba(255, 255, 255, 0); + cursor: ew-resize; + } -#ContentLayoutDiv { - position: absolute; - top: 0; - left: 0; - right: 0; -} + &.disabled { + cursor: not-allowed; -.contentlayout-footer-mode { - bottom: $footer-height; -} + &:hover { + border-color: transparent; + } + } + } -.contentlayout-open-mode { - bottom: 0; -} + .uifw-contentlayout-wrapper { + position: relative; + width: 100%; + height: 100%; -.contentlayout-overlay-div { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border-style: solid; - border-width: 2px 0 0 0; - box-sizing: border-box; - pointer-events: none; - z-index: 5; // TODO - fix for Grid column resizers, which have a z-index of 2 + .uifw-contentlayout-overlay-div { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-style: solid; + border-width: 2px 0 0 0; + box-sizing: border-box; + pointer-events: none; + z-index: 5; // TODO - fix for Grid column resizers, which have a z-index of 2 - &.contentlayout-overlay-active { - border-color: $uicore-orange; - } + &.uifw-contentlayout-overlay-active { + border-color: $uicore-orange; + } - &.contentlayout-overlay-inactive { - border-color: transparent; + &.uifw-contentlayout-overlay-inactive { + border-color: transparent; + } + } } + .uifw-contentlayout-full-size { + width: 100%; + height: 100%; + } } - diff --git a/ui/framework/src/ui-framework/content/ContentLayout.tsx b/ui/framework/src/ui-framework/content/ContentLayout.tsx index 57d373f..ff264fe 100644 --- a/ui/framework/src/ui-framework/content/ContentLayout.tsx +++ b/ui/framework/src/ui-framework/content/ContentLayout.tsx @@ -76,18 +76,12 @@ class ContentWrapper extends React.Component {this.state.content} @@ -243,7 +237,7 @@ class SplitContainer extends React.Component { this._containerDiv = e; }} style={{ width: "100%", height: "100%" }} > +
{ this._containerDiv = e; }} className="uifw-contentlayout-full-size"> {this.props.contentA}
@@ -264,13 +258,8 @@ interface SingleContentProps { class SingleContentContainer extends React.Component { public render(): React.ReactNode { - const style: React.CSSProperties = { - width: "100%", - height: "100%", - }; - return ( -
+
{this.props.content}
); @@ -525,10 +514,10 @@ export class ContentLayout extends React.Component @@ -579,8 +568,9 @@ export class ContentLayoutManager { public static get activeLayout(): ContentLayoutDef | undefined { return this._activeLayout; } - public static setActiveLayout(layout: ContentLayoutDef | undefined) { - return this._activeLayout = layout; + public static setActiveLayout(contentLayout: ContentLayoutDef, contentGroup: ContentGroup) { + this._activeLayout = contentLayout; + FrontstageManager.onContentLayoutActivatedEvent.emit({ contentLayout, contentGroup }); } public static createSplit(fragmentDef: LayoutFragmentProps): LayoutSplit | undefined { diff --git a/ui/framework/src/ui-framework/dragdrop/DragDropLayerManager.tsx b/ui/framework/src/ui-framework/dragdrop/DragDropLayerManager.tsx index 12e6b32..5143da2 100644 --- a/ui/framework/src/ui-framework/dragdrop/DragDropLayerManager.tsx +++ b/ui/framework/src/ui-framework/dragdrop/DragDropLayerManager.tsx @@ -124,7 +124,7 @@ class DragDropLayerRendererComponent extends React.Component +
); diff --git a/ui/framework/src/ui-framework/feedback/ElementTooltip.tsx b/ui/framework/src/ui-framework/feedback/ElementTooltip.tsx index d601665..b00eef8 100644 --- a/ui/framework/src/ui-framework/feedback/ElementTooltip.tsx +++ b/ui/framework/src/ui-framework/feedback/ElementTooltip.tsx @@ -85,7 +85,7 @@ export class ElementTooltip extends React.Component { return (
+
{this.renderModalFrontstage()} {content} diff --git a/ui/framework/src/ui-framework/frontstage/FrontstageDef.tsx b/ui/framework/src/ui-framework/frontstage/FrontstageDef.tsx index 858ba3f..0a36b53 100644 --- a/ui/framework/src/ui-framework/frontstage/FrontstageDef.tsx +++ b/ui/framework/src/ui-framework/frontstage/FrontstageDef.tsx @@ -67,8 +67,7 @@ export class FrontstageDef { } const activeLayout = this.defaultLayout!; - ContentLayoutManager.setActiveLayout(activeLayout); - FrontstageManager.onContentLayoutActivatedEvent.emit({ contentLayout: activeLayout, contentGroup: this.contentGroup! }); + ContentLayoutManager.setActiveLayout(activeLayout, this.contentGroup); } /** Handles when the Frontstage becomes inactive */ diff --git a/ui/framework/src/ui-framework/frontstage/ModalFrontstage.scss b/ui/framework/src/ui-framework/frontstage/ModalFrontstage.scss index 70daaca..f445fd1 100644 --- a/ui/framework/src/ui-framework/frontstage/ModalFrontstage.scss +++ b/ui/framework/src/ui-framework/frontstage/ModalFrontstage.scss @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ @import "@bentley/ui-core/lib/ui-core/index"; - .modal-frontstage { + .uifw-modal-frontstage { height: 100%; width: 100%; position: absolute; @@ -21,9 +21,59 @@ align-items: stretch; @include uicore-z-index(backstage); + + .app-bar { + transition: transform .125s; + padding: 10px; + background: #16191b; + height: 60px; + transform: translateY(-100%); + + + .uicore-text-headline { + display: inline-block; + color: #FFF; + line-height: 60px; + vertical-align: top; + padding: 0 15px; + margin: 0; + font-size: 28px; + } + + .app-bar-right { + color: #FFF; + line-height: 60px; + vertical-align: center; + float: right; + margin-right: 20px; + } + + > :first-child { + display: inline-block; + border-radius: 0; // Turn off circular border from Back.scss in ui-ninezone + } + + } + + .modal-content { + overflow: hidden; + height: 100%; + } + + &.open { + visibility: visible; + pointer-events: unset; + transition: background .25s ease; + + .app-bar { + transform: translateY(0%); + transition: transform .125s ease; + } + } + } -.modal-frontstage-overlay { +.uifw-modal-frontstage-overlay { position: absolute; left: 0px; width: 100%; @@ -34,52 +84,3 @@ @include uicore-z-index(backstage-overlay); } - -.modal-frontstage.open { - // background: #f9f9f9; - // filter: opacity(100%); - visibility: visible; - pointer-events: unset; - transition: background .25s ease; -} - -.modal-frontstage .app-bar { - transition: transform .125s; - padding: 10px; - background: #16191b; - height: 60px; - transform: translateY(-100%); -} - -.modal-frontstage .modal-content { - overflow: hidden; - height: 100%; -} - -.modal-frontstage.open .app-bar { - transform: translateY(0%); - transition: transform .125s ease; -} - -.modal-frontstage .app-bar .uicore-text-headline { - display: inline-block; - color: #FFF; - line-height: 60px; - vertical-align: top; - padding: 0 15px; - margin: 0; - font-size: 28px; -} - -.modal-frontstage .app-bar .app-bar-right { - color: #FFF; - line-height: 60px; - vertical-align: center; - float: right; - margin-right: 20px; -} - -.modal-frontstage .app-bar > :first-child { - display: inline-block; - border-radius: 0; // Turn off circular border from Back.scss in ui-ninezone -} diff --git a/ui/framework/src/ui-framework/frontstage/ModalFrontstage.tsx b/ui/framework/src/ui-framework/frontstage/ModalFrontstage.tsx index 69f3918..db3ad28 100644 --- a/ui/framework/src/ui-framework/frontstage/ModalFrontstage.tsx +++ b/ui/framework/src/ui-framework/frontstage/ModalFrontstage.tsx @@ -39,7 +39,7 @@ export class ModalFrontstage extends React.Component { return ( <> -
+
{ {this.props.children}
-
+
); } diff --git a/ui/framework/src/ui-framework/imodel-components/visibility-tree/Hierarchy.json b/ui/framework/src/ui-framework/imodel-components/visibility-tree/Hierarchy.json new file mode 100644 index 0000000..ca00116 --- /dev/null +++ b/ui/framework/src/ui-framework/imodel-components/visibility-tree/Hierarchy.json @@ -0,0 +1,217 @@ +{ + "$schema": "../../../../../../presentation/common/Ruleset.schema.json", + "id": "ui-framework/VisibilityTree", + "supportedSchemas": { + "schemaNames": [ + "BisCore" + ] + }, + "rules": [ + { + "ruleType": "RootNodes", + "specifications": [ + { + "specType": "InstanceNodesOfSpecificClasses", + "classes": [ + { + "schemaName": "BisCore", + "classNames": [ + "Subject" + ] + } + ], + "instanceFilter": "this.Parent = NULL", + "arePolymorphic": false, + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"Subject\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "SubjectOwnsSubjects" + ] + }, + "requiredDirection": "Forward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "Subject" + ] + }, + "groupByClass": false, + "groupByLabel": false + }, + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "SubjectOwnsPartitionElements" + ] + }, + "requiredDirection": "Forward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "PhysicalPartition" + ] + }, + "hideNodesInHierarchy": true, + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"PhysicalPartition\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ModelModelsElement" + ] + }, + "requiredDirection": "Backward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "GeometricModel3d" + ] + }, + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"GeometricModel3d\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ModelContainsElements", + "GeometricElement3dIsInCategory" + ] + }, + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "SpatialCategory" + ] + }, + "skipRelatedLevel": 1, + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"SpatialCategory\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "GeometricElement3dIsInCategory" + ] + }, + "requiredDirection": "Backward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "GeometricElement3d" + ] + }, + "instanceFilter": "this.Model.Id = parent.parent.ECInstanceId ANDALSO this.Parent = NULL", + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ChildNodes", + "condition": "ParentNode.IsOfClass(\"GeometricElement3d\", \"BisCore\")", + "specifications": [ + { + "specType": "RelatedInstanceNodes", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ElementOwnsChildElements" + ] + }, + "requiredDirection": "Forward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "GeometricElement3d" + ] + }, + "groupByClass": false, + "groupByLabel": false + } + ] + }, + { + "ruleType": "ImageIdOverride", + "condition": "ThisNode.IsOfClass(\"Subject\", \"BisCore\")", + "imageIdExpression": "\"icon-archived\"" + }, + { + "ruleType": "ImageIdOverride", + "condition": "ThisNode.IsOfClass(\"Model\", \"BisCore\")", + "imageIdExpression": "\"icon-3d\"" + }, + { + "ruleType": "ImageIdOverride", + "condition": "ThisNode.IsOfClass(\"Category\", \"BisCore\")", + "imageIdExpression": "\"icon-layers\"" + }, + { + "ruleType": "ImageIdOverride", + "condition": "ThisNode.IsOfClass(\"Element\", \"BisCore\")", + "imageIdExpression": "\"icon-image\"" + }, + { + "ruleType": "Content", + "condition": "ContentDisplayType = \"SubjectModelsRequest\"", + "specifications": [ + { + "specType": "ContentRelatedInstances", + "relationships": { + "schemaName": "BisCore", + "classNames": [ + "ElementOwnsChildElements" + ] + }, + "requiredDirection": "Forward", + "relatedClasses": { + "schemaName": "BisCore", + "classNames": [ + "Subject", + "PhysicalPartition" + ] + }, + "isRecursive": true, + "instanceFilter": "this.IsOfClass(\"PhysicalPartition\", \"BisCore\") ANDALSO this.HasRelatedInstance(\"BisCore:ModelModelsElement\", \"Backward\", \"BisCore:GeometricModel3d\")" + } + ] + } + ] +} diff --git a/ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.scss b/ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.scss new file mode 100644 index 0000000..08b068c --- /dev/null +++ b/ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.scss @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ + +.fw-visibility-tree { + height: 100%; + width: 100%; + + .core-tree-node { + padding-left: 40px; + } + + .core-image-checkbox { + position: absolute; + left: 5px; + padding: 0; + margin: 0; + margin-right: 5px; + + .image { + margin-top: -4px; + } + } +} diff --git a/ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.tsx b/ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.tsx new file mode 100644 index 0000000..cf8070e --- /dev/null +++ b/ui/framework/src/ui-framework/imodel-components/visibility-tree/VisibilityTree.tsx @@ -0,0 +1,474 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. +* Licensed under the MIT License. See LICENSE.md in the project root for license terms. +*--------------------------------------------------------------------------------------------*/ +/** @module IModelComponents */ + +import * as React from "react"; +import { Id64String, IDisposable } from "@bentley/bentleyjs-core"; +import { IModelConnection, Viewport } from "@bentley/imodeljs-frontend"; +import { KeySet, isInstanceNodeKey, Ruleset, InstanceKey, RegisteredRuleset, Descriptor, ContentFlags } from "@bentley/presentation-common"; +import { Presentation } from "@bentley/presentation-frontend"; +import { IPresentationTreeDataProvider, PresentationTreeDataProvider, treeWithUnifiedSelection, ContentDataProvider } from "@bentley/presentation-components"; +import { + CheckBoxInfo, CheckBoxState, isPromiseLike, ImageCheckBox, NodeCheckboxRenderProps, +} from "@bentley/ui-core"; +import { Tree as BasicTree, SelectionMode, TreeNodeItem } from "@bentley/ui-components"; +import "./VisibilityTree.scss"; + +// tslint:disable-next-line:variable-name naming-convention +const Tree = treeWithUnifiedSelection(BasicTree); + +/** @internal */ +export const RULESET: Ruleset = require("./Hierarchy.json"); // tslint:disable-line: no-var-requires +let rulesetRegistered = 0; + +/** Props for [[VisibilityTree]] component */ +export interface VisibilityTreeProps { + /** An IModel to pull data from */ + imodel: IModelConnection; + /** Active view used to determine and control visibility */ + activeView?: Viewport; + /** Selection mode in the tree */ + selectionMode?: SelectionMode; + /** + * Custom data provider to use for testing + * @internal + */ + dataProvider?: IPresentationTreeDataProvider; + /** + * Custom visibility handler to use for testing + * @internal + */ + visibilityHandler?: VisibilityHandler; +} + +/** State for [[VisibilityTree]] component */ +export interface VisibilityTreeState { + prevProps: VisibilityTreeProps; + ruleset: Ruleset; + dataProvider: IPresentationTreeDataProvider; + checkboxInfo: (node: TreeNodeItem) => CheckBoxInfo | Promise; +} + +/** + * A tree component that shows a subject - model - category - element + * hierarchy along with checkboxes that represent and allow changing + * the display of those instances. + */ +export class VisibilityTree extends React.PureComponent { + + private _visibilityHandler?: VisibilityHandler; + private _rulesetRegistration?: RegisteredRuleset; + + public constructor(props: VisibilityTreeProps) { + super(props); + if (props.visibilityHandler) { + this._visibilityHandler = props.visibilityHandler; + this._visibilityHandler.onVisibilityChange = this.onVisibilityChange; + } else if (props.activeView) { + this._visibilityHandler = new VisibilityHandler(props.activeView, this.onVisibilityChange); + } + this.state = { + prevProps: props, + ruleset: RULESET, + dataProvider: props.dataProvider ? props.dataProvider : new PresentationTreeDataProvider(props.imodel, RULESET.id), + checkboxInfo: this.createCheckBoxInfoCallback(), + }; + this.registerRuleset(); // tslint:disable-line:no-floating-promises + } + + public static getDerivedStateFromProps(nextProps: VisibilityTreeProps, state: VisibilityTreeState) { + const base = { ...state, prevProps: nextProps }; + if (nextProps.imodel !== state.prevProps.imodel || nextProps.dataProvider !== state.prevProps.dataProvider) + return { ...base, dataProvider: nextProps.dataProvider ? nextProps.dataProvider : new PresentationTreeDataProvider(nextProps.imodel, RULESET.id) }; + return base; + } + + public componentDidUpdate(prevProps: VisibilityTreeProps, _prevState: VisibilityTreeState) { + if (!this.props.visibilityHandler && this.props.activeView !== prevProps.activeView) { + if (this._visibilityHandler) { + this._visibilityHandler.dispose(); + this._visibilityHandler = undefined; + } + if (this.props.activeView) + this._visibilityHandler = new VisibilityHandler(this.props.activeView, this.onVisibilityChange); + } + } + + public componentWillUnmount() { + if (this._visibilityHandler) { + this._visibilityHandler.dispose(); + this._visibilityHandler = undefined; + } + this.unregisterRuleset(); // tslint:disable-line:no-floating-promises + } + + private async registerRuleset() { + if (rulesetRegistered++ === 0 && !this.props.dataProvider) { + const result = await Presentation.presentation.rulesets().add(RULESET); + if (rulesetRegistered > 0) { + // still more than 0, save the registration + this._rulesetRegistration = result; + } else { + // registrations count already 0 - registration is no more relevant + await Presentation.presentation.rulesets().remove(result); + } + } + } + + private async unregisterRuleset() { + if (--rulesetRegistered === 0 && this._rulesetRegistration) { + await Presentation.presentation.rulesets().remove(this._rulesetRegistration); + } + } + + // tslint:disable-next-line: naming-convention + private onVisibilityChange = () => { + this.setState({ checkboxInfo: this.createCheckBoxInfoCallback() }); + } + + private createCheckBoxInfoCallback() { + const combine = (status: CheckBoxInfo) => ({ + isVisible: true, + ...status, + }); + return (node: TreeNodeItem): CheckBoxInfo | Promise => { + const status = this.getNodeCheckBoxInfo(node); + if (isPromiseLike(status)) + return status.then(combine); + return combine(status); + }; + } + + private getNodeCheckBoxInfo(node: TreeNodeItem): CheckBoxInfo | Promise { + if (!this._visibilityHandler) + return { isDisabled: true, state: CheckBoxState.Off }; + + const key = this.state.dataProvider.getNodeKey(node); + if (isInstanceNodeKey(key)) { + const result = this._visibilityHandler.isDisplayed(key.instanceKey); + if (isPromiseLike(result)) + return result.then((isDisplayed) => ({ state: isDisplayed ? CheckBoxState.On : CheckBoxState.Off })); + return { state: result ? CheckBoxState.On : CheckBoxState.Off }; + } + + return { isVisible: false }; + } + + // tslint:disable-next-line: naming-convention + private onCheckboxStateChange = async (node: TreeNodeItem, state: CheckBoxState) => { + if (!this._visibilityHandler) + return; + + const key = this.state.dataProvider.getNodeKey(node); + if (isInstanceNodeKey(key)) + await this._visibilityHandler.changeVisibility(key.instanceKey, state === CheckBoxState.On); + } + + // tslint:disable-next-line: naming-convention + private renderNodeCheckbox = (props: NodeCheckboxRenderProps): React.ReactNode => ( + + ) + + public render() { + return ( +
+ +
+ ); + } +} + +/** @internal */ +export class VisibilityHandler implements IDisposable { + + private _vp: Viewport; + private _onVisibilityChange: () => void; + private _subjectModelIdsCache = new Map(); + private _elementDisplayCache = new Map>(); + private _elementCategoryAndModelLoader: ElementCategoryAndModelRequestor; + private _currentSelectorsState: ViewSelectorsState; + + constructor(vp: Viewport, onVisibilityChange: () => void) { + this._vp = vp; + this._onVisibilityChange = onVisibilityChange; + this._elementCategoryAndModelLoader = new ElementCategoryAndModelRequestor(vp.iModel); + this._currentSelectorsState = new ViewSelectorsState(vp); + vp.onViewChanged.addListener(this.onViewChanged); + vp.onAlwaysDrawnChanged.addListener(this.onElementAlwaysDrawnChanged); + vp.onNeverDrawnChanged.addListener(this.onElementNeverDrawnChanged); + } + + public dispose() { + this._vp.onViewChanged.removeListener(this.onViewChanged); + this._vp.onAlwaysDrawnChanged.removeListener(this.onElementAlwaysDrawnChanged); + this._vp.onNeverDrawnChanged.removeListener(this.onElementNeverDrawnChanged); + } + + public get onVisibilityChange() { return this._onVisibilityChange; } + public set onVisibilityChange(callback: () => void) { this._onVisibilityChange = callback; } + + public isDisplayed(key: InstanceKey): boolean | Promise { + switch (key.className) { + case "BisCore:Subject": + return this.isSubjectDisplayed(key.id); + case "BisCore:PhysicalModel": + return this.isModelDisplayed(key.id); + case "BisCore:SpatialCategory": + case "BisCore:DrawingCategory": + return this.isCategoryDisplayed(key.id); + default: + return this.isElementDisplayed(key.id); + } + } + + private async isSubjectDisplayed(id: Id64String): Promise { + const modelIds = await this.getSubjectModelIds(id); + return modelIds.some((modelId) => this.isModelDisplayed(modelId)); + } + + private isModelDisplayed(id: Id64String): boolean { + return this._vp.view.isSpatialView() && this._vp.view.viewsModel(id); + } + + private isCategoryDisplayed(id: Id64String): boolean { + return this._vp.view.viewsCategory(id); + } + + private isElementDisplayed(id: Id64String): boolean | Promise { + let result = this._elementDisplayCache.get(id); + if (undefined === result) { + if (this._vp.neverDrawn !== undefined && this._vp.neverDrawn.has(id)) { + result = false; + } else { + result = this._elementCategoryAndModelLoader.getCategoryAndModelId(id).then((props) => { + if (!this._vp.view.viewsModel(props.modelId)) + return false; + if (this._vp.alwaysDrawn !== undefined && this._vp.alwaysDrawn.has(id)) + return true; + return this._vp.view.viewsCategory(props.categoryId); + }).then((isDisplayed: boolean) => { + this._elementDisplayCache.set(id, isDisplayed); // replace promise with an actual value + return isDisplayed; + }); + } + this._elementDisplayCache.set(id, result); + } + return result; + } + + public async changeVisibility(key: InstanceKey, on: boolean) { + switch (key.className) { + case "BisCore:Subject": + await this.changeSubjectState(key.id, on); + break; + case "BisCore:PhysicalModel": + this.changeModelState(key.id, on); + break; + case "BisCore:SpatialCategory": + case "BisCore:DrawingCategory": + this.changeCategoryState(key.id, on); + break; + default: + await this.changeElementState(key.id, on); + } + } + + private async changeSubjectState(id: Id64String, on: boolean) { + if (!this._vp.view.isSpatialView()) + return; + + const viewState = this._vp.view.clone(); + const modelIds = await this.getSubjectModelIds(id); + modelIds.forEach((modelId) => { + if (on) + viewState.addViewedModel(modelId); + else + viewState.removeViewedModel(modelId); + }); + this._vp.changeView(viewState); + } + + private changeModelState(id: Id64String, on: boolean) { + if (!this._vp.view.isSpatialView()) + return; + + const viewState = this._vp.view.clone(); + if (on) + viewState.addViewedModel(id); + else + viewState.removeViewedModel(id); + this._vp.changeView(viewState); + } + + private changeCategoryState(id: Id64String, on: boolean) { + const viewState = this._vp.view.clone(); + viewState.categorySelector.changeCategoryDisplay(id, on); + this._vp.changeView(viewState); + } + + private async changeElementState(id: Id64String, on: boolean) { + const currNeverDrawn = new Set(this._vp.neverDrawn ? this._vp.neverDrawn : []); + const currAlwaysDrawn = new Set(this._vp.alwaysDrawn ? this._vp.alwaysDrawn : []); + if (on) { + currNeverDrawn.delete(id); + currAlwaysDrawn.add(id); + } else { + currAlwaysDrawn.delete(id); + currNeverDrawn.add(id); + } + this._vp.setNeverDrawn(currNeverDrawn); + this._vp.setAlwaysDrawn(currAlwaysDrawn); + } + + // tslint:disable-next-line: naming-convention + private onViewChanged = (vp: Viewport) => { + // note: this event is fired way too much than we need - need to filter out + // cases where model or category state changes + const newSelectorsState = new ViewSelectorsState(vp); + if (newSelectorsState.equals(this._currentSelectorsState)) + return; + + this._currentSelectorsState = newSelectorsState; + this.clearDisplayCache(); + this._onVisibilityChange(); + } + + // tslint:disable-next-line: naming-convention + private onElementAlwaysDrawnChanged = () => { + this.clearDisplayCache(); + this._onVisibilityChange(); + } + + // tslint:disable-next-line: naming-convention + private onElementNeverDrawnChanged = () => { + this.clearDisplayCache(); + this._onVisibilityChange(); + } + + private clearDisplayCache() { + this._elementDisplayCache.clear(); + } + + private async getSubjectModelIds(subjectId: Id64String): Promise { + if (!this._subjectModelIdsCache.has(subjectId)) { + const modelIdsProvider = new SubjectModelIdsProvider(this._vp.iModel, subjectId); + this._subjectModelIdsCache.set(subjectId, await modelIdsProvider.getModelIds()); + } + return this._subjectModelIdsCache.get(subjectId)!; + } +} + +class SubjectModelIdsProvider extends ContentDataProvider { + constructor(imodel: IModelConnection, subjectId: Id64String) { + super(imodel, RULESET.id, "SubjectModelsRequest"); + this.keys = new KeySet([{ className: "BisCore:Subject", id: subjectId }]); + } + protected configureContentDescriptor(defaultDescriptor: Readonly): Descriptor { + const descriptor = Object.create(Descriptor.prototype); + return Object.assign(descriptor, defaultDescriptor, Descriptor, { + contentFlags: defaultDescriptor.contentFlags | ContentFlags.KeysOnly, + }); + } + public async getModelIds() { + const content = await this.getContent(); + return content ? content.contentSet.map((item) => item.primaryKeys[0].id) : []; + } +} + +abstract class DelayedRequestor { + protected _imodel: IModelConnection; + private _params = new Array(); + private _activeRequest?: Promise>; + public constructor(imodel: IModelConnection) { + this._imodel = imodel; + } + protected async getResult(param: TParam): Promise { + this._params.push(param); + const res = await this.aggregateResult; + return res.get(param)!; + } + protected abstract createResultIterator(params: TParam[]): AsyncIterableIterator<{ id: TParam } & TResult>; + private async createResult(): Promise> { + const map = new Map(); + if (this._params.length === 0) { + return map; + } + const iter = this.createResultIterator(this._params); + for await (const row of iter) { + map.set(row.id, row); + } + return map; + } + // tslint:disable-next-line: naming-convention + private get aggregateResult(): Promise> { + if (!this._activeRequest) { + this._activeRequest = new Promise((resolve: (result: Map) => void) => { + setTimeout(() => { + // tslint:disable-next-line: no-floating-promises + this.createResult().then(resolve); + this._params = []; + this._activeRequest = undefined; + }, 0); + }); + } + return this._activeRequest; + } +} + +interface CategoryAndModelId { + categoryId: Id64String; + modelId: Id64String; +} +class ElementCategoryAndModelRequestor extends DelayedRequestor { + protected createResultIterator(elementIds: Id64String[]): AsyncIterableIterator<{ id: Id64String, modelId: Id64String, categoryId: Id64String }> { + const q = ` + SELECT e.ECInstanceId id, e.Model.Id modelId, printf('0x%x', COALESCE(ge3d.Category.Id, ge2d.Category.Id)) categoryId + FROM [bis].Element e + LEFT JOIN [bis].[GeometricElement3d] ge3d ON ge3d.ECInstanceId = e.ECInstanceId + LEFT JOIN [bis].[GeometricElement2d] ge2d ON ge2d.ECInstanceId = e.ECInstanceId + WHERE e.ECInstanceId IN (${new Array(elementIds.length).fill("?").join(",")})`; + return this._imodel.query(q, elementIds); + } + public getCategoryAndModelId = async (elementId: Id64String) => this.getResult(elementId); +} + +class ViewSelectorsState { + public readonly categorySelector: Set; + public readonly modelSelector: Set; + + public constructor(vp?: Viewport) { + this.categorySelector = new Set(vp ? vp.view.categorySelector.categories : []); + this.modelSelector = new Set(vp && vp.view.isSpatialView() ? vp.view.modelSelector.models : []); + } + + public equals(other: ViewSelectorsState) { + return areSetsEqual(this.categorySelector, other.categorySelector) + && areSetsEqual(this.modelSelector, other.modelSelector); + } +} + +function areSetsEqual(lhs: Set, rhs: Set) { + if (lhs.size !== rhs.size) + return false; + for (const value of lhs) { + if (!rhs.has(value)) + return false; + } + return true; +} diff --git a/ui/framework/src/ui-framework/messages/InputField.scss b/ui/framework/src/ui-framework/messages/InputField.scss index f9c749f..57ebafc 100644 --- a/ui/framework/src/ui-framework/messages/InputField.scss +++ b/ui/framework/src/ui-framework/messages/InputField.scss @@ -2,12 +2,14 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ +@import "@bentley/ui-core/lib/ui-core/style/index"; -.nz-popup-message-inputField { +.uifw-popup-message-inputField { margin: 5px 0; transition: all 3s ease; } -.message-inputField-content { - background-color: #ffffff; +.uifw-message-inputField-content { + color: $buic-text-color; + background-color: $buic-background-control; } diff --git a/ui/framework/src/ui-framework/messages/InputField.tsx b/ui/framework/src/ui-framework/messages/InputField.tsx index 2d4e690..a074979 100644 --- a/ui/framework/src/ui-framework/messages/InputField.tsx +++ b/ui/framework/src/ui-framework/messages/InputField.tsx @@ -36,7 +36,7 @@ export class InputFieldMessage extends React.Component { */ private _getErrorMessage(): React.ReactNode { const className = classnames( - "nz-popup-message-inputField", + "uifw-popup-message-inputField", this.props.className); return ( @@ -46,14 +46,14 @@ export class InputFieldMessage extends React.Component { // TODO: dismiss onOutsideClick without immediately dismissing message children={ + } > diff --git a/ui/framework/src/ui-framework/messages/Pointer.scss b/ui/framework/src/ui-framework/messages/Pointer.scss index 00d02d2..482407c 100644 --- a/ui/framework/src/ui-framework/messages/Pointer.scss +++ b/ui/framework/src/ui-framework/messages/Pointer.scss @@ -5,30 +5,12 @@ @import "@bentley/ui-core/lib/ui-core/index"; -.nz-popup-message-pointer { - background-color: $buic-background-window; +.uifw-popup-message-pointer { + background-color: $buic-background-tooltip; padding: 5px 15px; - border-radius: 15px; - box-shadow: 1px 1px 5px 1px $buic-foreground-body-reverse; + border-radius: 5px; color: $buic-foreground-body; -} -// .tooltip { -// text-decoration:none; -// position:relative; -// } - -// .tooltip span { -// display:none; -// } - -// .tooltip:hover span { -// display:block; -// position:fixed; -// overflow:visible; -// } - -.nz-popup-message-pointer { .icon { margin: 0 5px 0 0; } diff --git a/ui/framework/src/ui-framework/messages/Pointer.tsx b/ui/framework/src/ui-framework/messages/Pointer.tsx index f9e48ac..87e6cff 100644 --- a/ui/framework/src/ui-framework/messages/Pointer.tsx +++ b/ui/framework/src/ui-framework/messages/Pointer.tsx @@ -104,7 +104,7 @@ export class PointerMessage extends React.Component } return ( -
+
{content}
diff --git a/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.scss b/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.scss index 404599c..08397a9 100644 --- a/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.scss +++ b/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.scss @@ -6,7 +6,7 @@ $sheets-modal-padding: 10px; -.sheets-scrollview { +.uifw-sheets-scrollview { width: 100%; height: 100%; overflow-y: auto; @@ -15,7 +15,7 @@ @include uicore-scrollbar(); } -.sheets-flex-container { +.uifw-sheets-flex-container { display: flex; flex-wrap: wrap; diff --git a/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.tsx b/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.tsx index a075e96..5f9d5ac 100644 --- a/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.tsx +++ b/ui/framework/src/ui-framework/navigationaids/SheetsModalFrontstage.tsx @@ -97,8 +97,8 @@ export class CardContainer extends React.Component { /** @hidden */ public render() { return ( -
-
+
+
{ this.props.cards.map((card: CardInfo, _index: number) => { let includeCard = true; diff --git a/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.scss b/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.scss index d5b92e8..e75cf4c 100644 --- a/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.scss +++ b/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -.standard-rotation-navigation { +.uifw-standard-rotation-navigation { > .expandable { .icon-button { height: 64px; diff --git a/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.tsx b/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.tsx index a2e28ce..9f8656a 100644 --- a/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.tsx +++ b/ui/framework/src/ui-framework/navigationaids/StandardRotationNavigationAid.tsx @@ -123,7 +123,7 @@ export class StandardRotationNavigationAid extends React.Component<{}, StandardR public render(): React.ReactNode { const className = classnames( - "standard-rotation-navigation", + "uifw-standard-rotation-navigation", ); return (
diff --git a/ui/framework/src/ui-framework/oidc/SignIn.scss b/ui/framework/src/ui-framework/oidc/SignIn.scss index 762b54f..c0133af 100644 --- a/ui/framework/src/ui-framework/oidc/SignIn.scss +++ b/ui/framework/src/ui-framework/oidc/SignIn.scss @@ -75,13 +75,13 @@ $signin-hyperlink-hover-color: $uicore-blue-5; /* sign in button */ .signin2 .signin-button { - @extend .uicore-buttons-primary; + @include uicore-buttons-primary; margin-top: auto; } /* sign in button disabled */ .signin2 .signin-button-disabled { - @extend .uicore-buttons-disabled; + @include uicore-buttons-disabled; } /* "Register" container */ diff --git a/ui/framework/src/ui-framework/oidc/SignOut.scss b/ui/framework/src/ui-framework/oidc/SignOut.scss index 1329669..8496115 100644 --- a/ui/framework/src/ui-framework/oidc/SignOut.scss +++ b/ui/framework/src/ui-framework/oidc/SignOut.scss @@ -75,7 +75,7 @@ $user-profile-circle-size: 60px; } > button { - @extend .uicore-buttons-primary; + @include uicore-buttons-primary; width: 75%; margin: auto 0 0 0; } diff --git a/ui/framework/src/ui-framework/openimodel/IModelList.scss b/ui/framework/src/ui-framework/openimodel/IModelList.scss index 5e2f711..c295fce 100644 --- a/ui/framework/src/ui-framework/openimodel/IModelList.scss +++ b/ui/framework/src/ui-framework/openimodel/IModelList.scss @@ -93,7 +93,7 @@ flex-direction: column; > button { - @extend .uicore-buttons-primary; + @include uicore-buttons-primary; margin-top: 1em; } } @@ -124,7 +124,7 @@ border-collapse: collapse; th, td { - border-bottom: 1px solid $uicore-tables-border-color; + border-bottom: 1px solid $buic-background-control-stroke; cursor: pointer; } @@ -134,7 +134,7 @@ padding: .75em; font-size: $uicore-font-size-leading; color: dimgray; - background: $uicore-tables-head-light; + background: $buic-background-table-header; } td { diff --git a/ui/framework/src/ui-framework/openimodel/IModelViewPicker.scss b/ui/framework/src/ui-framework/openimodel/IModelViewPicker.scss index ce14c16..74fd378 100644 --- a/ui/framework/src/ui-framework/openimodel/IModelViewPicker.scss +++ b/ui/framework/src/ui-framework/openimodel/IModelViewPicker.scss @@ -114,7 +114,7 @@ } */ > button { - @extend .uicore-buttons-blue; + @include uicore-buttons-blue; margin-left: auto; padding-left: 3em; padding-right: 5em; diff --git a/ui/framework/src/ui-framework/openimodel/PopupTest.scss b/ui/framework/src/ui-framework/openimodel/PopupTest.scss index 210cb26..b6bea8d 100644 --- a/ui/framework/src/ui-framework/openimodel/PopupTest.scss +++ b/ui/framework/src/ui-framework/openimodel/PopupTest.scss @@ -49,7 +49,7 @@ } button { - @extend .uicore-buttons-hollow; + @include uicore-buttons-hollow; width: 110px; } } diff --git a/ui/framework/src/ui-framework/openimodel/ProjectDialog.scss b/ui/framework/src/ui-framework/openimodel/ProjectDialog.scss index 5a19de0..7da857d 100644 --- a/ui/framework/src/ui-framework/openimodel/ProjectDialog.scss +++ b/ui/framework/src/ui-framework/openimodel/ProjectDialog.scss @@ -94,7 +94,7 @@ border-collapse: collapse; th, td { - border-bottom: 1px solid $uicore-tables-border-color; + border-bottom: 1px solid $buic-background-control-stroke; cursor: pointer; } @@ -104,7 +104,7 @@ padding: .75em; font-size: $uicore-font-size-leading; color: dimgray; - background: $uicore-tables-head-light; + background: $buic-background-table-header; } td { diff --git a/ui/framework/src/ui-framework/pickers/ListPicker.scss b/ui/framework/src/ui-framework/pickers/ListPicker.scss index 54ac31b..691f1ee 100644 --- a/ui/framework/src/ui-framework/pickers/ListPicker.scss +++ b/ui/framework/src/ui-framework/pickers/ListPicker.scss @@ -2,10 +2,9 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-ninezone/lib/ui-ninezone/_scrollbar"; @import "@bentley/ui-ninezone/lib/ui-ninezone/_typography"; @import "@bentley/ui-ninezone/lib/ui-ninezone/footer/_variables"; -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/index"; $no-shadow: none; $shadow: drop-shadow(0 1px 0 $buic-text-color-reverse); @@ -22,7 +21,7 @@ $item-height: 32px; } .ListPicker-column { - @include nz-scrollbar($buic-background-scrollbar); + @include uicore-scrollbar(); overflow: auto; height: 40vh; width: 30vh; @@ -82,9 +81,9 @@ $item-height: 32px; .ListPicker-item { $label-color: $buic-text-color; $pressed-label-color: $buic-foreground-activehover; - $hovered-label-color: $primary-tone; - $focused-label-color: $primary-tone; - $active-label-color: $primary-tone; + $hovered-label-color: $buic-foreground-primary-tone; + $focused-label-color: $buic-foreground-primary-tone; + $active-label-color: $buic-foreground-primary-tone; $item-height: 32px; $item-border-width: 2px; $active-tool-stripe-height: 22px; @@ -139,7 +138,7 @@ $item-height: 32px; &.is-focused { color: $focused-label-color; - border-color: $primary-base; + border-color: $buic-foreground-primary; border-width: $item-border-width; border-style: solid; @@ -176,9 +175,9 @@ $item-height: 32px; .ListPickerWidget-item { $label-color: $buic-text-color; $pressed-label-color: $buic-foreground-activehover; - $hovered-label-color: $primary-base; - $focused-label-color: $primary-base; - $active-label-color: $primary-base; + $hovered-label-color: $buic-foreground-primary; + $focused-label-color: $buic-foreground-primary; + $active-label-color: $buic-foreground-primary; $item-height: 32px; $item-border-width: 2px; $active-tool-stripe-height: 22px; @@ -199,7 +198,7 @@ $item-height: 32px; margin-right: $space-after-label; margin-left: $space-before-label; line-height: $item-height; - filter: drop-shadow(0 1px 0 $text-light); + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); &:after { display: block; @@ -218,29 +217,29 @@ $item-height: 32px; @include body1; > .icon, .label { - filter: drop-shadow(0 1px 0 $text-light); + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); } } &:active { - background: $primary-tone; + background: $buic-foreground-primary-tone; color: $pressed-label-color; > .icon, .label { - filter: drop-shadow(0 1px 0 $text-light); + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); } } &.is-focused { color: $focused-label-color; - border-color: $primary-base; + border-color: $buic-foreground-primary; border-width: $item-border-width; border-style: solid; @include body1; > .icon, .label { - filter: drop-shadow(0 1px 0 $text-light); + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); } } @@ -272,8 +271,8 @@ $item-height: 32px; white-space: nowrap; text-align: center; - color: $text-dark; - filter: drop-shadow(0 1px 0 $text-light); + color: $buic-text-color; + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); margin-bottom: 9px; margin-left: $horizontal-margin; margin-right: $horizontal-margin; diff --git a/ui/framework/src/ui-framework/pickers/ListPicker.tsx b/ui/framework/src/ui-framework/pickers/ListPicker.tsx index 52dbc84..4d07738 100644 --- a/ui/framework/src/ui-framework/pickers/ListPicker.tsx +++ b/ui/framework/src/ui-framework/pickers/ListPicker.tsx @@ -176,7 +176,7 @@ export class ListPickerBase extends React.Component : - {this.props.iconSpec}) : ; + {this.props.iconSpec}) : ; return ( li { @@ -18,13 +18,13 @@ } > li.active > a { - color: $primary-base; + color: $buic-foreground-primary; background-color: $buic-background-tab-active; border-bottom: none; } } -.widget-picker { +.uifw-widget-picker { background-color: $buic-background-widget; margin: 0 5px; position: relative; @@ -91,7 +91,7 @@ } } - .fw-modelselector { + .uifw-modelselector { width: 100%; height: calc(100% - 44px); display: flex; @@ -113,63 +113,6 @@ transform: translateX(0%); } - > .fw-modelselector-header { - display: flex; - align-items: center; - justify-content: flex-end; - margin-top: 10px; - margin-bottom: 8px; - font-size: 14px; - - > .fw-modelselector-back { - display: flex; - align-items: center; - margin-right: auto; - width: 100%; - color: $buic-text-color; - - &:hover { - color: $buic-foreground-primary; - cursor: pointer; - } - - > .ms-title { - margin-left: 5px; - font-size: 16px; - } - } - - > .options { - position: relative; - cursor: pointer; - - ul { - margin: 0; - padding: .5em 0; - font-size: $uicore-font-size; - list-style: none; - background-color: $uicore-white; - - > li { - display: flex; - align-items: center; - padding: .25em 1em; - color: $buic-text-color; - white-space: nowrap; - cursor: pointer; - - .icon { - margin-right: .5em; - } - - &:hover{ - background: #eee; - } - } - } - } - } - > .modelselector-toolbar { background-color: $buic-background-widget; @@ -202,7 +145,9 @@ .modelselector-content { height: 100%; + margin-bottom: 10px; + border: 1px solid #ccc; + overflow: hidden; } - } } diff --git a/ui/framework/src/ui-framework/pickers/ModelSelector.tsx b/ui/framework/src/ui-framework/pickers/ModelSelector.tsx index a20fe2f..9b0a372 100644 --- a/ui/framework/src/ui-framework/pickers/ModelSelector.tsx +++ b/ui/framework/src/ui-framework/pickers/ModelSelector.tsx @@ -8,19 +8,22 @@ import * as React from "react"; import * as _ from "lodash"; import classnames from "classnames"; import { ListItem, ListItemType } from "./ListPicker"; -import { IModelApp, Viewport, SpatialViewState, SpatialModelState, SelectedViewportChangedArgs, IModelConnection } from "@bentley/imodeljs-frontend"; -import { ModelQueryParams, ModelProps } from "@bentley/imodeljs-common"; -import { UiFramework } from "../UiFramework"; +import "./ModelSelector.scss"; import { ConfigurableUiManager } from "../configurableui/ConfigurableUiManager"; import { ConfigurableCreateInfo } from "../configurableui/ConfigurableUiControl"; +import { UiFramework } from "../UiFramework"; import { WidgetControl } from "../widgets/WidgetControl"; -import { Tree, FilteringInput, TreeNodeItem, PageOptions, DelayLoadedTreeNodeItem, TreeDataChangesListener, SelectionMode } from "@bentley/ui-components"; -import "./ModelSelector.scss"; -import { PresentationTreeDataProvider, treeWithFilteringSupport, IPresentationTreeDataProvider } from "@bentley/presentation-components"; -import { Presentation } from "@bentley/presentation-frontend"; -import { RegisteredRuleset, NodeKey, NodePathElement, isInstanceNodeKey } from "@bentley/presentation-common"; +import { ModelQueryParams, ModelProps } from "@bentley/imodeljs-common"; +import { BeEvent, Id64String } from "@bentley/bentleyjs-core"; +import { IModelApp, Viewport, ViewState, SpatialViewState, SpatialModelState, SelectedViewportChangedArgs, IModelConnection } from "@bentley/imodeljs-frontend"; +import { Tree, FilteringInput, TreeNodeItem, PageOptions, DelayLoadedTreeNodeItem, SelectionMode, TreeDataChangesListener } from "@bentley/ui-components"; import { CheckBoxState, LoadingSpinner, SpinnerSize } from "@bentley/ui-core"; -import { BeEvent } from "@bentley/bentleyjs-core"; +import { RegisteredRuleset, NodeKey, NodePathElement, isInstanceNodeKey } from "@bentley/presentation-common"; +import { treeWithFilteringSupport, PresentationTreeDataProvider, IPresentationTreeDataProvider } from "@bentley/presentation-components"; +import { Presentation } from "@bentley/presentation-frontend"; + +export type TreeNodePromise = Promise; +export type TreeNodeArrayPromise = Promise; /** Model Group used by [[ModelSelectorWidget]] */ export interface ModelGroup { @@ -32,20 +35,6 @@ export interface ModelGroup { setEnabled: (item: ListItem[], enabled: boolean) => void; } -/** Properties for the [[ModelSelectorWidget]] component */ -export interface ModelSelectorWidgetProps { - iModelConnection: IModelConnection; - allViewports?: boolean; -} - -/** State for the [[ModelSelectorWidget]] component */ -export interface ModelSelectorWidgetState { - expand: boolean; - activeGroup: ModelGroup; - showOptions: boolean; - activeTree: ModelSelectorTree; -} - /** Tree information used in the [[ModelSelectorWidget]] component */ export interface ModelSelectorTree { ruleset: RegisteredRuleset; @@ -112,7 +101,7 @@ class ModelSelectorDataProvider implements IPresentationTreeDataProvider { * @param pageOptions Paging options * @returns TreeNodeItems to be displayed */ - public getNodes = _.memoize(async (parentNode?: TreeNodeItem, pageOptions?: PageOptions): Promise => { + public getNodes = _.memoize(async (parentNode?: TreeNodeItem, pageOptions?: PageOptions): TreeNodeArrayPromise => { const nodes = await this._baseProvider.getNodes(parentNode, pageOptions); nodes.forEach((node: DelayLoadedTreeNodeItem) => { node.isCheckboxVisible = true; @@ -129,6 +118,22 @@ class ModelSelectorDataProvider implements IPresentationTreeDataProvider { }); } +/** Properties for the [[ModelSelectorWidget]] component */ +export interface ModelSelectorWidgetProps { + iModelConnection: IModelConnection; + allViewports?: boolean; + activeView?: Viewport; +} + +/** State for the [[ModelSelectorWidget]] component */ +export interface ModelSelectorWidgetState { + expand: boolean; + activeGroup: ModelGroup; + showOptions: boolean; + activeTree: ModelSelectorTree; + activeView: Viewport; +} + /** Model Selector [[WidgetControl]] */ export class ModelSelectorWidgetControl extends WidgetControl { /** Creates a ModelSelectorDemoWidget */ @@ -146,23 +151,48 @@ export class ModelSelectorWidget extends React.Component { + const newSelectorsState = new ViewSelectorsState(this.state.activeView); + if (newSelectorsState.equals(this._currentSelectorsState)) + return; + + this._currentSelectorsState = newSelectorsState; + this._setModelsFromViewState(); // tslint:disable-line:no-floating-promises + this._setCategoriesFromViewState(); // tslint:disable-line:no-floating-promises + } + + /** Initialize model and category states */ private _initialize = async () => { this._initModelState(); this._initCategoryState(); @@ -245,6 +275,7 @@ export class ModelSelectorWidget extends React.Component { if (!IModelApp.viewManager) return; - const vp = IModelApp.viewManager.getFirstOpenView(); - const view = vp!.view as SpatialViewState; + const view = this.state.activeView.view as SpatialViewState; const nodes = await this._modelTree!.dataProvider.getNodes(); - const promises: Array> = []; + const selectedNodePromises: TreeNodePromise[] = []; + const deselectedNodePromises: TreeNodePromise[] = []; this._groups[0].items.forEach((item: ListItem) => { if (view.modelSelector.models.has(item.key)) - promises.push(this._getNodeFromItem(item, nodes)); + selectedNodePromises.push(this._getNodeFromItem(item, nodes)); + else + deselectedNodePromises.push(this._getNodeFromItem(item, nodes)); }); - const selectedNodes: string[] = []; - await Promise.all(promises).then((enabledNodes: Array) => { - enabledNodes.forEach((node) => { - if (node) { - this.changeNodeItemSelection(node, true); - selectedNodes.push(node!.id); - } - }); - this.state.activeTree.dataProvider.onTreeNodeChanged.raiseEvent(enabledNodes); - }); + const selectedNodes = await this._enablePromisedNodes(selectedNodePromises); + this._disablePromisedNodes(deselectedNodePromises); // tslint:disable-line:no-floating-promises this.setState({ activeTree: { @@ -288,31 +313,25 @@ export class ModelSelectorWidget extends React.Component { if (!IModelApp.viewManager) return; - const vp = IModelApp.viewManager.getFirstOpenView(); - const view = vp!.view as SpatialViewState; + const view = this.state.activeView.view as SpatialViewState; const nodes = await this._categoryTree!.dataProvider.getNodes(); - const promises: Array> = []; + const selectedNodePromises: TreeNodePromise[] = []; + const deselectedNodePromises: TreeNodePromise[] = []; this._groups[0].items.forEach((item: ListItem) => { if (view.categorySelector.categories.has(item.key)) - promises.push(this._getNodeFromItem(item, nodes)); + selectedNodePromises.push(this._getNodeFromItem(item, nodes)); + else + deselectedNodePromises.push(this._getNodeFromItem(item, nodes)); }); - const selectedNodes: string[] = []; - await Promise.all(promises).then((enabledNodes: Array) => { - enabledNodes.forEach((node) => { - if (node) { - this.changeNodeItemSelection(node, true); - selectedNodes.push(node!.id); - } - }); - this.state.activeTree.dataProvider.onTreeNodeChanged.raiseEvent(enabledNodes); - }); + const selectedNodes = await this._enablePromisedNodes(selectedNodePromises); + this._disablePromisedNodes(deselectedNodePromises); // tslint:disable-line:no-floating-promises this.setState({ activeTree: { @@ -322,6 +341,40 @@ export class ModelSelectorWidget extends React.Component { + await Promise.all(deselectedNodePromises).then((enabledNodes: Array) => { + const childrenPromises: TreeNodeArrayPromise[] = []; + enabledNodes.forEach((node) => { + childrenPromises.push(this.state.activeTree.dataProvider.getNodes(node)); + if (node) { + this.changeNodeItemSelection(node, false); + } + }); + }); + } + + /** + * Fetch selected nodes and enable them. + * @param selectedNodePromises Promises to execute in order to fetch selected nodes + * @returns Promise of selectedNode IDs + */ + private _enablePromisedNodes = async (selectedNodePromises: TreeNodePromise[]): Promise => { + const selectedNodes: string[] = []; + await Promise.all(selectedNodePromises).then((enabledNodes: Array) => { + enabledNodes.forEach((node) => { + if (node) { + this.changeNodeItemSelection(node, true); + selectedNodes.push(node.id); + } + }); + }); + return selectedNodes; + } + /** * Sets provided ruleset as new ruleset for tree. * @param activeRuleset Ruleset to provide to tree. @@ -330,9 +383,7 @@ export class ModelSelectorWidget extends React.Component { this._groups = []; this._groups.push(this._getDefaultModelGroup()); this._groups.push(this._getDefaultCategoryGroup()); } + /** Initializes state to default values */ + private _initState = () => { + const view = this.props.activeView! || IModelApp.viewManager.getFirstOpenView()!; + this.state = { expand: false, activeGroup: this._groups[0], showOptions: false, activeTree: this._modelTree!, activeView: view }; + } + /** * Creates initial model group * @returns Initialized model group @@ -463,23 +520,13 @@ export class ModelSelectorWidget extends React.Component { - const selectedNodes = Array(); - const promises = Array>(); + const promises: TreeNodePromise[] = []; for (const item of items) { if (item.enabled) promises.push(this._getNodeFromItem(item, nodes)); } - await Promise.all(promises).then((enabledNodes) => { - enabledNodes.forEach((node) => { - if (node) { - this.changeNodeItemSelection(node, true); - selectedNodes.push(node.id); - } - }); - this.state.activeTree.dataProvider.onTreeNodeChanged.raiseEvent(enabledNodes); - }); - + const selectedNodes = await this._enablePromisedNodes(promises); return selectedNodes; } @@ -499,7 +546,6 @@ export class ModelSelectorWidget extends React.Component { this.state.activeGroup.items.forEach((item) => { item.enabled = enable; - // this.state.activeGroup.setEnabled(item, enable); }); this.state.activeGroup.setEnabled(this.state.activeGroup.items, enable); this.state.activeGroup.updateState(); @@ -531,11 +577,11 @@ export class ModelSelectorWidget extends React.Component { const parents: TreeNodeItem[] = await this.state.activeTree!.dataProvider.getNodes(); - const promises: Array> = []; + const promises: TreeNodeArrayPromise[] = []; parents.forEach((parent) => { this.changeNodeItemSelection(parent, false); - promises.push(this.state.activeTree!.dataProvider.getNodes(parent)); + promises.push(this.state.activeTree.dataProvider.getNodes(parent)); }); this.state.activeTree!.dataProvider.onTreeNodeChanged.raiseEvent(parents); @@ -550,7 +596,6 @@ export class ModelSelectorWidget extends React.Component => { const parents: TreeNodeItem[] = await this.state.activeTree!.dataProvider.getNodes(); const nodeIds: string[] = []; - const promises: Array> = []; + const promises: TreeNodeArrayPromise[] = []; parents.forEach((parent) => { if (!nodeIds.includes(parent.id)) { @@ -624,7 +669,7 @@ export class ModelSelectorWidget extends React.Component => { const parents: TreeNodeItem[] = await this.state.activeTree!.dataProvider.getNodes(); const nodeIds: string[] = []; - const promises: Array> = []; + const promises: TreeNodeArrayPromise[] = []; parents.forEach((parent) => { if (parent.checkBoxState === CheckBoxState.On) { @@ -1063,7 +1108,7 @@ export class ModelSelectorWidget extends React.Component +
{!this.state.activeTree && } @@ -1081,7 +1126,7 @@ export class ModelSelectorWidget extends React.Component -
    +
      { this._groups.map((group: any) => ( @@ -1099,7 +1144,7 @@ export class ModelSelectorWidget extends React.Component { - const listClassName = classnames("fw-modelselector", this.state.expand && "show"); + const listClassName = classnames("uifw-modelselector", this.state.expand && "show"); return (
      {this._getToolbar()} @@ -1164,6 +1209,37 @@ export class ModelSelectorWidget extends React.Component; + public readonly modelSelector: Set; + + public constructor(vp?: Viewport) { + this.categorySelector = new Set(vp ? vp.view.categorySelector.categories : []); + this.modelSelector = vp ? getViewedModelIds(vp.view) : new Set(); + } + + public equals(other: ViewSelectorsState) { + return areSetsEqual(this.categorySelector, other.categorySelector) + && areSetsEqual(this.modelSelector, other.modelSelector); + } +} + +function getViewedModelIds(viewState: ViewState): Set { + const ids = new Set(); + viewState.forEachModel((m) => ids.add(m.id)); + return ids; +} + +function areSetsEqual(lhs: Set, rhs: Set) { + if (lhs.size !== rhs.size) + return false; + for (const value of lhs) { + if (!rhs.has(value)) + return false; + } + return true; +} + // tslint:disable-next-line:variable-name const CategoryModelTree = treeWithFilteringSupport(Tree); diff --git a/ui/framework/src/ui-framework/settings/Settings.scss b/ui/framework/src/ui-framework/settings/Settings.scss index 736f26c..26560ab 100644 --- a/ui/framework/src/ui-framework/settings/Settings.scss +++ b/ui/framework/src/ui-framework/settings/Settings.scss @@ -7,7 +7,7 @@ $settings-leftpanel-width: 225px; $settings-rightpanel-width: 200px; -.settings { +.uifw-settings { background: $buic-background-dialog; color: $buic-text-color; width: auto; @@ -23,7 +23,7 @@ $settings-rightpanel-width: 200px; flex-direction: column; } -.settings-item { +.uifw-settings-item { display: flex; >.panel { diff --git a/ui/framework/src/ui-framework/settings/Settings.tsx b/ui/framework/src/ui-framework/settings/Settings.tsx index 2a44c09..9e2f073 100644 --- a/ui/framework/src/ui-framework/settings/Settings.tsx +++ b/ui/framework/src/ui-framework/settings/Settings.tsx @@ -53,8 +53,8 @@ class SettingsPageComponent extends React.Component { const isLightTheme = this._isLightTheme(); const _theme: string = UiFramework.i18n.translate((isLightTheme) ? "UiFramework:settingsStage.light" : "UiFramework:settingsStage.dark"); return ( -
      -
      +
      +
      {this._themeTitle} {this._themeDescription} diff --git a/ui/framework/src/ui-framework/shared/IconComponent.tsx b/ui/framework/src/ui-framework/shared/IconComponent.tsx index 2f33236..2269702 100644 --- a/ui/framework/src/ui-framework/shared/IconComponent.tsx +++ b/ui/framework/src/ui-framework/shared/IconComponent.tsx @@ -25,7 +25,7 @@ export const Icon: React.FunctionComponent = (props) => { return (); } return ( - + {props.iconSpec} ); diff --git a/ui/framework/src/ui-framework/statusfields/ActivityCenter.tsx b/ui/framework/src/ui-framework/statusfields/ActivityCenter.tsx index d21f968..06435a8 100644 --- a/ui/framework/src/ui-framework/statusfields/ActivityCenter.tsx +++ b/ui/framework/src/ui-framework/statusfields/ActivityCenter.tsx @@ -6,8 +6,6 @@ import * as React from "react"; -import "../configurableui/configurableui.scss"; - import { StatusBarFieldId, IStatusBar } from "../widgets/StatusBarWidgetControl"; import { Status, MessageLayout, Progress } from "@bentley/ui-ninezone"; @@ -78,7 +76,7 @@ export class ActivityCenterField extends React.Component +

      " + details.detailedMessage; + const message = details.briefMessage; tabRows.push( } - content={} + content={ + <> + + {details.detailedMessage && + <> +
      + + + } + + } />, ); } diff --git a/ui/framework/src/ui-framework/widgets/StatusBar.tsx b/ui/framework/src/ui-framework/widgets/StatusBar.tsx index 733d76c..042ce0a 100644 --- a/ui/framework/src/ui-framework/widgets/StatusBar.tsx +++ b/ui/framework/src/ui-framework/widgets/StatusBar.tsx @@ -14,7 +14,7 @@ import { } from "@bentley/ui-ninezone"; import { NotifyMessageDetails, OutputMessageType } from "@bentley/imodeljs-frontend"; -import { MessageContainer, MessageSeverity, Button, ButtonType } from "@bentley/ui-core"; +import { MessageContainer, MessageSeverity, Button, ButtonType, SmallText } from "@bentley/ui-core"; import { MessageManager, MessageAddedEventArgs, ActivityMessageEventArgs } from "../messages/MessageManager"; import { UiFramework } from "../UiFramework"; @@ -278,7 +278,7 @@ export class StatusBar extends React.Component i { (messageDetails && messageDetails.showPercentInMessage) && -
      {this.state.activityMessageInfo!.percentage + percentComplete}
      + {this.state.activityMessageInfo!.percentage + percentComplete} }
      } diff --git a/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.scss b/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.scss index 34c5347..404a3be 100644 --- a/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.scss +++ b/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.scss @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ @import "@bentley/ui-core/lib/ui-core/index"; -.toolSettingsContainer { +.uifw-toolSettingsContainer { font-family: $uicore-font-family; font-size: $uicore-font-size; } -span.toolSettings-label-disabled { - color: $uicore-gray; +span.uifw-toolSettings-label-disabled { + color: $buic-text-color-disabled; } \ No newline at end of file diff --git a/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.tsx b/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.tsx index 7e9b62b..a21e863 100644 --- a/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.tsx +++ b/ui/framework/src/ui-framework/zones/toolsettings/DefaultToolSettingsProvider.tsx @@ -188,7 +188,7 @@ export class DefaultToolSettings extends React.Component { if (col.type === ColumnType.Label) { const labelData = this.state.labelMap.get(col.name); if (labelData) { - const className = labelData.isDisabled ? "toolSettings-label-disabled" : undefined; + const className = labelData.isDisabled ? "uifw-toolSettings-label-disabled" : undefined; return ( // return a containing a label {labelData.label}: @@ -249,7 +249,7 @@ export class DefaultToolSettings extends React.Component { }; return ( -
      +
      {rows.map((row, index) => this.getRow(row, index))}
      ); diff --git a/ui/ninezone/CHANGELOG.json b/ui/ninezone/CHANGELOG.json index a185c71..dd38238 100644 --- a/ui/ninezone/CHANGELOG.json +++ b/ui/ninezone/CHANGELOG.json @@ -1,6 +1,24 @@ { "name": "@bentley/ui-ninezone", "entries": [ + { + "version": "0.190.0", + "tag": "@bentley/ui-ninezone_v0.190.0", + "date": "Thu, 14 Mar 2019 14:26:49 GMT", + "comments": { + "none": [ + { + "comment": "Added 'uifw-' to ContentLayout CSS class names and others. Fixed Status Bar separators." + }, + { + "comment": "Added 'uifw-' prefix to most ui-framework CSS class names" + }, + { + "comment": "Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS" + } + ] + } + }, { "version": "0.189.0", "tag": "@bentley/ui-ninezone_v0.189.0", diff --git a/ui/ninezone/CHANGELOG.md b/ui/ninezone/CHANGELOG.md index 799d03f..ea88ea0 100644 --- a/ui/ninezone/CHANGELOG.md +++ b/ui/ninezone/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log - @bentley/ui-ninezone -This log was last generated on Wed, 06 Mar 2019 15:41:22 GMT and should not be manually modified. +This log was last generated on Thu, 14 Mar 2019 14:26:49 GMT and should not be manually modified. + +## 0.190.0 +Thu, 14 Mar 2019 14:26:49 GMT + +### Updates + +- Added 'uifw-' to ContentLayout CSS class names and others. Fixed Status Bar separators. +- Added 'uifw-' prefix to most ui-framework CSS class names +- Cleaned up index.scss for variables & mixins in ui-core and added classes.scss that generates CSS ## 0.189.0 Wed, 06 Mar 2019 15:41:22 GMT diff --git a/ui/ninezone/demo/src/pages/Home/Home.scss b/ui/ninezone/demo/src/pages/Home/Home.scss index 84cbef8..786d1b4 100644 --- a/ui/ninezone/demo/src/pages/Home/Home.scss +++ b/ui/ninezone/demo/src/pages/Home/Home.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nzdemo-pages-home-home { $menu-width: 200px; @@ -12,17 +12,17 @@ color: #333; a { - color: $primary-base; + color: $buic-foreground-primary; text-decoration: none; } a:hover { - color: $primary-hover; + color: $buic-row-hover; text-decoration: underline; } a:active { - color: $primary-tone; + color: $buic-foreground-primary-tone; } .sidebar { diff --git a/ui/ninezone/demo/src/pages/Zones.scss b/ui/ninezone/demo/src/pages/Zones.scss index 7f4bf83..296c950 100644 --- a/ui/ninezone/demo/src/pages/Zones.scss +++ b/ui/ninezone/demo/src/pages/Zones.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_customTheme"; .nzdemo-pages-zones { @@ -10,19 +10,19 @@ font-size: 14px; .nzdemo-success { - color: $accent-base; + color: $buic-foreground-success; } .nzdemo-progress { - color: $primary-base; + color: $buic-foreground-primary; } .nzdemo-error { - color: $alert-base; + color: $buic-foreground-alert; } .nzdemo-warning { - color: rgb(241, 39, 18); + color: $buic-foreground-warning; } .nzdemo-favorite { diff --git a/ui/ninezone/package.json b/ui/ninezone/package.json index 784fa6a..bd43b8e 100644 --- a/ui/ninezone/package.json +++ b/ui/ninezone/package.json @@ -1,6 +1,6 @@ { "name": "@bentley/ui-ninezone", - "version": "0.189.0", + "version": "0.190.0", "description": "iModel.js Nine-zone React UI components", "license": "MIT", "repository": { @@ -53,17 +53,17 @@ "url": "http://www.bentley.com" }, "peerDependencies": { - "@bentley/ui-core": "0.189.0" + "@bentley/ui-core": "0.190.0" }, "//devDependencies": [ "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install", "NOTE: All tools used by scripts in this package must be listed as devDependencies" ], "devDependencies": { - "@bentley/build-tools": "0.189.0", + "@bentley/build-tools": "0.190.0", "@bentley/icons-generic-webfont": "^0.0.9", - "@bentley/ui-core": "0.189.0", - "@bentley/webpack-tools": "0.189.0", + "@bentley/ui-core": "0.190.0", + "@bentley/webpack-tools": "0.190.0", "@types/chai": "^4.1.4", "@types/chai-as-promised": "^7", "@types/chai-jest-snapshot": "^1.3.0", diff --git a/ui/ninezone/src/test/zones/state/layout/Layouts.test.ts b/ui/ninezone/src/test/zones/state/layout/Layouts.test.ts index cd20ebd..83feb34 100644 --- a/ui/ninezone/src/test/zones/state/layout/Layouts.test.ts +++ b/ui/ninezone/src/test/zones/state/layout/Layouts.test.ts @@ -45,7 +45,7 @@ describe("WidgetZoneLayout", () => { const nineZoneMock = Moq.Mock.ofType(); const nineZoneRootMock = Moq.Mock.ofType(); nineZoneRootMock.setup((x) => x.isInFooterMode).returns(() => true); - nineZoneRootMock.setup((x) => x.bounds).returns(() => new Rectangle(0, 0, 999, 333)); + nineZoneRootMock.setup((x) => x.bounds).returns(() => new Rectangle(0, 0, 999, 325)); nineZoneMock.setup((x) => x.root).returns(() => nineZoneRootMock.object); zoneMock.setup((x) => x.nineZone).returns(() => nineZoneMock.object); zoneMock.setup((x) => x.cell).returns(() => new Cell(0, 2)); diff --git a/ui/ninezone/src/ui-ninezone/_scrollbar.scss b/ui/ninezone/src/ui-ninezone/_scrollbar.scss index cfca932..e30ef27 100644 --- a/ui/ninezone/src/ui-ninezone/_scrollbar.scss +++ b/ui/ninezone/src/ui-ninezone/_scrollbar.scss @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ @import "@bentley/ui-core/lib/ui-core/_scrollbar"; -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; $nz-scrollbar-width: 10px; $nz-scrollbar-padding: 2px; diff --git a/ui/ninezone/src/ui-ninezone/backstage/_variables.scss b/ui/ninezone/src/ui-ninezone/backstage/_variables.scss index df9de00..f3f6876 100644 --- a/ui/ninezone/src/ui-ninezone/backstage/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/backstage/_variables.scss @@ -26,5 +26,5 @@ $nz-backstage-item-color: $buic-text-color; $nz-backstage-item-color-disabled: $buic-text-color-disabled; $nz-backstage-item-active-background: $buic-background-tab-inactive; $nz-backstage-item-hover-background: $buic-row-hover; -$nz-backstage-highlight-bar-background: $primary-base; +$nz-backstage-highlight-bar-background: $buic-foreground-primary; $nz-backstage-divider-color: $buic-background-divider; diff --git a/ui/ninezone/src/ui-ninezone/footer/Footer.scss b/ui/ninezone/src/ui-ninezone/footer/Footer.scss index d180dd1..2e6502e 100644 --- a/ui/ninezone/src/ui-ninezone/footer/Footer.scss +++ b/ui/ninezone/src/ui-ninezone/footer/Footer.scss @@ -2,10 +2,29 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "@bentley/ui-core/lib/ui-core/_z-index"; @import "_variables"; +@mixin nz-footer-separator { + >*:not(:last-child) { + $separator-width: 1px; + + position: relative; + + &:after { + content: ''; + width: $separator-width; + height: calc(100% - #{$nz-footer-vertical-padding-height}); + top: $nz-footer-vertical-padding; + background-color: $buic-foreground-disabled; + filter: drop-shadow(1px 0 $buic-foreground-body-reverse); + position: absolute; + right: 0; + } + } +} + .nz-footer-footer { background-color: $buic-background-statusbar; border-width: 0; @@ -29,21 +48,7 @@ display: flex; flex-direction: row; - >*:not(:last-child) { - $separator-width: 1px; - - position: relative; - - &:after { - content: ''; - width: $separator-width; - height: 100%; - background-color: $buic-background-divider; - border-right: $separator-width solid #ffffff; - position: absolute; - right: 0; - } - } + @include nz-footer-separator; } &.nz-widget-mode { @@ -62,22 +67,30 @@ display: flex; flex-direction: row; justify-content: space-between; + + @include nz-footer-separator; } .nz-statusbar-left { display: flex; flex-direction: row; justify-content: flex-start; + + @include nz-footer-separator; } .nz-statusbar-center { display: flex; flex-direction: row; justify-content: center; + + @include nz-footer-separator; } .nz-statusbar-right { display: flex; flex-direction: row; justify-content: flex-end; + + @include nz-footer-separator; } \ No newline at end of file diff --git a/ui/ninezone/src/ui-ninezone/footer/StatusBarText.scss b/ui/ninezone/src/ui-ninezone/footer/StatusBarText.scss index a3340e3..dc49459 100644 --- a/ui/ninezone/src/ui-ninezone/footer/StatusBarText.scss +++ b/ui/ninezone/src/ui-ninezone/footer/StatusBarText.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; .nz-footer-text { diff --git a/ui/ninezone/src/ui-ninezone/footer/_variables.scss b/ui/ninezone/src/ui-ninezone/footer/_variables.scss index 529549a..b04c87e 100644 --- a/ui/ninezone/src/ui-ninezone/footer/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/footer/_variables.scss @@ -2,9 +2,9 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; -$footer-height: 48px; +$footer-height: 40px; // Must match FOOTER_HEIGHT in zones\state\layout\Root.ts $text-font-size: 14px; $text-font-size-medium: 12px; @@ -50,5 +50,7 @@ $nz-footer-prompt-width-small: 8em; $nz-footer-open-horizontal-padding-small: 2px; $nz-footer-open-prompt-width-small: 10em; +$nz-footer-selectioncount-width: 4em; -$nz-footer-selectioncount-width: 4em; \ No newline at end of file +$nz-footer-vertical-padding: 3px; +$nz-footer-vertical-padding-height: $nz-footer-vertical-padding * 2; diff --git a/ui/ninezone/src/ui-ninezone/footer/message-center/Content.scss b/ui/ninezone/src/ui-ninezone/footer/message-center/Content.scss index 0aefc6b..65d81b8 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message-center/Content.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message-center/Content.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_scrollbar"; @import "../_variables"; @import "_variables"; @@ -24,10 +24,10 @@ min-height: $nz-message-horizontal-padding; overflow: auto; - @include nz-scrollbar($color: $buic-background-scrollbar); + @include nz-scrollbar(); > *:not(:first-child) { - border-top: 1px solid $background-4; + border-top: 1px solid $buic-background-4; } } @@ -43,7 +43,7 @@ &:after { content: ''; display: block; - background: linear-gradient(transparent, $background-2); + background: linear-gradient(transparent, $buic-background-2); width: 100%; height: 100%; } diff --git a/ui/ninezone/src/ui-ninezone/footer/message-center/Message.scss b/ui/ninezone/src/ui-ninezone/footer/message-center/Message.scss index b7b5f0d..52ed0f5 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message-center/Message.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message-center/Message.scss @@ -2,8 +2,9 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; +@import "../variables"; .nz-footer-messageCenter-message { $vertical-padding: $nz-message-horizontal-padding; @@ -20,7 +21,8 @@ grid-gap: 12px; grid-auto-flow: column; align-items: center; - grid-template-columns: minmax(0, auto) 1fr; + grid-template-columns: minmax(20px, auto) 1fr; line-height: 16px; - color: $text-dark; + color: $buic-text-color; + font-size: $text-font-size; } diff --git a/ui/ninezone/src/ui-ninezone/footer/message-center/MessageCenter.scss b/ui/ninezone/src/ui-ninezone/footer/message-center/MessageCenter.scss index 1faaef6..81a257a 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message-center/MessageCenter.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message-center/MessageCenter.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "@bentley/ui-core/lib/ui-core/_z-index"; @import "../_variables"; diff --git a/ui/ninezone/src/ui-ninezone/footer/message-center/Tab.scss b/ui/ninezone/src/ui-ninezone/footer/message-center/Tab.scss index c4b49c1..a38f404 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message-center/Tab.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message-center/Tab.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_geometry"; .nz-footer-messageCenter-tab { @@ -21,12 +21,12 @@ &:not(.nz-is-open) { border-bottom: 1px solid $buic-background-dialog-stroke; - background-color: $background-3; - color: $text-dark; + background-color: $buic-background-tab-inactive; + color: $buic-text-color; } &.nz-is-open { - color: $primary-base; + color: $buic-foreground-primary; &:after { content: ''; @@ -35,7 +35,7 @@ position: absolute; top: $bar-size; left: 0; - background: $primary-base; + background: $buic-foreground-primary; padding-left: $bar-size; padding-right: $bar-size; box-sizing: border-box; diff --git a/ui/ninezone/src/ui-ninezone/footer/message/Toast.scss b/ui/ninezone/src/ui-ninezone/footer/message/Toast.scss index fa1f5e5..d4500db 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/Toast.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/Toast.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-toast { &.nz-stage-animating { diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/Button.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/Button.scss index 0919b28..1c1b5c7 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/Button.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/Button.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-button { color: $buic-foreground-muted; diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/Hyperlink.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/Hyperlink.scss index 4b9f387..dd316dd 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/Hyperlink.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/Hyperlink.scss @@ -2,18 +2,18 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-hyperlink { - color: $primary-base; + color: $buic-foreground-primary; cursor: pointer; text-decoration: underline; &:hover { - color: $primary-hover; + color: $buic-row-hover; } &:active { - color: $primary-tone; + color: $buic-foreground-primary-tone; } } diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/Progress.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/Progress.scss index ff5e5f6..f18dca9 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/Progress.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/Progress.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-progress { $progress-tip-height: 7px; diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Button.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Button.scss index 497eda3..197550a 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Button.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Button.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-dialog-button { color: $buic-foreground-muted; diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Dialog.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Dialog.scss index c968291..8c25d9f 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Dialog.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Dialog.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; .nz-footer-message-content-dialog-dialog { diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/ResizeHandle.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/ResizeHandle.scss index be04a73..4717232 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/ResizeHandle.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/ResizeHandle.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-dialog-resizeHandle { $dot-size: 2px; @@ -12,7 +12,7 @@ width: $handle-size; height: $handle-size; cursor: se-resize; - color: $background-4; + color: $buic-background-divider; > .nz-dot { position: relative; diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Title.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Title.scss index 60355bf..e2078d7 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Title.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/Title.scss @@ -2,9 +2,9 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-dialog-title { color: $buic-text-color; - // filter: drop-shadow(0 1px 0 $text-dark); + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); } diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/TitleBar.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/TitleBar.scss index ffdaa5d..73e626b 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/TitleBar.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/TitleBar.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; .nz-footer-message-content-dialog-titleBar { diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/content/Scrollable.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/content/Scrollable.scss index b0199b8..35f9f3d 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/content/Scrollable.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/dialog/content/Scrollable.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../../../../_scrollbar"; @import "../_variables"; @@ -19,6 +19,6 @@ box-sizing: border-box; overflow: auto; - @include nz-scrollbar($color: $buic-background-scrollbar); + @include nz-scrollbar(); } } diff --git a/ui/ninezone/src/ui-ninezone/footer/message/content/status/Message.scss b/ui/ninezone/src/ui-ninezone/footer/message/content/status/Message.scss index b6329dd..6ee6e26 100644 --- a/ui/ninezone/src/ui-ninezone/footer/message/content/status/Message.scss +++ b/ui/ninezone/src/ui-ninezone/footer/message/content/status/Message.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-message-content-status-message { $min-width: 370px; @@ -13,7 +13,7 @@ min-width: $min-width; min-height: $min-height; display: flex; - background-color: $background-1; + background-color: $buic-background-control; overflow: hidden; border: { style: solid; diff --git a/ui/ninezone/src/ui-ninezone/footer/selection-info/SelectionInfo.scss b/ui/ninezone/src/ui-ninezone/footer/selection-info/SelectionInfo.scss index 1a2ca66..492f670 100644 --- a/ui/ninezone/src/ui-ninezone/footer/selection-info/SelectionInfo.scss +++ b/ui/ninezone/src/ui-ninezone/footer/selection-info/SelectionInfo.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../_variables"; .nz-footer-selection-info { diff --git a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Dialog.scss b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Dialog.scss index 06a1a45..1e523a4 100644 --- a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Dialog.scss +++ b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Dialog.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "@bentley/ui-core/lib/ui-core/_z-index"; @import "../_variables"; diff --git a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Icon.scss b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Icon.scss index 8117f35..991ba34 100644 --- a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Icon.scss +++ b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Icon.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../_variables"; .nz-footer-snapMode-icon { height: $snap-mode-icon-size; diff --git a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Indicator.scss b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Indicator.scss index 5395447..48546f4 100644 --- a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Indicator.scss +++ b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Indicator.scss @@ -2,11 +2,12 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../_variables"; .nz-footer-snapMode-indicator { - height: 100%; + height: calc(100% - #{$nz-footer-vertical-padding-height}); + top: $nz-footer-vertical-padding; display: flex; align-items: center; position: relative; @@ -51,6 +52,6 @@ } .nz-footer-snapMode-indicator:hover { - background-color: $primary-base; + color: $buic-foreground-primary; cursor: pointer; } \ No newline at end of file diff --git a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Snap.scss b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Snap.scss index f526b73..18ca558 100644 --- a/ui/ninezone/src/ui-ninezone/footer/snap-mode/Snap.scss +++ b/ui/ninezone/src/ui-ninezone/footer/snap-mode/Snap.scss @@ -2,7 +2,8 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; + .nz-footer-snapMode-snap { display: grid; grid-template-columns: auto 1fr; @@ -12,6 +13,7 @@ cursor: pointer; color: $buic-text-color; position: relative; + >.nz-icon { grid-row: 1; color: $buic-icon-color; @@ -20,10 +22,10 @@ grid-row: 1; } &.nz-is-active { - color: $primary-base; + color: $buic-foreground-primary; } &:hover { - color: $primary-tone; + color: $buic-foreground-primary-tone; } } @@ -31,9 +33,9 @@ content: ''; display: block; position: absolute; - background-color: $primary-base; + background-color: $buic-foreground-primary; left: 0; top: 0; bottom: 0; width: 2px; -} \ No newline at end of file +} diff --git a/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Content.scss b/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Content.scss index 7b06f55..2f4843a 100644 --- a/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Content.scss +++ b/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Content.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-toolAssistance-content { $horizontal-padding: 15px; @@ -12,5 +12,5 @@ padding-right: $horizontal-padding; padding-top: $vertical-padding; padding-bottom: $vertical-padding; - color: $text-dark; + color: $buic-text-color; } diff --git a/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Dialog.scss b/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Dialog.scss index 7803fe7..246247e 100644 --- a/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Dialog.scss +++ b/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Dialog.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "@bentley/ui-core/lib/ui-core/_z-index"; @import "../_variables"; diff --git a/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Separator.scss b/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Separator.scss index 73fbe69..dadf063 100644 --- a/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Separator.scss +++ b/ui/ninezone/src/ui-ninezone/footer/tool-assistance/Separator.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-footer-toolAssistance-separator { margin-bottom: 10px; @@ -10,6 +10,6 @@ > .nz-separator { height: 2px; width: 100%; - background-color: $background-4; + background-color: $buic-background-divider; } } diff --git a/ui/ninezone/src/ui-ninezone/popup/popover/Triangle.scss b/ui/ninezone/src/ui-ninezone/popup/popover/Triangle.scss index 792f882..04756b9 100644 --- a/ui/ninezone/src/ui-ninezone/popup/popover/Triangle.scss +++ b/ui/ninezone/src/ui-ninezone/popup/popover/Triangle.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_geometry"; .nz-popup-popover-triangle { diff --git a/ui/ninezone/src/ui-ninezone/popup/tooltip/Tooltip.scss b/ui/ninezone/src/ui-ninezone/popup/tooltip/Tooltip.scss index b58ee42..ebeb08d 100644 --- a/ui/ninezone/src/ui-ninezone/popup/tooltip/Tooltip.scss +++ b/ui/ninezone/src/ui-ninezone/popup/tooltip/Tooltip.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_geometry"; @import "@bentley/ui-core/lib/ui-core/_z-index"; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/Items.scss b/ui/ninezone/src/ui-ninezone/toolbar/Items.scss index 7642f7c..604e546 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/Items.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/Items.scss @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "scroll/_variables"; @import "_variables"; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/Icon.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/Icon.scss index 04d9a57..830316e 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/Icon.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/Icon.scss @@ -15,7 +15,7 @@ cursor: pointer; transition: all 500ms ease; position: relative; - background: $background-1 linear-gradient(to bottom, $buic-button-gradient1, $buic-button-gradient2); + background: $buic-background-control linear-gradient(to bottom, $buic-button-gradient1, $buic-button-gradient2); height: $nz-desktop-item-height; width: $nz-desktop-item-width; @@ -60,20 +60,20 @@ } &:active:not(.nz-is-disabled) { - background: $primary-tone; - color: $text-light; + background: $buic-foreground-primary-tone; + color: $buic-text-color-reverse; transition-duration: 150ms; transition-timing-function: cubic-bezier(1, 0.1, 1, 0.5); } &.nz-is-active { - background: $background-1; + background: $buic-background-control; &:not(:active):not(.nz-is-disabled) { transition-duration: 0s; >.nz-icon { - color: $primary-base; + color: $buic-foreground-primary; filter: $no-shadow; transition-duration: 150ms; transition-timing-function: cubic-bezier(1, 0.1, 1, 0.5); @@ -87,7 +87,7 @@ content: ''; display: block; position: absolute; - background: $primary-base; + background: $buic-foreground-primary; left: 3px; top: ($nz-desktop-item-height - $desktop-tool-stripe-height) / 2; border-radius: 2px; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/_variables.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/_variables.scss index a2ad131..6ee5830 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/_variables.scss @@ -3,16 +3,16 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; $desktop-tool-stripe-width: 2px; $desktop-tool-stripe-height: 30px; $icon-size: 16px; $icon-color: $buic-icon-color; -$hovered-icon-color: $primary-tone; +$hovered-icon-color: $buic-foreground-primary-tone; $pressed-icon-color: $buic-icon-color-reverse; -$active-icon-color: $primary-base; +$active-icon-color: $buic-foreground-primary; $disabled-icon-color: $buic-icon-color-disabled; $icon-shadow-color: $buic-icon-color-reverse; $icon-shadow: drop-shadow(0 1px 0 $icon-shadow-color); diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/Nested.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/Nested.scss index aa8e83f..05cf669 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/Nested.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/Nested.scss @@ -19,7 +19,7 @@ cursor: pointer; > * { - color: $primary-base; + color: $buic-foreground-primary; } } diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/_variables.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/_variables.scss index 87accf1..a79eab5 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/_variables.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../../../_typography"; $panel-padding-left: 16px; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/Tool.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/Tool.scss index 4ea0737..36763be 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/Tool.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/Tool.scss @@ -8,9 +8,9 @@ .nz-toolbar-item-expandable-group-tool-item { $label-color: $buic-text-color; $pressed-label-color: $buic-foreground-activehover; - $hovered-label-color: $primary-base; - $focused-label-color: $primary-base; - $active-label-color: $primary-base; + $hovered-label-color: $buic-foreground-primary; + $focused-label-color: $buic-foreground-primary; + $active-label-color: $buic-foreground-primary; $disabled-label-color: $buic-text-color-disabled; $item-height: 32px; $item-border-width: 2px; @@ -76,7 +76,7 @@ &.nz-is-focused:not(.nz-is-disabled) { color: $focused-label-color; - border-color: $primary-base; + border-color: $buic-foreground-primary; border-width: $item-border-width; border-style: solid; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/_variables.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/_variables.scss index e726771..b9c2be4 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/group/tool/_variables.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; $no-shadow: none; $shadow: drop-shadow(0 1px 0 $buic-foreground-body-reverse); diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Icon.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Icon.scss index 2026405..cd8b792 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Icon.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Icon.scss @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; .nz-toolbar-item-expandable-history-icon { diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Item.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Item.scss index ec7df7e..41fec76 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Item.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Item.scss @@ -3,12 +3,12 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; .nz-toolbar-item-expandable-history-item { $fill-color: $buic-background-toolbutton-inactive; - $pressed-fill-color: $primary-tone; + $pressed-fill-color: $buic-foreground-primary-tone; background-color: $fill-color; width: $desktop-item-width; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Tray.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Tray.scss index 1d7e854..fe3fe32 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Tray.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/Tray.scss @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../../../_geometry"; .nz-toolbar-item-expandable-history-tray { @@ -38,7 +38,7 @@ > .nz-extend-indicator { display: none; width: $extend-tool-history-tab-width; - background: $background-4; + background: $buic-background-4; align-items: center; justify-content: center; diff --git a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/_variables.scss b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/_variables.scss index a68f134..817b46e 100644 --- a/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/toolbar/item/expandable/history/_variables.scss @@ -10,9 +10,9 @@ $desktop-tool-stripe-height: 30px; $desktop-tool-stripe-width: 2px; $icon-color: $buic-icon-color; -$hovered-icon-color: $primary-base; +$hovered-icon-color: $buic-foreground-primary; $pressed-icon-color: $buic-icon-color; -$active-icon-color: $primary-base; +$active-icon-color: $buic-foreground-primary; $disabled-icon-color: $buic-icon-color-disabled; $active-item-bg-color: $active-icon-color; diff --git a/ui/ninezone/src/ui-ninezone/widget/Stacked.scss b/ui/ninezone/src/ui-ninezone/widget/Stacked.scss index 0155888..ee4fc36 100644 --- a/ui/ninezone/src/ui-ninezone/widget/Stacked.scss +++ b/ui/ninezone/src/ui-ninezone/widget/Stacked.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "@bentley/ui-core/lib/ui-core/_z-index"; @import "_variables"; diff --git a/ui/ninezone/src/ui-ninezone/widget/ToolSettings.scss b/ui/ninezone/src/ui-ninezone/widget/ToolSettings.scss index 07d3879..913a902 100644 --- a/ui/ninezone/src/ui-ninezone/widget/ToolSettings.scss +++ b/ui/ninezone/src/ui-ninezone/widget/ToolSettings.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; .nz-widget-toolSettings { display: grid; diff --git a/ui/ninezone/src/ui-ninezone/widget/_variables.scss b/ui/ninezone/src/ui-ninezone/widget/_variables.scss index 88e2097..e01d73d 100644 --- a/ui/ninezone/src/ui-ninezone/widget/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/widget/_variables.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; $nz-tab-height: 60px; $nz-tab-width: 32px; @@ -18,9 +18,9 @@ $nz-widget-border-width: 1px; $nz-widget-border-radius: 3px; $icon-color: $buic-icon-color; -$hovered-icon-color: $primary-tone; +$hovered-icon-color: $buic-foreground-primary-tone; $pressed-icon-color: $buic-background-control; -$active-icon-color: $primary-base; +$active-icon-color: $buic-foreground-primary; $disabled-icon-color: $buic-icon-color-disabled; $icon-shadow-color: $buic-background-control; $icon-shadow: drop-shadow(0 1px 0 $icon-shadow-color); diff --git a/ui/ninezone/src/ui-ninezone/widget/rectangular/Content.scss b/ui/ninezone/src/ui-ninezone/widget/rectangular/Content.scss index 9d0f841..0fe421f 100644 --- a/ui/ninezone/src/ui-ninezone/widget/rectangular/Content.scss +++ b/ui/ninezone/src/ui-ninezone/widget/rectangular/Content.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_scrollbar"; @import "../_variables"; @@ -28,5 +28,5 @@ } } - @include nz-scrollbar($color: $buic-background-scrollbar); + @include nz-scrollbar(); } diff --git a/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Group.scss b/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Group.scss index 864f8ca..2d9c6eb 100644 --- a/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Group.scss +++ b/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Group.scss @@ -2,12 +2,12 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_variables"; .nz-widget-rectangular-tab-group { @mixin nz-handle-gradient($direction) { - background: linear-gradient($direction, $background-5, $background-4); + background: linear-gradient($direction, $buic-background-5, $buic-background-4); } $border-radius: 2px; diff --git a/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Tab.scss b/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Tab.scss index b5032e0..963c783 100644 --- a/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Tab.scss +++ b/ui/ninezone/src/ui-ninezone/widget/rectangular/tab/Tab.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_variables"; .nz-widget-rectangular-tab-tab { @@ -33,24 +33,24 @@ } > * { - filter: drop-shadow((-0.4px) 0.9px 0 $text-light); + filter: drop-shadow((-0.4px) 0.9px 0 $buic-text-color-reverse); } &.nz-mode-active { width: $active-width; background-color: $nz-widget-background-color; - color: $primary-base; + color: $buic-foreground-primary; margin-right: -$nz-widget-border-width; > * { - filter: drop-shadow(0 1px 0 $text-light); + filter: drop-shadow(0 1px 0 $buic-text-color-reverse); } &::before { content: ''; display: block; position: absolute; - background-color: $primary-base; + background-color: $buic-foreground-primary; top: $nz-tab-strip-margin; width: $nz-tab-strip-width; height: $nz-tab-height - $nz-tab-strip-margin * 2 - $nz-widget-border-width * 2; diff --git a/ui/ninezone/src/ui-ninezone/widget/tool-settings/Tab.scss b/ui/ninezone/src/ui-ninezone/widget/tool-settings/Tab.scss index b30c56c..69a4ee6 100644 --- a/ui/ninezone/src/ui-ninezone/widget/tool-settings/Tab.scss +++ b/ui/ninezone/src/ui-ninezone/widget/tool-settings/Tab.scss @@ -2,13 +2,13 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "_variables"; .nz-widget-toolSettings-tab { width: $nz-tab-width; height: $nz-tab-height; - background-color: $background-3; + background-color: $buic-background-tab-inactive; display: flex; align-items: center; justify-content: center; diff --git a/ui/ninezone/src/ui-ninezone/widget/tools/button/Button.scss b/ui/ninezone/src/ui-ninezone/widget/tools/button/Button.scss index e65959c..d733fa1 100644 --- a/ui/ninezone/src/ui-ninezone/widget/tools/button/Button.scss +++ b/ui/ninezone/src/ui-ninezone/widget/tools/button/Button.scss @@ -11,7 +11,7 @@ cursor: pointer; position: relative; overflow: hidden; - background: $background-1; + background: $buic-background-control; border: { width: $button-stroke-width; color: $button-stroke-color; @@ -29,7 +29,7 @@ } &:active { - background: $primary-tone; + background: $buic-foreground-primary-tone; > .nz-gradient { width: 0; diff --git a/ui/ninezone/src/ui-ninezone/widget/tools/button/_variables.scss b/ui/ninezone/src/ui-ninezone/widget/tools/button/_variables.scss index 1e822a2..ed2168c 100644 --- a/ui/ninezone/src/ui-ninezone/widget/tools/button/_variables.scss +++ b/ui/ninezone/src/ui-ninezone/widget/tools/button/_variables.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; // Common $button-stroke-width: 2px; @@ -11,7 +11,7 @@ $button-stroke-radius: 3px; $icon-color: $buic-icon-color; $pressed-icon-color: $buic-icon-color-reverse; -$hovered-icon-color: $primary-tone; +$hovered-icon-color: $buic-foreground-primary-tone; $icon-shadow: drop-shadow(0 1px 0 $buic-icon-color-reverse); $no-shadow: drop-shadow(0 0 0 transparent); diff --git a/ui/ninezone/src/ui-ninezone/zones/state/layout/Root.ts b/ui/ninezone/src/ui-ninezone/zones/state/layout/Root.ts index 31ab8ec..bc75749 100644 --- a/ui/ninezone/src/ui-ninezone/zones/state/layout/Root.ts +++ b/ui/ninezone/src/ui-ninezone/zones/state/layout/Root.ts @@ -9,7 +9,7 @@ import { SizeProps } from "../../../utilities/Size"; /** @hidden */ export class Root { - public static readonly FOOTER_HEIGHT = 48; + public static readonly FOOTER_HEIGHT = 40; // Must match $footer-height in footer\_variables.scss private _isInFooterMode: boolean; private _bounds: Rectangle; diff --git a/ui/ninezone/src/ui-ninezone/zones/target/Arrow.scss b/ui/ninezone/src/ui-ninezone/zones/target/Arrow.scss index 4fbcb5e..0bf8086 100644 --- a/ui/ninezone/src/ui-ninezone/zones/target/Arrow.scss +++ b/ui/ninezone/src/ui-ninezone/zones/target/Arrow.scss @@ -2,11 +2,11 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_geometry"; .nz-zones-target-arrow { - color: $text-light; + color: $buic-text-color-reverse; display: flex; align-items: center; diff --git a/ui/ninezone/src/ui-ninezone/zones/target/Merge.scss b/ui/ninezone/src/ui-ninezone/zones/target/Merge.scss index 916adfc..83a1a0b 100644 --- a/ui/ninezone/src/ui-ninezone/zones/target/Merge.scss +++ b/ui/ninezone/src/ui-ninezone/zones/target/Merge.scss @@ -2,7 +2,7 @@ * Copyright (c) 2019 Bentley Systems, Incorporated. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license terms. *--------------------------------------------------------------------------------------------*/ -@import "@bentley/ui-core/lib/ui-core/colors"; +@import "@bentley/ui-core/lib/ui-core/style/themecolors"; @import "../../_geometry"; .nz-zones-target-merge {